Python代码放在函数中运行比放在全局中运行要快?
末日的春天
末日的春天 2017-03-01 09:32:35
0
2
1396

Python代码放在函数中运行比放在全局中运行要快?

末日的春天
末日的春天

全部回复 (2)
数据分析师

Python代码放在函数中运行比放在全局中运行要快?-PHP中文网问答-Python代码放在函数中运行比放在全局中运行要快?-PHP中文网问答

围观一下哦,学习一下。

    伊谢尔伦

    因为CPython的解释器实现细节。
    CPython的解释器,对局部变量是用数组存储,用下标来访问;而对全局变量是用dict来存储,用符号(symbol)来做hash访问。速度差距是杠杠的。
    这是因为一旦函数定义好之后,局部变量的个数就不能改了,所以可以用固定大小的容器存储;而全局名字是可以一边执行一边改变的,所以得用更动态的方式来存储。

    看CPython的字节码的 LOAD_FAST 与 LOAD_GLOBAL 就可以看出差异了

    这个用Python实现的解释器其中就有这里提到的读写局部变量用的 LOAD_FAST / STORE_FAST 指令的实现——但为了简单起见,它实现这两条字节码指令是用 dict 来存储数据的,而不是像真正的CPython那样用数组来存储。其实稍微改改这个Python代码就可以让它在这方面更接近CPython的样子了。

    正常Python里是改变不了实际局部变量的状态的

    >>> def foo(): ... a = 1 ... b = 2 ... locals()['a'] = 42 ... print(a, b) ... >>> foo() (1, 2) >>> import dis >>> dis.dis(foo) 2 0 LOAD_CONST 1 (1) 3 STORE_FAST 0 (a) 3 6 LOAD_CONST 2 (2) 9 STORE_FAST 1 (b) 4 12 LOAD_CONST 3 (42) 15 LOAD_GLOBAL 0 (locals) 18 CALL_FUNCTION 0 21 LOAD_CONST 4 ('a') 24 STORE_SUBSCR


      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!