【发布时间】:2018-07-11 19:13:32
【问题描述】:
我正在尝试理解 Python 中的命名空间。
我尝试了 Python 文档中给出的这种场景。
def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"
def do_global():
global spam
spam = "global spam"
do_local()
print("before local assignment:", spam)
do_nonlocal()
print("before nonlocal assignment:", spam)
do_global()
print("before global assignment:", spam)
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
这失败了:
变量 spam 在声明之前被引用。
我已经在do_local()中明确定义了变量。
【问题讨论】:
-
do_local定义了一个局部变量。它不存在于do_local的范围之外。 -
是的,你定义了它,它说是本地的,所以这个变量只在
do_local()的范围内可见
标签: python class object namespaces