前提:不要为了遵守PEP规范而破坏兼容性
PEP 规范:
1.主动换行
①在pycharm中的80个字符的分割线之前,主动换行
②不要设置自动换行,尽量自己主动换行
2.合理使用括号去实现隐式连接
if (name=="zhangsan", age==18, gender=="boy", hoppy=="reading"): pass
3.使用圆括号实现隐士连接 行
#3.使用圆括号实现隐士连接 行 foo = ('白日依山尽' '黄河入海流') foo1 = ('白日依山尽 ' '黄河入海流') print(foo) print(foo1) #output """ 白日依山尽黄河入海流 白日依山尽 黄河入海流 """
不建议使用 进行显示连接,如下:
foo2 = '欲穷千里目' '更上一层楼' print(foo2)
4.注释中,如果出现URL,一定要写在一行
url = 'https://ke.qq.com/user/index/index.html#/signup'
5.不要在返回值或着条件语句中使用括号,除非需要数学计算或者行连接
def fun(a,b): return a,b #使用这种返回方式 def fun2(c,d): return (c,d) #不要使用该方式 print(fun(1,2)) #output:(1,2) print(fun2(3,4)) #output:(3,4)
6.函数变量与起始变量对齐(便于对齐)
def test(var1,var2,var3,var4, var5,var6,var7): pass
7.四个空格缩进(相对于函数名)风格也可以
foo = test( var1=1, var2=2, var3=3 )
定义一个字典:
dic = { "name":"zhangsan", "age":18 }
8.顶级定义之间空2行,方法定义之间空1行
pycharm编辑器的格式化是遵循PEP8规范的
①顶级定义
先定义2个顶级定义的函数,中间不空行,再格式化看看结果:
def test1(): pass def test2(): pass
在pycharm中,选择工具栏的code--》reformat code 进行格式化,再看看空行效果:顶级定义之间会空2行(静态代码检查功能)
def test1(): pass def test2(): pass
②方法定义
class A: def test1(self): pass def test2(self): pass
进行格式化后:方法之间有空1行
class A: def test1(self): pass def test2(self): pass
9.括号里不要有空格
错的方式:
def test(name = None, age = None): pass
正确的方式:
def test(name=None, age=None): pass
10.逗号,冒号,分号后面加空格
错的方式:
def test(x,y): pass
正确的方式:逗号后加空格
def test(x, y): pass
11.不要用空格垂直对齐注释----有争议的
就是为了对齐而对齐
def test(x, y): S = 0 #初始值 c = x + y #求和 s = x * y #求积
12.文档字符串---docstring
双三引号中:
第一部分:该函数实现的功能
第二部分:函数中参数的介绍(param,args)
第三部分:返回值,返回值举例
第四部分:抛异常说明
但是这几个部分也不是绝对的。
类的注释
13.注意:一个函数或类,只能有一个文档字符串,不能在代码块中再次进行文档字符串的注释
如果非要子代码块中解释下面的代码,用#,多行表示
def test(): """ :return: """ #先进行循环 #再进行赋值到字典 。。。。。
14.如果一个类不继承其他类,就显式的从object继承,嵌套类也是一样。----显式的比隐式的好
例如:
15.
在循环中,使用 a += 1, 内存中会不同的生成a这个副本(临时变量),非常消耗内存。性能低
效率高的方式,用一个list(是可变的),用append,添加完之后,再将list拼接为字符串( " ".join(items)),性能就很高了。
16.为多行字符串使用三重双引号“”“,而非三重单引号。
当且仅当项目中使用单引号来引用字符串时,才可能会用三重单引号
17.关闭类文件的方法,对于不支持使用"with"语句的类似文件的对象,使用contextlib.closing()
扩展:同时含有'__enter__', '__exit__', 这2个属性的文件,才支持with。没有这2个属性,不支持with打开文件的,就要使用上面的方法。
18.# TODO,为临时代码使用
def fun(): #TODO 后期实现的功能 pass
19.每个导入独占一行
导入顺序:
标准库导入
第三方库导入
应用程序指定导入
20.在没有else的情况下,if语句可以单独在一行
def fun(x,y): if x > 0: y = x + y return y print(fun(4,3))
21.单下划线_ ,是受保护的 proected -----当前文件是可以用的,只是不能导出到别的文件用
int a 表示的公共的,public
_a = 10,是受保护的,其所在的模块.py被别的模块import时,_a不会被导入到别的模块去的。
22.双下划线_ _ 表示private,表示类里面的私有的实例方法 或 实例变量
只能在这个类内部使用,别的类用不了。
23.将相关类/顶级函数放在同一个.py中,不会限制一个文件一个类
24.main
即使是一个打算被用作脚本的文件,也应该是可导入的
比如:一个简单的实现功能,不定义任何函数,那至少放在main()中。
25.所有行限制最大的字符数是79
26.空序列的判断
27不要用==去和布尔值比较
二、工程结构化