Python 变量命名带类型标识是否合理 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Marsss
V2EX    问与答

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

  •  
  •   Marsss 2019-04-30 09:48:43 +08:00 3429 次点击
    这是一个创建于 2363 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    9 条回复    2019-04-30 12:38:40 +08:00
    zhucegeqiu
        1
    zhucegeqiu  
       2019-04-30 10:08:32 +08:00
    我一般用 names,因为没准哪天就不用 list 改用 set 或者别的数据结构了
    Kiriz
        2
    Kiriz  
       2019-04-30 10:16:30 +08:00
    def foo(a: int, b: List[int]) -> bool
    感觉这样就差不多了 关键地方写点注释应该还行
    变量名强制带类型还是不习惯
    dacapoday
        3
    dacapoday  
       2019-04-30 10:18:43 +08:00
    与其说是类型,不如说是在声明这些变量名表示容器。不带类型信息也许是指变量名的语义能够像静态类型中的泛型一样使用。
    Vinty
        4
    Vinty  
       2019-04-30 10:19:23 +08:00
    动态类型语言的意思是编译器不知道类型,而不是人不知道类型吧
    PEP8 并没有找到这条规范,中文规范基本都是抄的同一篇
    wwqgtxx
        5
    wwqgtxx  
       2019-04-30 10:27:23 +08:00 via iPhone
    反正我自己写经常是 xxx_list xxx_dict 倒是不用 xxx_obj 这种,只要 pep8 没说不建议使用就无所谓了,其他规范就不用看了
    anonymous256
        6
    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
        7
    youngce  
       2019-04-30 10:40:13 +08:00
    这其实是一个编码风格问题,如果贵司的小伙伴都能做到所有的 list 对象的命名都是 XXX_list,dict 对象都是 XXX_dict,甚至遵守 XXX_int、XXX_str,全部统一。其实是不错的,但是几乎很难- -所以你要是 不能始终如一,这样写确实意义不大
    Marsss
        9
    Marsss  
    OP
       2019-04-30 12:38:40 +08:00
    好吧,其实只是为了增加代码的可读性,大概也只有 list 类型的变量,倾向于在命名里标注一下,表示这个变量是一个序列,其他代码在使用的时候可读性可能会好点,比如 for x in xxx_list 、xxx not in xxx_list 之类的,其他类型的变量确实没什么必要。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2644 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 15:03 PVG 23:03 LAX 08:03 JFK 11:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86