【问题标题】:Is there a way to use a variable in a function from an inner function有没有办法从内部函数中使用函数中的变量
【发布时间】:2020-08-13 15:47:40
【问题描述】:

我有这样一段代码:

def A():
  def B():
    c.append("hello")
    d = 8

  c = []
  d = 0

  B()

  print(c, d)

我得到这个输出:

["hello", 0]

我想让函数 B 从函数 A 到达 cd。它到达c,因为它是list,但我也想从B 到达d。有没有简单的方法可以做到这一点?

【问题讨论】:

  • 您可以从内部函数返回值,并在外部函数中使用它。您还可以查看变量范围。
  • 是的,但我想尽可能简单地做到这一点,这样非本地更容易
  • @Just_Me 只是不容易理解或维护。特别是当您的函数大于两行并且您使用多个变量执行此操作时。
  • 您也可以使用一个类并为该类设置cd 属性。然后任何方法都可以更新cd,而无需任何“魔术”。

标签: python list function


【解决方案1】:

d 声明为nonlocal。这将使单元格在内部函数中“可写”。

c 有效,因为您正在就地改变对象,但是 Python 的“隐式声明”(分配给变量)总是在本地范围内声明名称​​。因此,当您尝试更新非局部或全局变量时,会发生相同名称的变量被声明为本地函数。

globalnonlocal 语句覆盖了这个隐式声明,而是声明指定名称的变量分别是模块的全局变量或某些封闭函数范围而不是局部变量功能。然后赋值将“转移”到正确的范围,而不是隐式地导致局部变量的声明。

【讨论】:

    【解决方案2】:

    一种简单的Python3 方法是直接访问函数的局部变量,如下所示。

    def A():
        def B():
            c.append("hello")
            A.d = 8  # <<
    
        c = []
        d = 0
    
        B()
        print(c, A.d)  # <<
    A()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      相关资源
      最近更新 更多