Python中的内部方法 - 无法访问变量

时间:2013-05-06 09:24:43

标签: python python-2.7

我想知道,为什么我在以下代码中出现UnboundLocalError: local variable 'i' referenced before assignmentNameError: global name 'i' is not defined错误:

def method1():
  i = 0
  def _method1():
    # global i -- the same error
    i += 1
    print 'i=', i

  # i = 0 -- the same error
  _method1()

method1()

我如何摆脱它?在i

之外不应显示method1()

1 个答案:

答案 0 :(得分:2)

在py2x中执行此操作的一种方法是将变量本身传递给py3x中的内部方法 这已得到修复,您可以在那里使用nonlocal语句。

引发错误是因为函数也是对象,并且在定义期间进行评估,并且在定义期间,只要python看到i += 1(相当于i = i + 1),它就认为{{1} }是该函数内的局部变量。但是,当实际调用该函数时,它无法在本地找到i(在RHS上)的任何值,从而引发错误。

i

或使用函数属性:

def method1():
  i = 0
  def _method1(i):
    i += 1
    print 'i=', i
    return i     #return the updated value

  i=_method1(i)  #update i
  print i

method1()

对于py3x:

def method1():
  method1.i = 0       #create a function attribute
  def _method1():
    method1.i += 1
    print 'i=', method1.i

  _method1()

method1()