写在前面
本章的Python的编码规范和命名规则来自于:
命名规则 (Naming Conventions)
文件名、包名、模块名 - 全小写+下划线命名法
如:this_is_package
类 - 大驼峰法
如:ClassName()。
变量 - 全小写+下划线命名法
如:color = WHITE,this_is_a_variable = 1
注意:
1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
2.变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。因为python在解释的时候才确定类型。
常量 - 全大写+下划线命名法
如 : MAX_OVERFLOW,TOTAL。
缩写 - 不提倡
注意,缩写的情况有如下两种:
1.常用的缩写,如XML、ID等,在命名时也应只大写首字母,如XmlParser。
2.约定成俗的缩写方式,例如:
text 缩写为 txt
object 缩写为 obj
number 缩写为 num,等。
关于下划线
一个前导下划线:表示私有。
一个后缀下划线:避免关键字冲突。
以单下划线开头,是弱内部使用标识,from M import * 时,将不会导入该对象(python 一切皆对象)。
两个前导下划线:当命名一个类属性引起名称冲突时使用。
两个前导和后缀下划线:有特殊用途的对象或者属性。
以双下划线开头的变量名,主要用于类内部标识类私有,不能直接访问。
双下划线开头且双下划线截尾的命名方法尽量不要用,这是标识
排版 (Code Lay-out)
缩进
统一缩进,在PEP8标准里写明“推荐使用空格而不是Tab,且每个缩进单位为4个空格”
"Use 4 spaces per indentation level.
... ...
Spaces are the preferred indentation method."
但是在开发中敲4次space键不如敲一次Tab键效率来的高,因此我建议使用Tab作为一次缩进。
最大长度
每行最大长度为 79 个字符,如果一行字符数超过80,请换行。
PEP8推荐的较为优雅的断行方式有以下几种:
"The preferred way of wrapping long lines is by using Python's implied line continuation >inside parentheses, brackets and braces. Long lines can be broken over multiple lines by >wrapping expressions in parentheses. These should be used in preference to using a >backslash for line continuation."
1). \ (Backslashes)
如:
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())
2). 括号 (brackets)
如:
income = (gross_wages +
taxable_interest +
(dividends - qualified_dividends) -
ira_deduction -
student_loan_interest)
3). 中括号 (braces)
my_list = [
1, 2, 3,
4, 5, 6,
]
- 衍生问题: 应该在运算符之前换行还是之后换行?
income = (gross_wages +
taxable_interest +
(dividends - qualified_dividends) -
ira_deduction -
student_loan_interest)
还是
income = (gross_wages
+ taxable_interest
+ (dividends - qualified_dividends)
- ira_deduction
- student_loan_interest)
答案:倾向于后者 (后者风格也被称作Knuth's Style)
空行
类、外层函数之间应该保持2个空行;类内的函数、 变量和函数之间,保持1个空行
注释
- 尽量使用英文注释,如果使用中文注释的话,请在文件头部标明(比较好的习惯是,总是把这句话放在.py文件中,无论是否出现中文):
# -*- coding: utf-8 -*-
- 多行引用,请统一使用双引号
"""
... comments here ...
"""
- 每个类和函数,尽可能使用如下的注释方式,解释他的功能
class HTTPAdapter(BaseAdapter):
"""
The built-in HTTP Adapter for urllib3.
Provides a general-case interface for Requests sessions to contact HTTP and HTTPS urls by implementing the Transport Adapter interface.
This class will usually be created by ……
"""
def has_capacity(self):
"""Does the engine have capacity to handle more spiders"""
写在最后
- Tip
如果你使用pycharm开发,在格式规范上,这款IDE会给你很多修改建议,只要你多留心下波浪线。
网友评论