前提:不要为了遵守PEP规范而破坏兼容性

 

PEP 规范:

1.主动换行

 ①在pycharm中的80个字符的分割线之前,主动换行

 ②不要设置自动换行,尽量自己主动换行

2.合理使用括号去实现隐式连接

if (name=="zhangsan", age==18, gender=="boy",
            hoppy=="reading"):
    pass

 

3.使用圆括号实现隐士连接 行

#3.使用圆括号实现隐士连接 行
foo = ('白日依山尽'
       '黄河入海流')
foo1 = ('白日依山尽\n'
       '黄河入海流')
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)),性能就很高了。

print(''.join(['ab', 'pq', 'rs']))  # abpqrs

 

 

16.为多行字符串使用三重双引号“”“,而非三重单引号。

   当且仅当项目中使用单引号来引用字符串时,才可能会用三重单引号

 

17.关闭类文件的方法,对于不支持使用"with"语句的类似文件的对象,使用contextlib.closing()

 

扩展:同时含有'__enter__',  '__exit__', 这2个属性的文件,才支持with。没有这2个属性,不支持with打开文件的,就要使用上面的方法。

 

18.# TODO,为临时代码使用

def fun():
    
    #TODO 后期实现的功能
    pass

 

19.每个导入独占一行

导入顺序:

标准库导入

第三方库导入(不是python自带的,pip安装的)

应用程序指定导入

如果导入的库,在代码中并没有使用(显示灰色),是不允许的。----导入的库没有使用,请删除!!!!

 

 20.在没有else的情况下,if语句可以单独在一行

def fun(x,y):
    if x > 0: y = x + y
    return y

print(fun(4,3))

 

 21.单下划线_ ,是受保护的 protected -----当前文件是可以用的,只是不能导出到别的文件用

int a  表示的公共的,public

_a = 10,是受保护的,其所在的模块.py被别的模块import时,_a不会被导入到别的模块去的。

 

 22.双下划线_ _  表示private,表示类里面的私有的实例方法 或 实例变量

只能在这个类内部使用,别的类用不了。

 

 23.将相关类/顶级函数放在同一个.py中,不会限制一个文件一个类

 24.main

     即使是一个打算被用作脚本的文件,也应该是可导入的

比如:一个简单的实现功能,不定义任何函数,那至少放在main()中。

 

 

25.所有行限制最大的字符数是79

26.空序列的判断

 

 27不要用==去和布尔值比较

 二、工程结构化