缩进规范
- 使用 4 个空格进行缩进,而不是 tab。
- 每行的长度限制在 79 字符以内
空行规范
- 全局的类、函数 的上方需要两个空行,类的函数之间需要一个空行。
- 函数内部根据代码逻辑也可以添加空行,但是最多一行。
空格规范
- 逗号 和 冒号 后面要添加一个空格。
- 注释 # 的前面添加两个空格,后面添加一个空格。
- 操作符,如 +,-,*,/,==,!=,等前后都要添加空格。
换行规范
- 当一行代码超过 79 字符,我们要进行换行。
- 在括号内的长参数可以直接换行,注意括号对齐。
- 使用换行符实现换行。
import 规范
- 所有的 import 放在开头。
- 一行导入一个模块。
- 尽量导入模块或者文件,而不要导入一个函数,因为这可能导致命名冲突。
注释规范
- 对于较大的逻辑块,可以在其上面一行用 # 添加注释,
- 像写作文一样写你的注释,包括:标点规范、语法正确、表意清晰、重点突出 等。
- 并不是很推荐行注释。
文档描述
- 描述一个类或者函数的作用,写在包含 class/def 语句的下一行。
- 使用 三个双引号 开始和结尾。
- 用一句话概括主要内容。
- 用一段话详细解释。
- 参数列表,参数格式,返回值格式。
命名规范
- ”计算机科学有两大难事:缓存失效 和 命名。“
- 拒绝毫无意义的单字符,除了使用 for i in range(10),这种迭代情况。
- 变量名:小写单词,下划线连接。如:data_format 。如果是私有变量,在前方添加两个下划线。
- 常量:全部大写,下划线连接。如:WAIT_TIME
- 函数名:小写单词,下划线连接。
- 类名:首字母大写,直接拼接。如:class SpatialDropout2D( )
代码拆分
- 这不是 PEP 8 规范,但是会有助于阅读。
- 将多个循环嵌套拆开:
def send(money):
if is_server_dead:
LOG('server dead')
return
else:
if is_server_timed_out:
LOG('server timed out')
return
else:
result = get_result_from_server()
if result == MONEY_IS_NOT_ENOUGH:
LOG('you do not have enough money')
return
else:
if result == TRANSACTION_SUCCEED:
LOG('OK')
return
else:
LOG('something wrong')
return
拆为:
def send(money):
if is_server_dead:
LOG('server dead')
return
if is_server_timed_out:
LOG('server timed out')
return
result = get_result_from_server()
if result == MONET_IS_NOT_ENOUGH:
LOG('you do not have enough money')
return
if result == TRANSACTION_SUCCEED:
LOG('OK')
return
LOG('something wrong')
- 将不同功能的逻辑拆成多个函数。
例如:一段二分查找的代码:
def solve(arr, target):
l, r = 0, len(arr) - 1
ret = -1
while l <= r:
m = (l + r) // 2
if arr[m] * arr[m] > target:
ret = m
r = m - 1
else:
l = m + 1
if ret == -1:
return -1
else:
return arr[ret]
print(solve([1, 2, 3, 4, 5, 6], 8))
print(solve([1, 2, 3, 4, 5, 6], 9))
print(solve([1, 2, 3, 4, 5, 6], 0))
print(solve([1, 2, 3, 4, 5, 6], 40))
拆为:
def comp(x, target):
return x * x > target
def binary_search(arr, target):
l, r = 0, len(arr) - 1
ret = -1
while l <= r:
m = (l + r) // 2
if comp(arr[m], target):
ret = m
r = m - 1
else:
l = m + 1
return ret
def solve(arr, target):
id = binary_search(arr, target)
if id != -1:
return arr[id]
return -1
print(solve([1, 2, 3, 4, 5, 6], 8))
print(solve([1, 2, 3, 4, 5, 6], 9))
print(solve([1, 2, 3, 4, 5, 6], 0))
print(solve([1, 2, 3, 4, 5, 6], 40))
- 类的拆分:根据类的意义拆分为多个类。
例如:
class Person:
def __init__(self, name, sex, age, job_title, job_description, company_name):
self.name = name
self.sex = sex
self.age = age
self.job_title = job_title
self.job_description = description
self.company_name = company_name
拆为:
class Person:
def __init__(self, name, sex, age, job_title, job_description, company_name):
self.name = name
self.sex = sex
self.age = age
self.job = Job(job_title, job_description, company_name)
class Job:
def __init__(self, job_title, job_description, company_name):
self.job_title = job_title
self.job_description = description
self.company_name = company_name
网友评论