参考:https://blog.csdn.net/ratsniper/article/details/78954852#function-and-method-arguments-函数和方法参数
不要为了遵守PEP约定而破坏兼容性!
几个很好的理由去忽略特定的规则:
- 当遵循这份指南之后代码的可读性变差,甚至是遵循PEP规范的人也觉得可读性差。
- 与周围的代码保持一致(也可能出于历史原因),尽管这也是清理他人混乱(真正的Xtreme Programming风格)的一个机会。
- 有问题的代码出现在发现编码规范之前,而且也没有充足的理由去修改他们。
- 当代码需要兼容不支持编码规范建议的老版本Python。
Indentation 缩进
每一级缩进使用4个空格
# 与左括号对齐
foo = long_function_name(var_one, var_two,
var_three, var_four)
在二元运算符之前换行
# 推荐:运算符和操作数很容易进行匹配
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)
Imports 导入
推荐: import os
import sys
不推荐: import sys, os
导入总是位于文件的顶部,在模块注释和文档字符串之后,在模块的全局变量与常量之前。
导入应该按照以下顺序分组:
- 标准库导入
- 相关第三方库导入
- 本地应用/库特定导入
你应该在每一组导入之间加入空行。
Comments 注释
如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。
Block Comments 块注释
块注释的每一行开头使用一个#和一个空格(除非块注释内部缩进文本)。
Inline Comments 行内注释
行内注释和代码至少要有两个空格分隔。注释由#和一个空格开始。
命名风格
以下是常见的命名方式:
- b(单个小写字母)
- B(单个大写字母)
- lowercase 小写字母
- lower_case_with_underscores 使用下划线分隔的小写字母
- UPPERCASE 大写字母
- UPPER_CASE_WITH_UNDERSCORES 使用下划线分隔的大写字母
- CapitalizedWords(或者叫 CapWords,或者叫CamelCase 驼峰命名法 —— 这么命名是因为字母看上去有起伏的外观5)。有时候也被称为StudlyCaps。
注意:当在首字母大写的风格中用到缩写时,所有缩写的字母用大写,因此,HTTPServerError 比 HttpServerError 好。 - mixedCase(不同于首字母大写,第一个单词的首字母小写)
- Capitalized_Words_With_Underscores(巨丑无比!)
Class Names 类名
类名一般使用首字母大写的约定。
Function Names 函数名
函数名应该小写,如果想提高可读性可以用下划线分隔。
大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用(比如 threading.py),保持向后兼容性。
异常
如果你想捕获所有指示程序出错的异常,使用 except Exception: (只有except:等价于 except BaseException:)。
以下两种情况不应该只使用‘excpet’块:
- 如果异常处理的代码会打印或者记录log;至少让用户知道发生了一个错误。
-
如果代码需要做清理工作,使用 raise..try…finally 能很好处理这种情况并且能让异常继续上浮。
Programming Recommendations 编程建议
返回的语句保持一致。函数中的返回语句都应该返回一个表达式,或者都不返回。如果一个返回语句需要返回一个表达式,那么在没有值可以返回的情况下,需要用 return None 显式指明,并且在函数的最后显式指定一条返回语句(如果能跑到那的话)。
推荐:
def foo(x):
if x >= 0:
return math.sqrt(x)
else:
return None
def bar(x):
if x < 0:
return None
return math.sqrt(x)
不推荐:
def foo(x):
if x >= 0:
return math.sqrt(x)
def bar(x):
if x < 0:
return
return math.sqrt(x)
不要用 == 去和True或者False比较:
正确: if greeting:
糟糕: if greeting == True:
更糟: if greeting is True: