【发布时间】:2013-05-03 16:15:56
【问题描述】:
我说的是一般情况。这是一个例子:
c = 1
def a():
def b():
print(c)
b()
c = 2
a()
此代码将返回以下错误:
NameError: free variable 'c' referenced before assignment in enclosing scope。虽然逻辑假设是输出应该是1。这个问题的 Pythonic 解决方案是什么?使用global 或nonlocal 语句(我不喜欢)?也许只是避免这种情况,即多个作用域共享具有相同名称的变量?
【问题讨论】:
-
避免它,或者将它作为参数传递。
a(c)拨打a()时。要么使用全局,要么使用全局。 -
使用体面的变量名?避免使用全局变量?避免这么多嵌套?老实说,我自己从来没有遇到过这个问题,这应该不是是一个常见的问题。
标签: python python-3.x python-2.x