如何使内部函数看到封闭函数的变量?

时间:2011-12-20 15:35:07

标签: python

  

可能重复:
  Read/Write Python Closures

在以下函数中,内部函数不会修改参数,只是修改副本。

def func():
  i = 3
  def inc(i):
    i = i + 3
  print i
  inc(i)
  inc(i)
  print i

func()

是否可以避免重复代码并将其放在python中的函数内?我也尝试了以下操作,但它会抛出错误UnboundLocalError: local variable 'i' referenced before assignment

def func():
  i = 3
  def inc():
    i = i + 3
  print i
  inc()
  inc()
  print i

func()

3 个答案:

答案 0 :(得分:3)

在python 3中你会这样做:

def func():
  i = 3
  def inc():
    nonlocal i
    i = i+3
  print(i)
  inc()
  inc()
  print(i)

func()

在python 2.x中使用global不起作用,因为变量在外部范围内,但它不是全局的。因此,您需要将变量作为参数传递。

这是PEP 3104解决的问题。

答案 1 :(得分:2)

怎么样:

def func():
    i = 3
    def inc(i):
        return i + 3
    print i
    i = inc(i)
    i = inc(i)
    print i

func()

答案 2 :(得分:0)

在Python 3中,您可以使用nonlocal

>>> def func():
    i = 3
    def inc():
        nonlocal i
        i += 3
    print(i)
    inc()
    inc()
    print(i)

>>> func()
3
9
>>>