推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› 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
Lonersun
V2EX  ›  Python

自己整理了一套 Python 的编码规范,欢迎大家指导

  •  
  •   Lonersun ·
    lonersun · Jul 20, 2020 · 6119 views
    This topic created in 2298 days ago, the information mentioned may be changed or developed.
    40 replies  •  2020-07-23 10:08:04 +08:00
    PbCopy111
    PbCopy111
    Jul 20, 2020
    1
    这是你的理论,还是大家约定俗称的理论啊??就看前几条,很多教程里面都不是这样子的啊。。
    ampedee
    ampedee
    Jul 20, 2020 via Android
    2
    挺棒的👍
    siteshen
    siteshen
    Jul 20, 2020❤️2
    3
    用了 https://github.com/psf/black 后,再也不用管单引号、双引号、空格的问题了。
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    4
    @PbCopy111 一部分是自己在实际项目中的经验教训,一部分是参考了大家约定俗称的东西,也参考了阿里 JAVA 编码规范的一些东西,我个人认为编码规范没有对错之分,这更像一个契约,一个自己团队能保持风格一致的规则,如果有利于代码维护,那目的就达到了。
    renmu123
    renmu123
    Jul 20, 2020 via Android
    5
    大家应该都是遵守 pep8 规范的
    volvo007
    volvo007
    Jul 20, 2020
    6
    任何货币金额,均以最小货币单位且整型类型来进行存储

    这一条,不应该用字符串来保存吗?
    aeron
    aeron
    Jul 20, 2020 via Android
    7
    不是有现成的规范 PEP8 吗
    j2gg0s
    j2gg0s
    Jul 20, 2020
    8
    好 Google Python Style 或者 pep8 的显著区别在于? https://zh.wikipedia.org/wiki/%E5%A5%A5%E5%8D%A1%E5%A7%86%E5%89%83%E5%88%80
    Vegetable
    Vegetable
    Jul 20, 2020
    9
    没什么大问题,可以在公司内部使用。
    laike9m
    laike9m
    Jul 20, 2020
    10
    大概看了一下还行,只不过这个例子应该用 constants.MALE 而不是 SEX_MAN

    正例:[能通过常量的名称知晓所指的含义]

    if sex == constants.SEX_MAN:
    return False
    xiangyuecn
    xiangyuecn
    Jul 20, 2020
    11
    python 不是怎么方便怎么来吗,哪来那么多条条框框,就图个方便,没别的
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    12
    @laike9m 多谢指正
    no1xsyzy
    no1xsyzy
    Jul 20, 2020❤️1
    13
    @laike9m #10 (不应该是 gender 么……
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    14
    @renmu123 @aeron 我们团队内部也是要求必须遵守 PEP8 编码规范,而我们这个规则是在 PEP8 规范上的补充,更多的偏向业务方向以及一些小的技巧,目的是为了让大家风格保持一致,提高代码的可读性
    qW7bo2FbzbC0
    qW7bo2FbzbC0
    Jul 20, 2020
    15
    ```python
    apple = "苹果"
    apples = ["苹果 1", "苹果 2"]
    ```

    我一般是使用
    ```
    apple = "苹果 1"
    apple_list = ["苹果 1", "苹果 2"]
    ```
    no1xsyzy
    no1xsyzy
    Jul 20, 2020
    16
    promise 是什么鬼,不应该是 convention 吗?
    laike9m
    laike9m
    Jul 20, 2020
    17
    https://v2ex.com/i/b6tF78T0.png

    这一条我不赞同。空行违背了大多人的代码习惯,并且其它 style guide 也没有要求空行的。

    https://v2ex.com/i/5X09U4mz.png

    在 Python 3 里已经没必要了

    https://v2ex.com/i/BNSgc85m.png

    没看懂
    laike9m
    laike9m
    Jul 20, 2020
    18
    @no1xsyzy 嗯,Gender.MALE 最好
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    19
    @xiangyuecn 简单的、一次性的项目没有那么多框框,但是针对一些比较中大型的项目,一些规范还是必要的,否则后期维护简直是灾难,就我们现在的项目开发维护了两年,大大小小迭代了十几个版本,研发前前后后小二十人,如果没有规范,维护起来还是很难的,而且好多规范不同语言之间道理是相同的,在看 JAVA 规范的时候发现好多可以借鉴的地方
    fanjianhang
    fanjianhang
    Jul 20, 2020
    20
    挺好的
    laike9m
    laike9m
    Jul 20, 2020
    21
    重新发一下图



    这一条我不赞同。空行违背了大多人的代码习惯,并且其它 style guide 也没有要求空行的。



    u"张三" 在 Python 3 里已经没必要了



    这条没看懂
    ijustdo
    ijustdo
    Jul 20, 2020
    22
    不错 大部分像约定俗成的 呵呵
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    23
    @laike9m 第一个问题:我们在做一些复杂逻辑处理的时候,增加必要的空行会让代码读起来更清晰些吧,比如下单接口,第一进行库存处理,第二下单处理,第三扣款处理,如果三块没有空行对读代码的人可能不太友好,当然这种复杂类的还是要拆方法;

    第二 中文前加 u, 我没有注明是 python2,python3 已经不需了,目前我们还是 python2,编码问题还是比较累

    第三条,我写的不太明确

    错误:
    def test():
    # 测试方法

    正确:
    def test():
    """测试方法"""

    感觉这种方法的注释,Numpy 这个包的开发者写的注释非常好

    非常感谢您指出的问题
    laike9m
    laike9m
    Jul 20, 2020
    24
    空行那个反正我只能说没见过这种写法,包括其它语言。有的人喜欢在多行的结构周围加空行,比如 for 循环,if...else, try...catch 等,这当然是 ok 的,我自己也喜欢这么做。但是一个 if...elif...else 的逻辑是一体的,放在一起更加合理。

    注释那个,你用的是 * (星号)而不是 " (双引号),是不是写错了?
    Lonersun
    Lonersun
    OP
    Jul 20, 2020
    25
    @laike9m 对,写错了
    ifzzzh
    ifzzzh
    Jul 20, 2020
    26
    # 判断传入的验证码如果不等于默认的验证码则返回 False
    if verify_code != default_code:
    return False
    else:
    return True

    emmmmm
    cz5424
    cz5424
    Jul 20, 2020 via iPhone
    27
    遵守一下 pep8
    ruanimal
    ruanimal
    Jul 20, 2020
    28
    用 Google 规范不好吗。。
    Johnny168
    Johnny168
    Jul 20, 2020
    29
    公司内部开发字典
    j0hnj
    j0hnj
    Jul 20, 2020
    30
    (三) 9.每个 py 文件在头行必须添加 # -- coding:utf-8 --。

    这个在 Python3 中也没有必要了
    renzhezheng
    renzhezheng
    Jul 20, 2020
    31
    你这 if-else 就不符合最少编码原则
    stephenyin
    stephenyin
    Jul 20, 2020
    32
    用 sex 真的合适么🙃?
    zzzmj
    zzzmj
    Jul 20, 2020
    33
    最近参与的 py 项目都是 flake8+isort+pylint+black 的多重狗逼校验。
    simple2025
    simple2025
    Jul 20, 2020
    34
    @zzzmj 有必要这么严吗?
    brickxu
    brickxu
    Jul 20, 2020
    36
    给人感觉是 Java 程序员转行 Python 给下的规范。。。
    forrestchang
    forrestchang
    Jul 20, 2020
    37
    更推荐 black 。
    aladdindingding
    aladdindingding
    Jul 21, 2020
    38
    看了看 好我们公司的类似 好代码就应该这么写
    llsquaer
    llsquaer
    Jul 21, 2020
    39
    自己的规范
    变量名 小写英文, 或者 v+中文
    全局 大写英文,或者 c+中文
    函数 中文
    类 首字母大写即可,其他不强求
    类方法 中文

    哈哈哈!!!
    zzzmj
    zzzmj
    Jul 23, 2020
    40
    @chenqh 统一风格其实还不错,反正写了个 git pre-commit hooks,除了 pylint 其他的耗时还行。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1340 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 110ms · UTC 21:04 · PVG 05:04 · LAX 13:04 · JFK 16:04
    ♥ Do have faith in what you're doing.