我知道,如果可能的话,应该避免更新局部变量()或globals()。据我所知,在函数中更新局部变量()通常会在引用更新后的变量时生成NameError,如下所述:
How can I load all keys from a dict as local variables, a better aproach?
我的理解是,解释器为局部变量创建一个静态查找表,从而更改为局部变量(),并且在运行时不可见。
那么更新globals()如何?这似乎也不是一个非常好的主意。为什么以下代码失败:
def foo():
globals().update({'a': 1})
print a
if False: a = 0
>>> foo()
UnboundLocalError: local variable 'a' referenced before assignment当移除未执行的if False: a = 0分配时有效吗?
如果解释器出于性能原因创建了一个查找表,难道不应该考虑在运行时不会执行的语句吗?
发布于 2014-01-16 15:52:51
这与您对globals dict的更新没有任何关系。如果你这样做,你会得到完全相同的结果:
a = 1
def foo():
print a
if False: a = 0
foo()这是因为在作用域内没有显式标记为global的变量的任何赋值都会使变量在整个作用域中处于局部性。
https://stackoverflow.com/questions/21166454
复制相似问题