嵌套函数和父变量?

时间:2017-10-09 02:39:08

标签: python

当我运行以下代码时:

def run():
  test = False
  def tester():
    if not test:
      print("test is false")
    else:
      print("test is true")
    test = not test
  tester()
run()

我收到错误:

  分配前引用的

局部变量'test'

我的印象是子函数可以访问父函数变量。在玩了这段代码后,我发现如果我删除了作业(test = not test),那么一切正常。

为什么在子函数中有一个赋值会破坏这段代码?如果我不应该在子函数中进行赋值,那么切换test标志的最佳方法是什么?我应该从子函数返回一个值并使用它来切换test吗?

1 个答案:

答案 0 :(得分:2)

Python 2不支持对嵌套函数关闭的变量进行赋值。通常的解决方法是将值放在可变容器中(例如,一个元素列表)。 Python 3为此提供了nonlocal关键字。