自己整理了一套 Python 的编码规范,欢迎大家指导 - V2EX
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 5095 次点击
    这是一个创建于 1909 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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     Solana     2605 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:51 PVG 22:51 LAX 07:51 JFK 10:51
    Do have faith in what you're doing.
    ubao 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