假设我有一个字符串x
,Python 解释器是否足够聪明,能够知道:string.replace(x, x)
应转换为NOP
?
我怎样才能找到这个?是否有任何参考资料显示解释器能够根据句法分析动态执行哪种类型的优化?
不,Python 不能对 NOP 做出假设;它无法在编译时知道对象的类型string
是,也不会在程序运行期间保持该类型。
There are在编译时应用了一些优化,主要是在窥视孔优化器 http://hg.python.org/cpython/file/98a2e215ff01/Python/peephole.c。这会执行以下操作:
-
Replace list
and set
具有不可变等价物的成员资格测试中使用的文字;仅当未分配文字对象且仅用于比较时,这才有效;例如。:
if foo in ['spam', 'ham', 'eggs']:
被替换为
if foo in ('spam', 'ham', 'eggs'):
-
用结果替换简单的计算:
one_week = 7 * 24 * 60 * 60
被替换为
one_week = 604800
序列也会发生这种情况;'neener' * 3
被替换为该乘法的结果,前提是所得序列保持在 21 个元素以下。
这些优化之所以可能,是因为它涉及不可变的文字值;完全由解释器控制的常量值,并且可以依靠它们在执行过程中不会切换类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)