1 代码编码格式
一般来说,声明编码格式在脚本中是必需的。按照国际惯例,文件编码和 Python 编码格式全部为 utf-8 。例如:在 Python 代码的开头,要统⼀加上如下代码:
# -- coding: utf-8 --
若出现 Python编码问题,可按照以下操作尝试解决:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
2 分号
不要在行尾加分号,也不要用分号将两条命令放在同一行。
3 行的最大长度
每行不超过80个字符
以下情况除外:长的导入模块语句;注释里的URL
圆括号、方括号或花括号以内的表达式允许分成多个物理行,无需使用反斜杠。
eg:
month_names = ['Januari', 'Februari', 'Maart', # These are the
'April', 'Mei', 'Juni', # Dutch names
'Juli', 'Augustus', 'September', # for the months
'Oktober', 'November', 'December'] # of the year
如果一个文本字符串在一行放不下, 可以使用圆括号来实现隐式行连接:
eg:
x = ('这是一个非常长非常长非常长非常长 '
'非常长非常长非常长非常长非常长非常长的字符串')
4 缩进规则
Python 采用代码缩进和冒号( : )来区分代码块之间的层次。
在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
Python 中实现对代码的缩进,可以使用空格或者 Tab 键实现。但无论是手动敲空格,还是使用 Tab 键,通常情况下都是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。
对于 Python 缩进规则,初学者可以这样理解,Python 要求属于同一作用域中的各行代码,它们的缩进量必须一致,但具体缩进量为多少,并不做硬性规定。
eg:
if a==0:
print("正确") # 缩进4个空白占位
else: # 与if对齐
print("错误") # 缩进4个空白占位
或者
# 4 个空格缩进,第一行不需要
foo = long_function_name(
var_one, var_two, var_three,
var_four)
5 注释
行注释、块注释、文档注释
行注释:注释应解释自己做了什么,而不是对代码本身的解释
Python中单行注释以 # 开头,例如:
# 这是一个注释
print("Hello, World!")
块注释
多行注释用三个单引号 ‘’’ 或者三个双引号 “”" 将注释括起来,例如:
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello, World!")
"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello, World!")
文档注释:
要为所有的公共模块,函数,类和方法编写文档说明
非公共的方法没有必要,但是应该有一个描述方法具体作用的注释。这个注释应该在def那一行之后
多行文档注释使用的结尾三引号应该是自成一行
def a():
'''这是文档字符串'''
a = 1
pass
print(a.__doc__)
6 空行
顶层函数和类定义,前后用两个空行隔开
编码格式声明、模块导入、常量和全局变量声明、顶级定义和执行代码之间空两行
类里面方法定义用一个空行隔开
在函数或方法内部,可以在必要的地方空一行以增强节奏感,但应避免连续空行
class Class01:
pass
class Class02:
def function_01(self):
pass
def function_02(self):
pass
7 制表符还是空格不要混用制表符和空格,因为如果混用了,虽然在编辑环境中显示两条语句为同一缩进层次,但因为制表符和空格的不同会导致 Python 解释为两个不同的层次。
在调用 Python 命令行解释器时使用 -t 选项,可对代码中不合法的混合制表符和空格发出警告,使用 -tt 时警告将变成错误,这些选项是被高度推荐的。但是强烈推荐仅使用空格而不是制表符。
空格使用规则:
在二元运算符两边各空一格,比如赋值(=)、比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not), 布尔(and, or, not),算术操作符两边的空格可灵活使用,但两侧务必要保持一致
不要在逗号、分号、冒号前面加空格,但应该在它们后面加(除非在行尾)
函数的参数列表中,逗号之后要有空格
函数的参数列表中,默认值等号两边不要添加空格
左括号之后,右括号之前不要加添加空格
参数列表, 索引或切片的左括号前不应加空格
当’='用于指示关键字参数或默认参数值时,不要在其两侧使用空格
8 命名规范
模块名命名:模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)
# 正确
import decoder
import html_parser
# 不推荐
import Decoder
变量命名:不要使用字母I (小写的L), O (大写的O), I (大写的I)作为单字符的变量名。在有些字体里面,这些字符无法与数字0和1区分。如果想用I, 可使用L代替。变量名尽量小写, 如有多个单词,用下划线隔开。
常量或者全局变量命名:全部大写,如有多个单词,用下划线隔开
全⼤写+下划线式驼峰
count = 0
this_is_var = 0
函数命名:函数名应该小写,如有多个单词,用下划线隔开。
大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用,保持向后兼容。私有函数在函数前加一个下划线_。
def run():
pass
def run_with_env():
pass
class Person():
def _private_func():
pass
类命名
类名使用驼峰(CamelCase)命名风格,首字母大写,私有类可用一个下划线开头。
在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。
对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。
class Farm():
pass
class AnimalFarm(Farm):
pass
class _PrivateFarm(Farm):
pass
类里面函数和方法参数
始终要将self作为实例方法的第一个参数。
始终要将cls作为类方法的第一个参数。
如果函数的参数名和已有关键字冲突,在最后加大意下划线比缩写或者随意拼写更好。因此class_比clss更好。