Est-il plus rapide d'exécuter du code Python dans une fonction que globalement ? - Questions et réponses sur le site Web chinois PHP - Est-il plus rapide d'exécuter du code Python dans une fonction que dans un contexte global ? - Questions et réponses sur le site Web chinois PHP
Est-il plus rapide d'exécuter du code Python dans une fonction que globalement ? - Questions et réponses sur le site Web chinois PHP - Est-il plus rapide d'exécuter du code Python dans une fonction que dans un contexte global ? - Questions et réponses sur le site Web chinois PHP
Veuillez regarder et apprendre.
因为CPython的解释器实现细节。
CPython的解释器,对局部变量是用数组存储,用下标来访问;而对全局变量是用dict来存储,用符号(symbol)来做hash访问。速度差距是杠杠的。
这是因为一旦函数定义好之后,局部变量的个数就不能改了,所以可以用固定大小的容器存储;而全局名字是可以一边执行一边改变的,所以得用更动态的方式来存储。
看CPython的字节码的 LOAD_FAST 与 LOAD_GLOBAL 就可以看出差异了
这个用Python实现的解释器其中就有这里提到的读写局部变量用的 LOAD_FAST / STORE_FAST 指令的实现——但为了简单起见,它实现这两条字节码指令是用 dict 来存储数据的,而不是像真正的CPython那样用数组来存储。其实稍微改改这个Python代码就可以让它在这方面更接近CPython的样子了。
正常Python里是改变不了实际局部变量的状态的