python - PEP8代码风格规范大全

 

1、代码布局

1、缩进

每个缩进级别使用4个空格。

续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐 。

# Correct:


# 添加4个空格(额外的缩进级别)以将参数与其他参数区分开来。
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)

# 悬挂式缩进应增加一个级别
foo = long_function_name(
    var_one, var_two,
    var_three, var_four)
# Wrong:

# Arguments on first line forbidden when not using vertical alignment.
foo = long_function_name(var_one, var_two,
    var_three, var_four)

# Further indentation required as indentation is not distinguishable.
def long_function_name(
    var_one, var_two, var_three,
    var_four):
    print(var_one)

多行构造上的右大括号/括号/圆括号可以排在列表最后一行的第一个非空白字符下,如:

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

或者它可以排列在开始多行构造的行的第一个字符下,如:

my_list1 = [
    1, 2, 3,
    4, 5, 6,
]
result2 = some_function_that_takes_arguments(
    'a', 'b', 'c',
    'd', 'e', 'f',
)
2、制表符或空格

1、空格是首选的缩进方法

2、制表符应仅用于与已经缩进制表符的代码保持一致。

3、python中不允许空格和制表符混用

3、最大长度

1、所有行限制在最多79个字符。

2、对于具有较少结构性限制的流动的长块文本(文件或注释),行长度应限制在72个字符。

3、反斜杠可以保持语句的连续性

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())
4、二进制运算符之前还是之后换行
# Wrong:

income = (gross_wages +
          taxable_interest +
          (dividends - qualified_dividends) -
          ira_deduction -
          student_loan_interest)


# Correct:

income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)
5、源文件编码

代码中的核心组,应该始终使用UTF-8,并且不应该有编码声明。

6、模块导入

1、导入模块应该但单独进行

# Correct:
import os
import sys

# Wrong:
import sys, os

2、导入同一模块的不同类、函数、常量等

# Correct:
from subprocess import Popen, PIPE

3、导入模块的顺序

        1、标准库的导入

        2、第三方接口的导入

        3、本地程序的导入

4、绝对路径导入

import mypkg.sibling
from mypkg import sibling
from mypkg.sibling import example
7、模块级别dunders

有两个前缀和两个后缀的名称__all__ ,__author__ ,__version__ 等应放在模块文档字符串之后

"""This is the example module.

This module does stuff.
"""

from __future__ import barry_as_FLUFL

__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'

import os
import sys
8、空行

1、顶层函数和类的定义,前后用两个空行隔开。

2、类里的方法定义用一个空行隔开。

class ModelOne(object):
    def __init__(self):
        pass

    def __new__(cls, *args, **kwargs):
        pass


def model_two():
    pass

2、字符串引号

在Python中,单引号字符串和双引号字符串是相同的。但是,当一个字符串包含单引号或双引号字符时,请使用另一条规则来避免字符串中出现反斜杠。它提高了可读性。

3、表达式和语句中的空格

1、紧贴在括号、中括号或花括号内侧

# Correct:
spam(ham[1], {eggs: 2})
# Wrong:
spam( ham[ 1 ], { eggs: 2 } )

2、后面的逗号紧贴括号的内测

# Correct:
foo = (0,)
# Wrong:
bar = (0, )

3、逗号、分号或冒号靠前

# Correct:
if x == 4: print(x, y); x, y = y, x
# Wrong:
if x == 4 : print(x , y) ; x , y = y , x

4、切片

# Correct:
ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham[1:9:]
ham[lower:upper], ham[lower:upper:], ham[lower::step]
ham[lower+offset : upper+offset]
ham[: upper_fn(x) : step_fn(x)], ham[:: step_fn(x)]
ham[lower + offset : upper + offset]
# Wrong:
ham[lower + offset:upper + offset]
ham[1: 9], ham[1 :9], ham[1:9 :3]
ham[lower : : step]
ham[ : upper]

5、函数的调用

# Correct:
spam(1)
# Wrong:
spam (1)

6、方括号的索引切片

# Correct:
dct['key'] = lst[index]
# Wrong:
dct ['key'] = lst [index]

