V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2020-07-20 12:15:16 +08:00 · 4626 次点击
    这是一个创建于 1587 天前的主题,其中的信息可能已经有所发展或是发生改变。
    40 条回复    2020-07-23 10:08:04 +08:00
    PbCopy111
        1
    PbCopy111  
       2020-07-20 12:50:23 +08:00
    这是你的理论,还是大家约定俗称的理论啊??就看前几条,很多教程里面都不是这样子的啊。。
    ampedee
        2
    ampedee  
       2020-07-20 13:05:41 +08:00 via Android
    挺棒的👍
    siteshen
        3
    siteshen  
       2020-07-20 13:06:39 +08:00   ❤️ 2
    用了 https://github.com/psf/black 后,再也不用管单引号、双引号、空格的问题了。
    Lonersun
        4
    Lonersun  
    OP
       2020-07-20 13:16:00 +08:00
    @PbCopy111 一部分是自己在实际项目中的经验教训,一部分是参考了大家约定俗称的东西,也参考了阿里 JAVA 编码规范的一些东西,我个人认为编码规范没有对错之分,这更像一个契约,一个自己团队能保持风格一致的规则,如果有利于代码维护,那目的就达到了。
    renmu123
        5
    renmu123  
       2020-07-20 13:20:42 +08:00 via Android
    大家应该都是遵守 pep8 规范的
    volvo007
        6
    volvo007  
       2020-07-20 13:24:26 +08:00
    任何货币金额,均以最小货币单位且整型类型来进行存储

    这一条,不应该用字符串来保存吗?
    aeron
        7
    aeron  
       2020-07-20 13:24:32 +08:00 via Android
    不是有现成的规范 PEP8 吗
    j2gg0s
        8
    j2gg0s  
       2020-07-20 13:24:48 +08:00
    好 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
        9
    Vegetable  
       2020-07-20 13:32:56 +08:00
    没什么大问题,可以在公司内部使用。
    laike9m
        10
    laike9m  
       2020-07-20 13:35:41 +08:00
    大概看了一下还行,只不过这个例子应该用 constants.MALE 而不是 SEX_MAN

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

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

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

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

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

    在 Python 3 里已经没必要了

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

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



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



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



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

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

    第三条,我写的不太明确

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

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

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

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

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

    emmmmm
    cz5424
        27
    cz5424  
       2020-07-20 15:57:00 +08:00 via iPhone
    遵守一下 pep8
    ruanimal
        28
    ruanimal  
       2020-07-20 16:20:46 +08:00
    用 Google 规范不好吗。。
    Johnny168
        29
    Johnny168  
       2020-07-20 17:11:50 +08:00
    公司内部开发字典
    j0hnj
        30
    j0hnj  
       2020-07-20 17:18:24 +08:00
    (三) 9.每个 py 文件在头行必须添加 # -- coding:utf-8 --。

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

    哈哈哈!!!
    zzzmj
        40
    zzzmj  
       2020-07-23 10:08:04 +08:00
    @chenqh 统一风格其实还不错,反正写了个 git pre-commit hooks,除了 pylint 其他的耗时还行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2275 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:44 · PVG 09:44 · LAX 17:44 · JFK 20:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.