今天测试一些Python代码我尝试了以下代码:
(以下在 Python 3.2+ 上运行,尽管以前的版本会引发一个SyntaxError
whendel
被使用并且一个变量在封闭范围内被引用)
def x():
N = 200
def y():
print(N)
del N
y()
x()
NameError: free variable 'N' referenced before assignment in enclosing scope
如您所见,Python 不会 raises NameError: global name 'N' is not defined
,这让我想知道一件事:
当del
语句与函数的封闭范围一起使用来删除在嵌套函数中使用的自由变量y
时,如果我们的例子中的自由变量N
是通过del
封闭范围中的语句删除的,那么del
实际上是删除名称的( N
) 值并将其绑定到封闭范围?
A)这就是它提出的原因:
NameError: free variable 'N' referenced before assignment...
而不是NameError: global name 'N' is not defined
?B)如何
del
实际删除一个名字?它是否解除了它的价值并将其保持在一个范围内?
我在这里发现了一个类似的案例