Python 变量命名带类型标识是否合理

2019-04-30 09:48:43 +08:00
 Marsss

一般来说 python 变量的命名规则是 lower_with_under,这里不是想讨论这个规则,而是想讨论如何让命名更容易被理解。

我看到有些规范里提到: 变量名不应带有类型信息,因为 Python 是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。

但是我感觉这样有点不太合理,有些变量如果带上 names_list,这样更容易被理解。而且在谷歌版本的 python 规范中,在正确的示例代码里也出现了这样的命名。

那么大家觉得 name_list 类似这样的命名是否合理呢?

3041 次点击
所在节点    问与答
9 条回复
zhucegeqiu
2019-04-30 10:08:32 +08:00
我一般用 names,因为没准哪天就不用 list 改用 set 或者别的数据结构了
Kiriz
2019-04-30 10:16:30 +08:00
def foo(a: int, b: List[int]) -> bool
感觉这样就差不多了 关键地方写点注释应该还行
变量名强制带类型还是不习惯
dacapoday
2019-04-30 10:18:43 +08:00
与其说是类型,不如说是在声明这些变量名表示容器。不带类型信息也许是指变量名的语义能够像静态类型中的泛型一样使用。
Vinty
2019-04-30 10:19:23 +08:00
动态类型语言的意思是编译器不知道类型,而不是人不知道类型吧
PEP8 并没有找到这条规范,中文规范基本都是抄的同一篇
wwqgtxx
2019-04-30 10:27:23 +08:00
反正我自己写经常是 xxx_list xxx_dict 倒是不用 xxx_obj 这种,只要 pep8 没说不建议使用就无所谓了,其他规范就不用看了
anonymous256
2019-04-30 10:30:26 +08:00
"因为 Python 是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名", 好奇有人经常会把一个变量弄成多种完全不同的变量类型吗? 大多数时候, 命名的一个变量, 就是期望它一个确定的类型. 比如像你想定义一个列表, temp = [], 难道在后面你还会把它当成 dict 去使用? 即便写成 temp_list 也没什么问题.

但是有种情况可能例外, 如果一个变量作为函数的入参, 它存在多种可能的类型, 也意味着通常要用 isinstance()进行类型判断吧.

正式因为动态语言,缺少了类型检查, 可能会引入一些错误, 或者其它同事看函数的时候不能一眼就知道函数参数和返回值的类型, 又或者后期自己维护的时候, 连变量的类型都不知道了. 就我个人而言, 我更习惯于使用 type hints 避免这些问题. https://docs.python.org/3/library/typing.html
youngce
2019-04-30 10:40:13 +08:00
这其实是一个编码风格问题,如果贵司的小伙伴都能做到所有的 list 对象的命名都是 XXX_list,dict 对象都是 XXX_dict,甚至遵守 XXX_int、XXX_str,全部统一。其实是不错的,但是几乎很难- -所以你要是 不能始终如一,这样写确实意义不大
Fishdrowned
2019-04-30 11:47:21 +08:00
Marsss
2019-04-30 12:38:40 +08:00
好吧,其实只是为了增加代码的可读性,大概也只有 list 类型的变量,倾向于在命名里标注一下,表示这个变量是一个序列,其他代码在使用的时候可读性可能会好点,比如 for x in xxx_list 、xxx not in xxx_list 之类的,其他类型的变量确实没什么必要。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559984

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX