Hyp*_*eus 5 python closures global-variables
在模块级别声明的函数永远不会有闭包并通过访问非局部变量LOAD_GLOBAL.
声明的函数不能在模块级可以通过具有封闭和访问非本地,变量LOAD_DEREF如果这些变量不是全局性的.
所以基本上我们有三种方式来存储和加载变量GLOBAL(全局),FAST(本地)和DEREF(非本地,封闭,覆盖).
为什么GLOBAL?会不会FAST和DEREF足够的,如果你让所有的功能都有其封闭?非局部变量和全局变量之间是否存在一些重要区别?这可能是由于性能问题,因为全局变量(如模块级别定义的所有函数和类(包括它们的方法)加上内置函数)通常比非局部变量更常见吗?
小智 5
编译期间枚举本地名称和封闭名称.在运行时,它们存储在C数组中并使用整数/索引进行访问.LOAD_FAST并LOAD_DEREF采用C整数并执行C数组查找.
全局名称不能在编译时枚举,它们可以在运行时由整个过程中的任何代码添加和删除.这类似于对象属性 - 因为全局变量本质上是模块对象的属性.因此,它们存储在字典中,并且实现访问它们与本地名称和封闭名称完全不同.LOAD_GLOBAL采用字符串(常量)并执行字典查找.