1. 合并嵌套的 if 条件html
太多的嵌套会使代码难以理解,这在 Python 中尤其如此,由于 Python 没有括号来帮助区隔不一样的嵌套级别。python
阅读深度嵌套的代码容易让人烦躁,由于你必须理清哪些条件属于哪一级。所以,咱们应尽量减小嵌套,若是两个条件能够用 and 合在一块儿,会比嵌套更易读。数据库
合并以前:安全
if a:
网络
if b:
app
return c
函数
合并后:oop
if a and b:
性能
return c
学习
2. 将重复的代码移到条件语句以外
咱们应该始终寻找移除重复代码的方法。这是提高代码能力的好办法。
有时,在条件的两个分支上出现重复代码,这意味这段代码将始终执行。所以这段重复的代码能够从条件中移出,放在条件以外执行。
if sold > DISCOUNT_AMOUNT:
total = sold * DISCOUNT_PRICE
label = f'Total: {total}'
else:
total = sold * PRICE
label = f'Total: {total}'
经过将对label变量赋值移到到条件以外,咱们删除了重复的代码行,并明确了条件实际控制的内容,就是计算total。
if sold > DISCOUNT_AMOUNT:
total = sold * DISCOUNT_PRICE
else:
total = sold * PRICE
label = f'Total: {total}'
3. 将内部循环中的yield替换为yield from
常常忽略的一个小窍门是 Python 的yield关键字有对应的为collections准备的yield from。所以无需使用 for 循环遍历集合。这使代码变短,并删除 for 中的额外变量。并且消除 for 循环后,yield from使程序运行效率提升约 15%。
重构前:
def get_content(entry):
for block in entry.get_blocks():
yield block
重构后:
def get_content(entry):
yield from entry.get_blocks()
4. 使用 any() 而不是用于循环
常见的模式是,咱们须要查找是否集合中的一个或多个项符合某些条件。这能够经过 for 循环完成,例如:
found = False
for thing in things:
if thing == other_thing:
found = True
break
更简洁的方法,是使用 Python 的 any() 和 all()内置函数,来清楚地显示代码的意图。
当至少有一个元素计算为 True 时,all() 将返回 True,只有当全部元素都计算为 True 时,all() 将返回 True。
若是对 any() 的调用找到一个值值为 True 的元素,它能够当即返回。
5. 用[]替换list()
建立列表的最简洁和 Pythonic 的方法是使用 []。
x = []
x = ['first', 'second']
这样作有额外的优势:是一个很好的改进程序性能的方法。
如下是更改以前和以后的时间对比:
$ python3 -m timeit "x = list()"
5000000 loops, best of 5: 63.3 nsec per loop
$ python3 -m timeit "x = []"
20000000 loops, best of 5: 15.8 nsec per loop
一样的缘由和性能表现,使用{}替代dict()。
6. 将重复执行的语句移出for/while循环
将“不变的”语句从循环中移出。若是某条语句只是设置了一些变量供循环使用,则不须要在循环中。循环自己就是复杂的,所以在编写循环时,应牢记,使其更短、更容易理解。
在此示例中,city变量在循环中赋值,但它只读取且不更改。
for building in buildings:
city = 'London'
addresses.append(building.street_address, city)
所以,将其移出是安全的,这更清楚地说明,相同的city值将应用于每一个building变量。
city = 'London'
for building in buildings:
addresses.append(building.street_address, city)
这也是提升了程序性能 ,由于若是循环中的任何语句将在每次循环运行时执行。在这些屡次执行上花费的时间属于浪费,由于它只须要执行一次。若是语句涉及对数据库的调用或其余耗时的任务,则这种节省可能很是重要。
本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,若有问题请及时联系咱们以做处理想要获取更多Python学习资料能够加QQ:2955637827私聊或加Q群630390733你们一块儿来学习讨论吧!