在赋值错误python之前引用的局部变量

时间:2015-09-22 21:28:38

标签: python

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()

1 个答案:

答案 0 :(得分:1)

因为你在第一种情况下分配x,所以python会假设x是一个局部变量(这是默认值)。在第二种情况下,您没有分配它,因此它将检查全局范围。

如果你希望这个例子有效,你必须将外部x传递给内部函数,如下所示:

def outside(x=1):
  def printHam(x=x):
    x = x+1
    print x
  return printHam

话虽这么说,这似乎是一个可怕的用例,所以对你的实际用例来说可能是更好的解决方案。但如果不了解更多关于你正在做什么的事情,我无法告诉你它是什么。