1:PEP8风格指南
1:用空格表示缩进
2:受保护的实例属性,用一个下划线开头。_leading
3:私有的实例属性,用两个下划线开头。__double_leading
4:模块级别的常量 ALL_NUMBER
5:不要通过长度判断容器或序列是不是空。例如不用使用 if len(somelist) == 0 判断somelist是否为[] 或 ''等空值, 而应该采用 if not somelist 。Python会把空值自动评估为False。同理 if somelist
6:多行表达式,应该用括号括起来。而不用 \ 符号续行
2:bytes包含的是8位值组成的序列,str包含的是由Unicode码点做组成的序列
3:用插值 f-string取代C风格的字符串于str.format
4:不要重复自己写过的代码。Don not Repeat Yourself
5:把数据结构直接拆分到多个变量里,不要专门通过下标访问
6:尽量用enumerate取代range
7:zip函数可以同时遍历两个迭代器
8:赋值表达式减少重复代码 := 例如 if count := some_dict.get( 'hello', 0 ) : 这个特性需要python3.8
9:把切片放在赋值符号的左边可以将原来列表中这段范围内的元素用赋值符号右边的元素替换掉,但可能改变列表的长度
10:用sort方法的key参数来表示复杂的排序逻辑
#默认排序
places = ['home', 'work', 'New York', 'Paris']
places.sort()
print(places)
#['New York', 'Paris', 'home', 'work']
#lambda函数 排序
places.sort(key=lambda x: x.lower())
print(places)
#['home', 'New York', 'Paris', 'work']
class Tool:
def __init__(self, name, weigth):
self.name = name
self.weight = weigth
def __repr__(self):
return f'Tool({self.name}, {self.weight})'
power_tools = [
Tool('drill', 4),
Tool('circular saw', 5),
Tool('jackhammer', 40),
Tool('sander', 4),
]
#以weight为首要指标排序, 然后按name排序
#利用元组。如果两个元组首个元素相同,就比较第二个元素,如果仍然相同,就继续往下比较
power_tools.sort(key=lambda x: (x.weight, x.name))
print(power_tools)
#[Tool(drill, 4), Tool(sander, 4), Tool(circular saw, 5), Tool(jackhammer, 40)]
power_tools.sort(key=lambda x: (x.weight, x.name), reverse=True)
print(power_tools)
#[Tool(jackhammer, 40), Tool(circular saw, 5), Tool(sander, 4), Tool(drill, 4)]
power_tools.sort(key=lambda x: (-x.weight, x.name))
print(power_tools)
#str不支持 - 操作符号,通过多次sort方法,进行排序。这种方法可以应对所有情况的排序要求
power_tools.sort(key=lambda x: x.name, reverse=True) #第一次 次要指标name
print(power_tools)
#[Tool(circular saw, 5), Tool(drill, 4), Tool(jackhammer, 40), Tool(sander, 4)]
power_tools.sort(key=lambda x: x.weight) #第二次 次重要指标 weight
print(power_tools)
#[Tool(jackhammer, 40), Tool(circular saw, 5), Tool(drill, 4), Tool(sander, 4)]