Effective python-1

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)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值