遵循PEP8风格
在编写python代码的时候我们应该采用统一的风格来编写代码,可以使代码更加容易读懂。采用和其他程序员统一的编码风格来写代码,也可以使项目更利于多人协作开发。即便代码只有你自己能看懂,也得遵循这套风格,可以令自己后续继续二次开发的时候更容易看懂自己的代码。
一 空白与缩进
在Python中,空白会影响代码的含义。Python程序员使用空白的时候会影响代码的清晰程度。
1.使用4个空格来表示缩进
if 'tank' == "handsome": # 这里是4个空格缩进 print('是真的!')
在圆括号、方括号和花括号内,若想写多行参数。应该垂直对齐,要么使用挂行缩进对齐。当使用挂行缩进时,应该考虑到第一行是否应该有参数,以及使用缩进以区分自己多行参数。
- 推荐使用:
与左括号对齐
def login(username, password, root): pass # 与左括号对齐 func = login(username='tank', password="123", root='super')
用更多缩进来与其他行区分
# 用更多的缩进来与其他行区分 def register( username, password, root): print(username, password, root)
挂行缩进应该再换一行
func = register( username='tank', password='123', root='supder')
- 不推荐
# 当缩进没有与其他行区分时,要增加缩进 def register( username, password, root): print(username, password, root) # 没有使用垂直对齐时,禁止把参数放在第一行 func = register(username='广东仔', password='123', root='super')
2.每一行的字符数不应该超过79
# 一行代码的字数不能超过79 def abcdefg.....79
3.对于占据多行的长表达式来说,除了首行之外的其余每一行都应该换行开头增加4个空格。
# 推荐 num1 = 1 num2 = 2 num3 = 3 num4 = 4 num5 = 5 num6 = 6 print( num1 + num2 + num3 + num4 + num5 + num6 ) # 不推荐 print(num1 + num2 + num3 + num4)
4.Python文件中的函数与类之间应该用两个空行隔开。
# 类 class Foo: pass # 函数 def foo(): pass
5.在同一个类中,各方法之间应该用一个空行隔开。
class DSB: def s1(self): pass def s2(self): pass
6.在使用下标来获取列表元素、调用函数或给关键字参数赋值的时候,不要在两旁添加空格。
# 列表元素 list1 = [1, 2, 3] # 推荐 print(list1[0]) # 不推荐 print(list1[ 0 ]) # 调用函数 def foo(x, y): pass # 推荐 foo(x=10, y=20) # 不推荐 foo(x = 10, y = 20)
7.为变量赋值的时候,赋值符号在左右侧应该各自写一个空格
name = 'tank'
二 命名
在python中提倡采用不同风格来定义python中名称,例如变量名、函数名、类名等...
1.函数、变量及属性应该用小写字母来拼写,各单词之间以下划线相连
name_of_tank = 'tank'
2.受保护的实例属性,应该以单个下划线开头
_private_pwd = '123'
3.私有的实例属性,应该以两个下划线开头
__private_field = '123'
4.类名,应该以单个单词首字母均大写的形式来命名,各单词之间以下划线相连。
class StudentOfSomebody
5.常量,应该全部采用大写字母来拼写,各单词之间以下划线相连
SCHOOL_OF_CITY = "shanghai"
6.类中的实例方法,把首个参数命名为self,以表示该对象本身。
# 正确 class Student: def running(self, name): print(f"{name} is running") stu1 = Student() stu1.running("张全蛋") # 错误 ''' class Student: def running(xxx, name): print(f"{name} is running") '''
7.类方法的首个参数,应该命名为cls,以表示该类本身。
class Teacher: @classmethod def piao(cls, name): print(cls) # <class Teacher> Teacher.piao('jack') >>> jason is piao ing...
三 表达式和语句
1.采用内联形式的否定词,而不要把否定词放在整个表达式前。
name1 = 'tank' name2 = 'superman' # 推荐 if name1 is not name2: pass # 反对 if not name1 is name2: pass
2.不要通过检测长度的方法来判断list是否为空,而应该采用if not list 这种写法来判断,若为空值将自动设置为False
list1 = [1, 2, 3] # 不推荐 if len(list1) == 0: pass # 推荐 if not list1: pass
3.检测list是否为[1]或者'li'等非空值时,if list会把非空的值判断为True。
list1 = ['jason', 'is', 'sb'] # 推荐 if list1: pass
4.不要编写单行的if语句、for、while循环以及except复合语句,而是应该把这些语句分成多行来书写,以示清晰。
# 推荐 if True: print('tank 喜欢吃生蚝,男人的加油站,女人的美容院') while True: print('tank 喜欢吃生蚝,男人的加油站,女人的美容院') for line in range(10): print('tank 喜欢吃生蚝,男人的加油站,女人的美容院') # 不推荐 ''' if True: print('tank 很帅') while True: print('tank 很帅') for line in range(10): print('tank 很帅') '''
5.import 应该放在文件开头
# 推荐 import json content = 'jason 喜欢大宝剑' # 不推荐 content = 'jsaon 喜欢大宝剑' import json
6.引入模块的时候,应该使用绝对名称,而不应该根据当前模块的路径来使用相对名称。
# 推荐 from foo import bar # 不推荐 # 在当前模块位置 import bar
7.如果一定要以相对名称来写import语句,那就采用明确的写法
from . import foo
8.文件中的import语句应该按照顺序划分为三个部分,分别表示标准库模块、第三方模块以及自定义模块。在每一部分中,各自的import语句应该按照模块的字母顺序来排序。
# python标准库 import abc, base64, copy, datetime, email, fcntl # 第三方模块 import bs4,fake_useragent # 自定义模块 import A, B, C, D
PEP8风格总结
''' 1.当编写python代码时,应该遵循PEP8编码风格。 2.与广大python开发者采用同一套代码风格,可以使项目更利于多人协同开发。 3.采用一致的风格来编写代码,可以让自己负责项目的二次开发工作更为容易。 '''