zoukankan      html  css  js  c++  java
  • 一、Python编码规范(PEP 8)/工程结构化

    1.主动换行

    • 在pycharm中的80个字符的分割线之前,主动换行
    • 不要设置自动换行,尽量自己主动换行

    2.合理使用括号去实现隐式连接

    if (width == 0 and height == 0 and color == 'red' and 
           emphasis == 'strong'):

    3.使用圆括号实现隐士连接

    str1= ('zhang'
           'jingxue')
    str2 = ('zhang
    '
           'jingxue')
    print(str1)
    print(str2)
    """
    zhangjingxue
    zhang
    jingxue
    """

    不建议使用 进行显示连接

    str2 = 'zhang'
           'jingxue'

    4.注释中,如果出现URL,一定要写在一行

    url = 'http://192.168.30.124:50084/biz/project-task-50-byModule-54.html'

    5.不要在返回值或着条件语句中使用括号,除非需要数学计算或者行连接

    def fun1(a,b):
        return a,b   #正确
    def fun2(c,d):
        return (c,d) #错误

    6.函数变量与起始变量对齐

    def test_zjx(var1,var2,var3,var4,
             var5,var6,var7):
        pass

    7.四个空格缩进

    foo = long_function_name(
        var_one, var_two, var_three,
        var_four)

     8.顶级定义之间空2行,方法定义之间空1行

    pycharm编辑器的格式化是遵循PEP8规范的,pycharm中,选择工具栏的code--》reformat code 进行格式化

    顶级定义:
    def
    test1(): pass def test2(): pass
    方法定义:
    class
    A: def test1(self): pass def test2(self): pass

    9.括号里不要有空格

    def test(name = None, age = None):   # 错误
        pass
    
    def test(name=None, age=None):  #正确
        pass

    10.逗号,冒号,分号后面加空格

    def test(x,y):   # 错误
        pass
    
    def test(x, y):  # 正确
        pass

    11.不要用空格垂直对齐注释

    def test(x, y):    
        sum = x + y        #求和
        chengji = x * y    #求积

    12.文档注释(文档字符串--docstring)

    • 该函数实现的功能
    • 函数中参数的介绍(param,args)
    • 返回值,返回值举例
    • 抛异常说明

    13.代码块中,对于复杂的操作, 应该在其操作开始前写上若干行注释. 对于不是一目了然的代码, 应在其行尾添加注释.绝不要描述代码

    # We use a weighted dictionary search to find out where i is in
    # the array. We extrapolate position based on the largest num
    # in the array and the array size and then do binary search to
    # get the exact number.
    if i & (i-1) == 0: # true iff i is a power of 2

    14.如果一个类不继承其他类,就显式的从object继承,嵌套类也是一样

    class OuterClass(object):
        class InnerClass(object):
            pass    

    15. 避免在循环中用++=操作符来累加字符串. 由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间. 作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表

    正确:
    items = ['<table>']
    for last_name, first_name in employee_list:
        items.append('<tr><td>%s, %s</td></tr>' % (last_name,first_name))
        items.append('</table>')
        employee_table = ''.join(items)
    
    错误:
    employee_table = '<table>'
    for last_name, first_name in employee_list:
        employee_table += '<tr><td>%s, %s</td></tr>' % (last_name,first_name)
        employee_table += '</table>'

    16.为多行字符串使用三重双引号“”“,而非三重单引号。当且仅当项目中使用单引号'来引用字符串时, 才可能会使用三重'''

    17. 关闭类文件对象的方法,对于不支持使用"with"语句的类似文件的对象,使用contextlib.closing():

    import contextlib
    with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
      for line in front_page:
        print line

    注意:扩展:同时含有'__enter__',  '__exit__', 这2个属性的文件,才支持with。没有这2个属性,不支持with打开文件的,就要使用上面的方法。

     18. 为临时代码使用TODO注释, 它是一种短期解决方案. 不算完美, 但够好了.TODO注释应该在所有开头处包含"TODO"字符串, 紧跟着是用括号括起来的你的名字, email地址或其它标识符. 然后是一个可选的冒号. 接着必须有一行注释, 解释要做什么. 主要目的是为了有一个统一的TODO格式
    # TODO(Wuji) Change this to use relations.

    def fun():
        
        #TODO 后期实现的功能
        pass

    19.每个导入独占一行

    导入顺序:

    • 标准库导入
    • 第三方库导入
    • 应用程序指定导入
    #不推荐:
    import sys, os
    #但是可以这样:
    from subprocess import Popen, PIPE

    20.在没有else的情况下,if语句可以单独在一行

    def fun(x,y):
        if x > 0: y = x + y
        return y

    21.用单下划线(_)开头表示模块变量或函数是protected(使用import * from时不会包含). 单下划线_ ,是受保护的 proected -----当前文件是可以用的,只是不能导出到别的文件用

    • int a  表示的公共的,public
    • _a = 10,是受保护的,其所在的模块.py被别的模块import时,_a不会被导入到别的模块去的。

    22. 用双下划线(__)开头的实例变量或方法表示类内私有 private,----只能在这个类内部使用,别的类用不了。

    23. 将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块

    24. main
    即使是一个打算被用作脚本的文件, 也应该是可导入的. 并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行, 这是一种副作用. 主功能应该放在一个main()函数中

    Python, pydoc以及单元测试要求模块必须是可导入的. 你的代码应该在执行主程序前总是检查 if __name__ == '__main__' , 这样当模块被导入时主程序就不会被执行.

    def main():
        ...
    
    if __name__ == '__main__':
        main()

    25.所有行限制最大的字符数是79

    26.空序列的判断

    #正确: 
    if not seq:
    if seq:
    
    #错误
    if len(seq):
    if not len(seq):

    27.不要用==去和布尔值比较

    正确: if greeting:
    糟糕: if greeting == True:
    更糟: if greeting is True:

  • 相关阅读:
    【Kubernetes学习之一】Kubernetes 简介
    eclipse&myeclipse 生成jar包后,spring无法扫描到bean定义
    【Docker学习之七】Docker图形化管理和监控
    【Docker学习之六】Docker容器互联
    【Docker学习之五】Docker自定义镜像示例
    【Docker学习之四】Docker自定义容器镜像
    【Docker学习之三】Docker查找拉取镜像、启动容器、容器使用
    【Docker学习之二】Docker部署安装
    Tensorflow之tf.metrics
    pytorch 实现多分类
  • 原文地址:https://www.cnblogs.com/zhangjx2457/p/14026335.html
Copyright © 2011-2022 走看看