def outside(x=1):
def printHam():
x = x+1
print x
return printHam
myfunc = outside(7)
myfunc()
这不起作用给出错误在赋值错误python
之前引用的局部变量然而这是有效的
def outside(x=1):
def printHam():
print x + 1
return printHam
myfunc = outside(7)
myfunc()
答案 0 :(得分:1)
因为你在第一种情况下分配x,所以python会假设x是一个局部变量(这是默认值)。在第二种情况下,您没有分配它,因此它将检查全局范围。
如果你希望这个例子有效,你必须将外部x传递给内部函数,如下所示:
def outside(x=1):
def printHam(x=x):
x = x+1
print x
return printHam
话虽这么说,这似乎是一个可怕的用例,所以对你的实际用例来说可能是更好的解决方案。但如果不了解更多关于你正在做什么的事情,我无法告诉你它是什么。