时间:2021-05-23
对自己写的冗长代码,想重构但又无思路?小编整理了介绍python代码重构优化的一些方法,助你一臂之力。
编写干净的 Pythonic 代码就是尽可能使其易于理解,但又简洁。所以重构代码让代码简洁易理解是很有必要的。
本文重点是想跟大家探讨为什么这些重构是好想法,而不仅仅是如何做。
太多的嵌套会使代码难以理解,这在 Python 中尤为如此,因为 Python 没有括号来帮助区隔不同的嵌套级别。
阅读深度嵌套的代码容易让人烦躁,因为你必须理清哪些条件属于哪一级。因此,我们应尽可能减少嵌套,如果两个条件可以用 and 合在一起,会比嵌套更易读。
合并之前:
if a: if b: return c合并后:
if a and b: return c我们应该始终寻找移除重复代码的方法。这是提升代码能力的好办法。
有时,在条件的两个分支上出现重复代码,这意味这段代码将始终执行。因此这段重复的代码可以从条件中移出,放在条件之外执行。
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_PRICEelse: total = sold * PRICElabel = f'Total: {total}'经常忽略的一个小窍门是 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()常见的模式是,我们需要查找是否集合中的一个或多个项符合某些条件。这可以通过 for 循环完成,例如:
found = Falsefor thing in things: if thing == other_thing: found = True break更简洁的方法,是使用 Python 的 any() 和 all()内置函数,来清楚地显示代码的意图。
found = any(thing == other_thing for thing in things)当至少有一个元素计算为 True 时,all() 将返回 True,只有当所有元素都计算为 True 时,all() 将返回 True。
如果对 any() 的调用找到一个值值为 True 的元素,它可以立即返回。
创建列表的最简洁和 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()。
将“不变的”语句从循环中移出。如果某条语句只是设置了一些变量供循环使用,则不需要在循环中。循环本身就是复杂的,因此在编写循环时,应牢记,使其更短、更容易理解。
在此示例中,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)这也是提高了程序性能 ,因为如果循环中的任何语句将在每次循环运行时执行。在这些多次执行上花费的时间属于浪费,因为它只需要执行一次。如果语句涉及对数据库的调用或其他耗时的任务,则这种节省可能非常重要。
参考链接:
https://sourcery.ai/blog/explaining-refactorings-1/
到此这篇关于重构Python代码的文章就介绍到这了,更多相关重构Python代码内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例为大家分享了canvas绘制圆弧与圆形的具体代码,供大家参考,具体内容如下canvas绘制圆弧绘制圆弧使用context.arc()函数,包含六个参数。
网站SEO优化过程中包括六个环节,而且这些环节是不断循环的。做好了这六个环节才可以吸引搜索引擎到网站上抓取。下面我们就来说一下到底是哪六个环节。靠前、网站关键字
需求: 六个文件的入口,其他都重定向到index自己的思路: 正则找出不是六个文件的URL的模式,进行过滤。对比同事的结果,自己思路的问题:
新手店家想运营淘宝店铺,做好淘宝店招装修很重要。下面疯狂易购网小编就和新手店家聊聊做好淘宝店招装修的六个步骤,希望通过以下的六个步骤,能让新手店家们能更好的
摘要:本文具体为你介绍的网店的六个特点,为你网上开店提供帮助,指明方向。浅谈网店的六个特点。了解网店的特点,能让你更好的体会和把握网店,打造一个收入不错的网店。