7、变量赋值

# Correct:
x = 1
y = 2
long_variable = 3
# Wrong:
x             = 1
y             = 2
long_variable = 3

8、如果使用了不同优先级的操作符,可以考虑在优先级最低的操作符(ES)周围添加空格

# Correct:
i = i + 1
submitted += 1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
# Wrong:
i=i+1
submitted +=1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

9、函数注释应该使用普通的计算机规则,并且总是在计算机周围有空格。-> 如果有箭头

# Correct:
def munge(input: AnyStr): ...
def munge() -> PosInt: ...
# Wrong:
def munge(input:AnyStr): ...
def munge()->PosInt: ...

10、关键字默认参数

# Correct:
def complex(real, imag=0.0):
    return magic(r=real, i=imag)
# Wrong:
def complex(real, imag = 0.0):
    return magic(r = real, i = imag)


# Correct:
def munge(sep: AnyStr = None): ...
def munge(input: AnyStr, sep: AnyStr = None, limit=1000): ...
# Wrong:
def munge(input: AnyStr=None): ...
def munge(input: AnyStr, limit = 1000): ...

11、复合语句(同一行上的多个语句)不鼓励:

# Correct:
if foo == 'blah':
    do_blah_thing()
do_one()
do_two()
do_three()
相反,不:

# Wrong:
if foo == 'blah': do_blah_thing()
do_one(); do_two(); do_three()

12、代码块不鼓励写在同一行

# Wrong:
if foo == 'blah': do_blah_thing()
for x in lst: total += x
while t < 10: t = delay()
当然不会:

# Wrong:
if foo == 'blah': do_blah_thing()
else: do_non_blah_thing()

try: something()
finally: cleanup()

do_one(); do_two(); do_three(long, argument,
                             list, like, this)

if foo == 'blah': one(); two(); three()

4、何时使用后缀逗号

# Correct:
FILES = ('setup.cfg',)
# Wrong:
FILES = 'setup.cfg',
# Correct:
FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )
# Wrong:
FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

5、注释

1、块注释

与代码相矛盾的注释比没有注释更糟糕。当代码发生变化时,始终优先考虑保持注释的最新状态!

评论应该是完整的句子。第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。

块注释通常由一个或多个由完整句子组成的段落组成,每个句子都以句点结尾。

在多句评论中,除了在最后一句之后,你应该在句尾句号后使用一到两个空格。

确保你的评论清晰易懂,便于其他使用你所写语言的人理解。

来自非英语国家的Python程序员:请用英语写下你的评论,除非你有120%的把握,这些代码永远不会被不会说你的语言的人阅读。

2、内联注释

少使用内联注释。

内联注释是与语句在同一行上的注释。内联注释应该与语句至少分隔两个空格。它们应该从#和一个空格开始。

x = x + 1                 # Compensate for border
3、文件字符串(多行注释)

为所有公共模块、函数、类和方法编写文档字符串.

"""Return a foobang

Optional plotz says to frobnicate the bizbaz first.
"""

"""Return an ex-parrot."""

6、命名规范

1、模块
模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
# 正确的模块名
import decoder
import html_parser

# 不推荐的模块名
import Decoder

2、类名
类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头
class Farm():
pass

class AnimalFarm(Farm):
pass

class _PrivateFarm(Farm):
pass
将相关的类和顶级函数放在同一个模块里. 不像Java, 没必要限制一个类一个模块.

3、函数
函数名一律小写,如有多个单词,用下划线隔开
def run():
pass

def run_with_env():
pass
私有函数在函数前加一个下划线_
class Person():

def _private_func():
pass

4、变量名
变量名尽量小写, 如有多个单词,用下划线隔开
if __name__ == '__main__':
count = 0
school_name = ''
常量采用全大写,如有多个单词,使用下划线隔开
MAX_CLIENT = 100
MAX_CONNECTION = 1000
CONNECTION_TIMEOUT = 600

5、常量
常量使用以下划线分隔的大写命名
MAX_OVERFLOW = 100

Class FooBar:

def foo_bar(self, print_):
print(print_)


 

7、程序设计建议

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值