代码规范/代码风格的一致性

  • 与此风格指南保持一致很重要。
  • 项目内的一致性更重要。
  • 一个模块或函数内的一致性最重要。

评判标准:代码被阅读的次数远比被编写的次数多,所以可读性很重要。

风格的舍断离:【但其实针对相同的情况,每个人有每个人的标准。】

  • 所以为了可读性应忽略某些风格。
  • 和已经存在的代码保持一致。
  • 没有理由修改时。
  • 旧版本python等兼容性考虑。

test

代码布局

缩进

每个缩进级别使用 4 个空格。制表符应仅用于与已经使用制表符缩进的代码保持一致。

Python 3 不允许混合使用制表符和空格进行缩进。 混合使用制表符和空格缩进的 Python 2 代码应转换为仅使用空格。

续行应使用括号()、[]、{}内的 Python 隐式行连接(垂直对齐包裹的元素),或使用悬挂缩进(建议为4空格)。

Python 标准库是保守的,要求将行限制为 79 个字符(文档字符串/注释限制为 72 个字符)。如果团队有需要且达成统一意见,可以自定义行长度。

# 与开始定界符对齐。
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)


# ps: 目前浏览器中使用快捷键缩进样例 Ctrl + Alt + L/Command + Option + L
# 在条件续行上添加一些额外缩进。
if (this_is_one_thing
and that_is_another_thing):
do_something()

# hang closing brackets:

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,
]


# 应优先使用上述方法,而不是使用反斜杠进行行连接。
# 有时反斜杠可能仍然合适。例如,长的多个 with 语句不能使用隐式续行

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())


# 运算符和条件判断类似
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)

空行

  • 顶层函数和类定义之间用两个空行隔开。
  • 类中的方法定义之间用一个空行隔开。
  • 可以使用额外的空行(少量)来分隔相关函数组。
  • 在函数中谨慎使用空行来指示逻辑部分。

文件编码和shebang

使用 ASCII(Python 2)或 UTF-8(Python 3)的文件不应有编码声明。

但实际使用时有时需要配置。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import

导入应按以下顺序分组,每组导入之间放一个空行:

  • 标准库导入
  • 相关的第三方导入
  • 特定的本地应用程序/库导入

避免使用通配符和隐式导入

字符串

  • 单引号字符串和双引号字符串是相同的。
  • 选择一个,但当字符串包含单引号或双引号字符时,请使用另一种以避免字符串中的反斜杠。这提高了可读性。
  • 对于三引号字符串,始终使用双引号字符。

L[-2::-2]
L[-2:2:-2]
L[2:2:-2]