官网
PEP 8 – Style Guide for Python Code | peps.python.org
代码编码
- 编码格式全部为utf-8。在Python代码的开头,要统一加上
# -*- coding:utf-8 -*-
,以解决乱码问题。
命名规范
- 包是一个含有
__init__
的文件夹,模块是一个.py
结尾的文件
类型 | 命名规范 | 示例 |
---|---|---|
包(Package) | 尽量短小,全小写,不推荐使用下划线 | mypackage |
模块(Module) | 尽量短小,全小写,用下划线 | my_module.py |
类(Class) | 首字母大写,驼峰,不用下划线 | MyClass |
函数(Function) | 全小写,用下划线 | my_function |
方法(Method) | 全小写,用下划线 | class_method |
常量(Constant) | 全大写,用下划线 | MY_CONSTANT |
变量(Variable) | 全小写,用下划线 | my_variable |
布局规范
1. 缩进
-
缩进4个空格
-
慎用Tab(不是所有解释器中的Tab都占四个空格)
-
对齐缩进
- 缩进块与开始分隔符对齐
foo = long_function_name(var_one, var_two, var_three, var_four)
-
悬挂缩进
- 段落或语句中除了第一行之外的每一行都缩进,第一行不能有参数
# 举例1:使用悬挂缩进时,第一行不能有参数 foo = long_function_name( var_one, var_two, var_three, var_four) # 举例2:在续行上使用双缩进,提高可读性 def long_function_name( var_one, var_two, var_three, var_four): print(var_one)
2. 空格
-
避免空格:
-
括号里
# Correct: spam(ham[1], {eggs: 2}) # Wrong: spam( ham[ 1 ], { eggs: 2 } )
-
在后面的逗号和后面的右括号之间
# Correct: foo = (0,) # Wrong: bar = (0, )
-
逗号,冒号,分号之前
# Correct: if x == 4: print(x, y); x, y = y, x # Wrong: if x == 4 : print(x , y) ; x , y = y , x
-
索引操作中的冒号当作操作符处理,前后要有同样数量的空格(建议没有)
# 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 : : upper] ham[ : upper]
-
紧接在函数调用的左括号之前
# Correct: spam(1) # Wrong: spam (1)
-
紧接在开始索引或切片的右括号之前
# Correct: dct['key'] = lst[index] # Wrong: dct ['key'] = lst [index]
-
赋值等操作符前后不能因为对齐而添加多个空格
# Correct: x = 1 y = 2 long_variable = 3 # Wrong: x = 1 y = 2 long_variable = 3
-
-
二元运算符两边放置一个空格
- 涉及 =、符合操作符 ( += , -=等)、比较( == , < , > , != , <> , <= , >= , in , not in , is , is not )、布尔( and , or , not )。
- 当有多个运算符,在优先级最低的运算符附近加空格
# 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)
-
关键字参数和默认值参数的前后不要加空格
# 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): ...
3. 空行
- 空两行:
- 函数与函数/类之间
- 导入部分与其他之间
- 空一行:
- 类中函数之间
- 每组导入部分之间,分三组:
- 标准库导入
- 相关的第三方进口
- 本地应用程序/库特定导入
- 函数内部,用于清晰显示步骤
4. 换行
-
隐含延续:如果代码包含在圆括号、方括号或大括号中,Python将假定行继续
# Correct: # 易于将运算符与操作数匹配 income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest) # Wrong: # 运算符远离其操作数 income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
-
如果不能用隐含延续,用反斜杠换行
5. 注释
- 同行
- 用>=2个空格分隔语句和注释
- 用1个空格分隔#和注释内容
- 换行
- 格式:用#开头,后跟一个空格
- 缩进:注释块缩进到与被描述的代码相同的级别
- 长度:注释长度不得超过79个字符
- 其他:如果注释较多,也可以对注释分段
- 文档
- 用"""或’’’