您好,匿名用户
随意问技术百科期待您的加入

python2.7 在函数中删除一个全局变量不报SyntaxError?

0 投票
a = 3

def x():
  global a
  del(a)

print(a)
x()

在python2.7中执行上面这段代码并没有问题!但是在python2.7的文档中(没有锚记,大概在第10段)
有这样一句话:
It is illegal to unbind a name referenced by an enclosing scope; the compiler will report a SyntaxError.
我在SO上也看到了同样的一个提问,但是它答案给出的测试代码是这样的:

>>> def outer():
...     a=5
...     def inner():
...         nonlocal a
...         print(a)
...         del a
SyntaxError: can not delete variable 'a' referenced in nested scope

但是在python2.7中,并没有nonlocal这个关键字(事实上,我在3.2上测试上面这段代码也是没有问题的)。我想知道,如果这文档(2.7)上这句话是正确的,那么测试代码(2.7)是怎样的?

用户头像 提问 2013年 9月18日 @ Miss Fortune 上等兵 (418 威望)
分享到:

1个回答

+1 投票
 
最佳答案

是正确的。“an enclosing scope”指的是“闭包内”,不是“函数内”。对于一个闭包内的函数而言,upvalue(上一层的变量)的引用是不可变的。

用户头像 回复 2013年 9月18日 @ Veigar 上等兵 (210 威望)
选中 2013年 9月7日 @Miss Fortune
提一个问题:

相关问题

0 投票
1 回复 40 阅读
0 投票
1 回复 27 阅读
用户头像 提问 2012年 12月1日 @ Renekton 上等兵 (260 威望)
0 投票
1 回复 10 阅读
0 投票
1 回复 23 阅读
0 投票
1 回复 38 阅读
用户头像 提问 2013年 12月28日 @ 正能量 上等兵 (297 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...