首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

命名习惯问题,大家怎么起名的啊?从驼峰转到下划线好不适应啊……

  •  
  •   JCZ2MkKb5S8ZX9pq · 42 天前 · 3280 次点击
    这是一个创建于 42 天前的主题,其中的信息可能已经有所发展或是发生改变。

    驼峰

    • 输入便利、连续,习惯小指按 shift,而且即便不大写,ide 也会自动补完已有的名称。
    • 省一个格子,pep8 一行 79-80 个字符限制,下划线多占一个格子。

    下划线

    • 变量名看起来稍微清楚一点(但读惯了驼峰也还好)
    • 公认的 python 命名方式(真的是最近才知道)
    • 输入下划线,有时候会按错键,还没适应。

    • 反正努力在适应下划线,但还是想吐槽一下。
    • 另外大家全局变量,Class,一般命名习惯是怎么样的呢?
      比如我搞个类 Timer 计时,调用的时候习惯缩写 tmr。大家这方面怎么区分的呢?
      另外包和包里的函数,功能如果差不多的话(我不习惯把太多功能放到一个包里,都拆分了),import 的时候就显得很重复。命名上大家习惯怎么区分呢?
    • Python 风格规范 — Google 开源项目风格指南 我看这篇,感觉除了 Class 和 Constants,其它也都差不多啊。
    第 1 条附言  ·  42 天前

    另外补充下类似 Class Timer() 的问题。

    • 如果我写tmr=Timer(),甚至我这边有些老程序员朋友会写tm,虽然易区分,但长期来看并不易读。
    • 但我如果写timer=Timer(),又感觉区分得不是太明显。
    • 或者在调用的时候用timer,类名再搞特殊点?

    大家习惯怎么处理这类命名呢?

    38 回复  |  直到 2019-10-27 16:47:51 +08:00
        1
    okwork   42 天前 via Android
    py 里面也有驼峰,是留给类名用的
        2
    ClericPy   42 天前   ♥ 1
    Python 又不是 go, 想驼峰就驼峰呗, 用 go 的时候 linter 直接告诉我别用下划线, 每次大小写按 shift 按的想死... 左 shift 右 shift.... 如果下划线, 只按左 shift 就够了, 而且驼峰有些 is of 什么的真不喜欢大写....
        3
    ayase252   42 天前
        4
    by73   42 天前
    难道大家都不用 IDE 补全的么?无论驼峰还是下划线,基本都只是在定义的时候用一次,后面直接全小写不带下划线也可以直接提示出来。
        5
    JCZ2MkKb5S8ZX9pq   42 天前
    @okwork 类名是首字大写吧,我说的是小驼峰,第一个首字小写的…… 以前落下的习惯
        6
    JCZ2MkKb5S8ZX9pq   42 天前
    @ClericPy 打字习惯我倒还好,左右 shift 双持,英文写作速度还行。所以反而很少用下划线。
        7
    lc7029   42 天前   ♥ 3
    汉字变量名,完事了
        8
    lc7029   42 天前   ♥ 1
    @lc7029 补充,数据库名,数据库字段名也用汉字
        9
    JCZ2MkKb5S8ZX9pq   42 天前
    @lc7029 大哥你认真的吗?
        10
    lc7029   42 天前   ♥ 1
    @JCZ2MkKb5S8ZX9pq 认真的,python 和 mysql 支持为什么不能用
        11
    cquan   42 天前
    一直用驼峰( ̄▽ ̄)"
        12
    JCZ2MkKb5S8ZX9pq   42 天前
    @cquan 要考虑为将来团队协作做准备啊 我也是最近才开始转
        13
    JCZ2MkKb5S8ZX9pq   42 天前
    @lc7029 python 我个人不习惯用中文命名,注释和 log 有时候会写中文。
    数据库的话真的不行,mongodb 里 key 是重复占空间的,大点的库恨不得映射一套缩写。。。
        14
    xuanwu   42 天前
    +1 @lc7029。最近的大疆机甲大师也用了中文 Python: https://www.v2ex.com/t/612749#reply0

    中文命名风格可以复用于多种语言(自己用过的有 Java,JS, TS,SQL 等),比如要区分类名的话加个后缀"XX 类“。下划线、驼峰都不需要,也是中文的一个优势。
        15
    otakustay   42 天前
    @ClericPy 为什么驼峰要右边的 Shift……
        16
    fancy111   42 天前
    不要纠结命名,差不多能看懂就行。
    搞不懂说考虑团队协作的,难道你们是机器人吗?
        17
    Immortal   42 天前
    我习惯是:
    1 脚本下划线 静态语言
    2 小驼峰 ,因为 go 大小写涉及到作用域,导出类型只能大驼峰
        18
    ClericPy   42 天前
    @otakustay 小学的键盘指法教学... shift 要用离次要键位远的那一个, 符合人体工...

    我不反感左手按 shift 也是近 20 年苦练 cs 的成果

    @JCZ2MkKb5S8ZX9pq 因为你以前驼峰按的多了, 自然舒服, 我现在也在强制练习了

    反正对 Python 来说, 讲的就是一个灵活, 在灵活的基础上, 一定要保证前后一致, 这样会避免很多小毛病.
        19
    wangyzj   42 天前
    python 我习惯蛇形
    其他的驼峰
        20
    classyk   42 天前   ♥ 1
    最近代码看多了,觉得汉字变量名真 TMD 好。
    驼峰有些也看着不舒服,下划线输入起来麻烦而且长
    反正没有完美的解决方式。
        21
    cexia   42 天前
    既然提到 PEP8 了,那就按照 PEP8 里的规范做呗。
    什么场景驼峰,什么场景下划线,都明确写了啊。
    本来就是根据口味来的东西。日常工作若是要统一口味,我跟 PEP8。
        22
    ClarkAbe   42 天前 via Android
    一个单词全小写,多个单词驼峰,超长下划线
        23
    EscYezi   42 天前 via iPhone
    主力 java 的路过,之前写 python 脚本写到一半才发现用的驼峰,索性继续驼峰了,看着比较顺眼(
    变量名个人比较注重描述清楚这个变量的作用,长一点没关系,大三的时候汇编课被老师吐槽写的太啰嗦🤣
    timer 那个如果我担心自己搞不清,甚至会写成 timerObj
        24
    EscYezi   42 天前 via iPhone
    @EscYezi #22 或者根据 timer 的实际作用,比如 sortTimer
        25
    noobsheldon   42 天前 via Android
    #noqa
        26
    byfar   42 天前
    go: 驼峰
    rust: 下划线
    python: 下划线

    写代码时自动切换的路过
        27
    sazima   42 天前
    代码里警告太多影响美观
        28
    JCZ2MkKb5S8ZX9pq   42 天前
    @EscYezi 或者考虑到 timer 复用次数比较多,宁可 class 的命名复杂一点长一点。
        29
    koebehshian   42 天前
    类名用形容词,变量用名词,函数名用动词
        30
    akira   42 天前
    大小写敏感的语言 用驼峰写的代码看起来好累 眼睛都要看花了
        31
    oneisall8955   41 天前
    Java 习惯用驼峰,类 shell 脚本习惯用下划线
        32
    nightwitch   41 天前
    C++变量驼峰,函数用下划线,和 stl 的风格保持一致
    python 照 pep8 的风格来
        33
    secondwtq   41 天前
    如果在这两者之间摇摆不定,不如结合起来一块用吧

    OCaml 一般是用 underscore 的,但是语法要求一些结构(比如 Constructor 和 Module )必须以大写字母开头(语法强制的哦),于是就出现了这种 https://github.com/ocaml/ocaml/blob/79f1c734621ea75bfacaed9ea20ebef7479194b2/typing/env.ml#L77 “首字母大写的 underscore”
        34
    secondwtq   41 天前
    另一个有意思的现象(和楼主的 append 有点关系),C/C++ 其实是没有官方推荐的变量命名规范的(可能是有,但是就算有也没法 mandate ),每个项目的规范都不太一样
    于是 LLVM 一开始用了以 camelcase 为主的命名方案,具体来说是类型名,变量名(包括局部变量和成员变量),用 UpperCamelCase,函数名是 lowerCamelCase。
    但是后来发现一个问题,比如我有一个变量的类型是 MemorySSAUpdater,那么按照命名规范,我不能把它命名成 MemorySSAUpdater,因为会和类型名冲突,现在的解决方案是取首字母 acronym 命名成 MSSAU。这种情况在整个仓库里十分广泛: https://github.com/llvm/llvm-project/blob/734c74ba14be0f4421ccd9f720e5b9309248e0f7/llvm/lib/Transforms/Scalar/LoopLoadElimination.cpp#L709 感受一下
    但是这种命名多了就会十分奇怪,看代码必须先要熟悉这些奇怪的缩写才能看得下去

    于是现在有个 proposal 就是把变量命名从 UpperCamelCase 变成 lowerCamelCase,这样我就直接命名成 memorySSAUpdater 就行了: https://llvm.org/docs/Proposals/VariableNames.html

    不过 acronym 不能完全避免,任何一个专业领域都少不了 acronym,像什么 AST,CFG,BB,SCEV 之类的出现在编译器的代码中其实都正常,这些东西在学术界和工业界都有认知,问题对于一个项目来讲,很多类是项目独有的,写 acronym 就会让人摸不到头脑,至于 Loop 的变量名写成 L 之类的更是没啥必要
        35
    JCZ2MkKb5S8ZX9pq   41 天前
    @secondwtq 是的,所以我现在暂时是这么考虑的。
    class 调用之后的名字,使用比较广泛,所以这个尽量缩减。
    在我的例子里,这个就是 timer。
    然后类名称就长一点具体一点,再加上大写以区分了。

    然后有些类我作为全局量在用,统一配置在 config/setting 里,调用就暂时就全大写了,类似常量(这个还有点犹豫)。
    比如一些目录的设置,或者一些网址,需要根据账号等参数计算,就统一放在一个类里了。
    然后使用时的名称就暂时用全大写 PATH.product_image(pid) or PATH.brand_list(bid)
    但这样其实又不符合常量用全大写的规范,但是 path/url/account 这类词用小写又太容易跟局部变量撞车了,起太长又不大方便。

    ---

    另外首字大写+下划线的话,在几个指导文档里,是作为反面典型的。。。/捂脸
        36
    lolizeppelin   41 天前 via Android
    python 使用下划线源自于 linux c 代码风格

    习惯这种风格以后看 linux 里相关 c 代码比较舒服
        37
    Nick66   40 天前
    遵循所写语言的规范,不要自己创造规范
        38
    jin7   40 天前
    把限制从 80 改成 120 ~~
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2404 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 26ms · UTC 03:29 · PVG 11:29 · LAX 19:29 · JFK 22:29
    ♥ Do have faith in what you're doing.