【问题标题】:Modify the function variables from inner function in python从python中的内部函数修改函数变量
【发布时间】:2012-12-21 06:58:56
【问题描述】:

获取并打印外层函数变量a就可以了

def outer():
    a = 1
    def inner():
        print a

获取外部函数数组a并追加一些东西也可以

def outer():
    a = []
    def inner():
        a.append(1)
        print a

但是,当我尝试增加整数时,它引起了一些麻烦:

def outer():
    a = 1
    def inner():
        a += 1 #or a = a + 1
        print a

>> UnboundLocalError: local variable 'a' referenced before assignment

为什么会发生这种情况,我该如何实现我的目标(增加整数)?

【问题讨论】:

  • 当然,你也可以将a从outer传递到inner。
  • @sberry:这不会允许他尝试做的事情,因为它会在inner 中创建一个新的局部变量,对其所做的更改不会反映在outer 中。
  • 对,除非它被返回,或者 OP 无论如何只能在内部使用 a

标签: python function variables scope


【解决方案1】:

在 Python 3 中,您可以使用 nonlocal 关键字来执行此操作。在inner 的开头做nonlocal aa 标记为非本地。

在 Python 2 中这是不可能的。

【讨论】:

    【解决方案2】:

    Python 2 的解决方法:

    def outer():
        a = [1]
        def inner():
            a[0] += 1
            print a[0]
    

    【讨论】:

      【解决方案3】:

      通常更简洁的方法是:

      def outer():
          a = 1
          def inner(b):
              b += 1
              return b
          a = inner(a)
      

      Python 允许很多,但非局部变量通常可以被认为是“脏”的(这里不再赘述)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-04
        • 2019-04-16
        • 1970-01-01
        • 2022-11-18
        • 2018-06-23
        • 1970-01-01
        • 2022-11-10
        • 2017-03-08
        相关资源
        最近更新 更多