如何对Python解释代码优化?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (61)

考虑以下代码片段:

dict [name] = 0
dict [name] += 1
dict [name] += 1

python解释器是否自动识别对字典值的重复引用,而使用缓存的本地引用?这与C/C++的混叠优化类似,类似于:

value = dict [name]
value = 0
value += 1
value += 1
提问于
用户回答回答于

这种类型的优化不可能仅仅通过检查代码来实现。代码中dict不能引用本地字典,而可以引用用户定义的对象来实现。在运行时,复杂的实现可以记录名称的实际值,并进行优化,但在运行时之前不能不中断一些Python语义。

用户回答回答于

您可以通过反汇编程序运行它来查找:

import dis

def test():
    name = 'test'
    tdict = {}
    tdict[name] = 0
    tdict[name] += 1
    tdict[name] += 1

dis.dis(test)

运行这个我们得到:

 13           0 LOAD_CONST               1 ('test')
              3 STORE_FAST               0 (name)

 14           6 BUILD_MAP                0
              9 STORE_FAST               1 (tdict)

 15          12 LOAD_CONST               2 (0)
             15 LOAD_FAST                1 (tdict)
             18 LOAD_FAST                0 (name)
             21 STORE_SUBSCR        

 16          22 LOAD_FAST                1 (tdict)
             25 LOAD_FAST                0 (name)
             28 DUP_TOPX                 2
             31 BINARY_SUBSCR       
             32 LOAD_CONST               3 (1)
             35 INPLACE_ADD         
             36 ROT_THREE           
             37 STORE_SUBSCR        

 17          38 LOAD_FAST                1 (tdict)
             41 LOAD_FAST                0 (name)
             44 DUP_TOPX                 2
             47 BINARY_SUBSCR       
             48 LOAD_CONST               3 (1)
             51 INPLACE_ADD         
             52 ROT_THREE           
             53 STORE_SUBSCR        
             54 LOAD_CONST               0 (None)
             57 RETURN_VALUE        

LOAD_FAST实现装载字典tdict的值

扫码关注云+社区

领取腾讯云代金券