• Python pep8代码规范



    title: Python pep8代码规范
    tags: Python

    介绍(Introduction)

    官方文档:PEP 8 -- Style Guide for Python Code

    很多的项目都有自己的代码规范,如果和自己的项目冲突,优先按照自己项目的规范。

    保持盲目的一致是头脑简单的表现(A Foolish Consistency Is The Hobgoblin Of Little Minds)

    代码风格(Code lay-out)

    缩进(Indentation)

    采用4个空格进行缩进,对于续行来说,4空格的规则可以不遵守。

    续行有两种方式:隐式续行,悬挂续行。隐式续行是垂直对齐于圆括号、方括号和花括号。
    悬挂续行注意两点:第一行不包含参数,在续行中要再缩进一级

    YES

    # 同开始分界符(左括号)对齐
    foo = long_function_name(var_one, var_two,
                             var_three, var_four)  # 和左侧的圆括号对齐
    # 续行多缩进一级以同其他代码区别
    #悬挂续行多缩进了一级,同时第一行没有参数
    def long_function_name(
            var_one, var_two, var_three,
            var_four):
        print(var_one)   
    
    # 悬挂缩进需要多缩进一级
    # 区别于下面的
    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)                        
    

    NO

    # 采用垂直对齐时第一行不应该有参数
    foo = long_function_name(var_one, var_two,
        var_three, var_four)
    
    # 续行并没有被区分开,因此需要再缩进一级
    def long_function_name(
        var_one, var_two, var_three,
        var_four):
        print(var_one)
    
    foo = long_function_name(
    var_one, var_two,
    var_three, var_four)
    

    多行if语句

    如果if语句太长,需要用多行书写,2个字符(例如,if)加上一个空格和一个左括号刚好是4空格的缩进,但这对多行条件语句的续行是没用的。因为这会和if语句中嵌套的其他的缩进的语句产生视觉上的冲突。这份PEP中并没有做出明确的说明应该怎样来区分条件语句和if语句中所嵌套的语句。以下几种方法都是可行的,但不仅仅只限于这几种方法:

    # 不采用额外缩进
    if (this_is_one_thing and
        that_is_another_thing):
        do_something()
    
    # 增加一行注释,在编辑器中显示时能有所区分
    # supporting syntax highlighting.
    if (this_is_one_thing and
        that_is_another_thing):
        # Since both conditions are true, we can frobnicate.
        do_something()
    
    # 在条件语句的续行增加一级缩进
    if (this_is_one_thing
            and that_is_another_thing):
        do_something()
    

    多行结束右圆/方/花括号可以单独一行书写,和上一行的缩进对齐:

    自己换行的时候,习惯于右括号在做左侧

    my_list = [
        1, 2, 3,
        4, 5, 6,
        ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
        )
    

    也可以和多行开始的第一行的第一个字符对齐:

    my_list = [
        1, 2, 3,
        4, 5, 6,
    ]
    result = some_function_that_takes_arguments(
        'a', 'b', 'c',
        'd', 'e', 'f',
    )
    

    Tab还是空格?(Tab Or Space?)

    推荐使用空格缩进,Python3不允许table和space混合使用

    每行最大长度(Maximum Line Length)

    每行最多79个字符,

    对于连续大段的文字(比如文档字符串(docstring)或注释),其结构上的限制更少,这些行应该被限制在72个字符长度内。

    限制宽度是为了更好的进行代码review

    一些团队会强烈希望行长度比79个字符更长。当代码仅仅只由一个团队维护时,可以达成一致让行长度增加到80到100字符(实际上最大行长是99字符),注释和文档字符串仍然是以72字符换行。

    推荐使用圆括号、方括号、花括号的隐式续行,长行最好加上反斜杠区别续行

    with open('/path/to/some/file/you/want/to/read') as file_1, 
         open('/path/to/some/file/being/written', 'w') as file_2:
        file_2.write(file_1.read())
    

    空行(Blank Line)

    用两个空行隔离function和类

    使用1个空行来分隔类中的方法(method)定义。

    在函数内(尽量少地)使用空行使代码逻辑更清晰。

    Imports

    Imports应该分行写,而不是都写在一行

    # 分开写
    import os
    import sys
    # 不要像下面一样写在一行
    import sys, os
    

    这样写也是可以的:

    from subprocess import Popen, PIPE
    

    Imports应该写在代码文件的开头,位于模块(module)注释和文档字符串之后,模块全局变量(globals)和常量(constants)声明之前。

    mports应该按照下面的顺序分组来写:

    • 标准库imports
    • 相关第三方imports
    • 本地应用/库的特定imports

    导入的时候推荐使用绝对路径导入,这样会更加清晰

    变量

    • 常量:大写+下划线
      USER_CONSTANT 对于不会发生改变的全局变量,使用大写加下划线
    • 私有变量 : 小写和一个前导下划线
      _private_value

    函数和方法

    总体而言应该使用,小写和下划线
    参考:

    类使用驼峰式的命名,所有单词首字母大写其余字母小写
    如:MimeTypes

    对于基类而言,可以使用一个 Base 或者 Abstract 前缀
    BaseCookie
    AbstractGroup

    https://www.python.org/dev/peps/pep-0008/#introduction

    http://nanshu.wang/post/2015-07-04/

    http://lmmsoft.github.io/blog/2012/01/23/python-代码风格pep8/

  • 相关阅读:
    JAVA微信公众号网页开发——获取公众号关注的所有用户
    删除mysl
    sql语言(mysql)
    mycat读写分离
    mysql双主双从技术
    实用的10个日志处理案例
    ansible基本操作
    MySQL改密
    mysql源码包安装
    ftp搭建mysql服务器
  • 原文地址:https://www.cnblogs.com/Python666/p/7589358.html
Copyright © 2020-2023  润新知