Fowler的Extract Variable重构方法,以前是Introduce Explaining Variable,它说使用一个临时变量使代码更清晰。这样做的目的是通过引入一个不需要的局部变量来阐明复杂的代码,并为便于说明而命名该变量。它也提倡这样的解释而不是评论。。Other languages优化掉临时变量,这样就没有时间或空间资源的成本。为什么Python不这样做呢?在
In [3]: def multiple_of_six_fat(n): ...: multiple_of_two = n%2 == 0 ...: multiple_of_three = n%3 == 0 ...: return multiple_of_two and multiple_of_three ...: In [4]: def multiple_of_six_lean(n): ...: return n%2 == 0 and n%3 == 0 ...:^{pr2}$
因为Python是一种高度动态的语言,引用可以影响行为。在
例如,比较以下各项:
如果Python“优化”了
ob1
和ob2
变量,行为就会改变。在Python对象的生存期由引用计数控制。将weak references添加到mix plus线程中,您将看到优化掉变量(即使是局部变量)可能导致不希望的行为更改。在
此外,在Python中,从性能的角度来看,删除这些变量几乎不会改变任何东西。本地名称空间已经高度优化(值是通过数组中的索引查找的);如果您担心取消引用局部变量的速度,那么您对项目的时间关键部分使用了错误的编程语言。在
Issue 2181(在函数末尾优化局部变量)有一些有趣的地方:
inspect
或{更改对象的生存期。例如,下例中的
myfunc
在优化后可能会失败,因为此时Python保证在函数退出之前文件对象不会关闭。(风格不好,但还是)不能重写为:
^{2美元一位核心开发人员说:“在现实世界中,不太可能提高代码的速度,我不认为我们应该增加编译器的复杂性。”
相关问题 更多 >
编程相关推荐