文章目录
- PEP8
- 缩进
- 行长
- 空行
- 空格
- 换行规范
- list、dist、tuple 元素太多
- 函数参数太多
- 字符串太长
- 打印太长
- 命名
- import
- 文档字符串
- 注释
- python编辑器的设置
- 其它
🔗python全部编程规范的索引
🔗 python编程规范之PEP8
PEP8
让 Python 更易阅读,换句话,增强代码可读性。
pycharm 默认设置了 PEP8 检查。
缩进
python 的缩进:Tab、双空格、四空格、空格和 Tab 混合等。
PEP8:四空格的缩进
实际中,写代码缩进用制表符, 🔗设置1个制表符=4个空格
行长
PEP8:行最大长度为 79 个字符,包括注释
🔗设置行长标志(一条竖线)。
空行
PEP8:
- 全局的类和函数间:两个空行
- 类中的函数间:一个空行
- 函数内部:可以一个空行,区分不同的代码块
- 每个代码文件的最后一行为空行,并且只有这一个空行
空格
PEP8:
-
[1, 2, 3]
列表等的逗号后要有一个空格 -
{'a': 1, 'b':, 2}
字典的冒号后有一个空格 -
# 这是注释
#号后有一个空格 -
x = (1 + 2) * 3
操作符两边有空格,括号两边没有空格 -
fun(x=1, y=2)
函数参数中的等号两边不要有空格
换行规范
list、dist、tuple 元素太多
li = {
'name': 'Bob',
'age': 18, # 最后一个加 逗号
}
li = [
5,
15,
]
函数参数太多
def func(parameter_0, parameter_1, parameter_2,
parameter_3, parameter_4, parameter_5): # 区分pass,两个缩进,与第一行参数对齐
pass
func(1, 2, 3,
4, 5, 6) # 一个缩进
class Model(network.Network):
def fit(self,
x=None,
y=None,
batch_size=None,
epochs=1,
verbose=1,
callbacks=None,
validation_split=0.,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_freq=1,
max_queue_size=10,
workers=1,
use_multiprocessing=False,
**kwargs):
# Legacy support
if 'nb_epoch' in kwargs:
logging.warning(
'The `nb_epoch` argument in `fit` has been renamed `epochs`.')
epochs = kwargs.pop('nb_epoch')
if kwargs:
raise TypeError('Unrecognized keyword arguments: ' + str(kwargs))
self._assert_compile_was_called()
func = self._select_training_loop(x)
return func.fit(
self,
x=x,
y=y,
batch_size=batch_size,
epochs=epochs,
verbose=verbose,
callbacks=callbacks,
validation_split=validation_split,
validation_data=validation_data,
shuffle=shuffle,
class_weight=class_weight,
sample_weight=sample_weight,
initial_epoch=initial_epoch,
steps_per_epoch=steps_per_epoch,
validation_steps=validation_steps,
validation_freq=validation_freq,
max_queue_size=max_queue_size,
workers=workers,
use_multiprocessing=use_multiprocessing)
字符串太长
推荐用:+=
# += 拼接
s = 'Youth is not a time of life; it is a state of mind;'
s += ' it is not a matter of rosy cheeks, red lips and supple knees; '
s += 'it is a matter of the will, a quality of the imagination,'
s += ' a vigor of the emotions; it is the freshness of the deep springs of life.'
print(s)
# 加 \ 换行
s = 'Youth is not a time of life; it is a state of mind;' \
' it is not a matter of rosy cheeks, red lips and supple knees; ' \
'it is a matter of the will, a quality of the imagination,' \
' a vigor of the emotions; it is the freshness of the deep springs of life.'
print(s)
打印太长
推荐用:+
# + 拼接,要紧跟处理元素,不要放在行末
print(s + 'Youth is not a time of life; it is a state of mind;'
+ ' it is not a matter of rosy cheeks, red lips and supple knees; '
+ 'it is a matter of the will, a quality of the imagination,'
+ ' a vigor of the emotions; it is the freshness of the deep springs of '
+ 'life.')
# 直接换行
print(s +'Youth is not a time of life; it is a state of mind;'
' it is not a matter of rosy cheeks, red lips and supple knees; '
'it is a matter of the will, a quality of the imagination,'
' a vigor of the emotions; it is the freshness of the deep springs of '
'life.')
命名
规律 | 举例 | |
变量名、函数名、模块名(.py文件名) | 全小写、下划线 | a_student 、get_name() |
常量 | 全大写、下划线 | MAX_NUM |
类名 | 驼峰命名:首大写,每个单词都首大写 | MaleStudent |
import
EPE8:
- import 都放在文件头部
- 不要使用 import 一次导入多个模块,如
import time, os
不可 - import 只能导入包、模板,如不要
from numpy import array
,而是import numpy
,代码中用numpy.array()
比array()
好
文档字符串
函数、类、模块(.py文件)均要写文档字符串,进行说明
def func(x, y):
"""
参数:
x: 参数的意义、格式(数据类型)
y: 参数的意义、格式(数据类型)
输入:
举例
输出:
返回值和格式
"""
注释
- 文档字符串用 “”",其余注释用 #
- 对于代码的注释,写在代码前面(与代码相同缩进),不要写行注释
def fun():
x = 1
y = 2
# 这是注释
# 这是注释
# 这是注释
z = x + y # 注释不要写在这
python编辑器的设置
- 快捷键
选中代码块,缩进和取消(tab 和 shift+tab)
选中代码块,注释和取消( Ctrl+/ 和 Ctrl+/)
其它
读者体验 > 编程者体验 > 机器体验
linter 工具:Pylint,https://www.pylint.org/,检查代码风格/错误的小工具
要将自定义的的代码规范写进 pylint 中
- 当判断对象是否为 None 时,必须显示的写
is None
。除了 bool 类型,其它都要显示的判断,==[]、!=0
- 遍历dicr,
for k in d:
比for k in d.keys():
好,因为 d.keys() 要占用内存