为了账号安全,请及时绑定邮箱和手机立即绑定

我想知道,如果这文档(2.7)上这句话是正确的,那么测试代码(2.7)是怎样的?

我想知道,如果这文档(2.7)上这句话是正确的,那么测试代码(2.7)是怎样的?

慕尼黑8549860 2023-04-16 21:17:42
a = 3def 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 aSyntaxError: can not delete variable 'a' referenced in nested scope但是在python2.7中,并没有nonlocal这个关键字(事实上,我在3.2上测试上面这段代码也是没有问题的)。
查看完整描述

2 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

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

查看完整回答
反对 回复 2023-04-20
?
RISEBY

TA贡献1856条经验 获得超5个赞

local并非enclosing scope

查看完整回答
反对 回复 2023-04-20
  • 2 回答
  • 0 关注
  • 65 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信