Python 嵌套函数变量可以在其他嵌套函数中使用吗?

Can a Python nested function variable be used in other nested functions?

我目前正在开发一个简单的计算器程序,但我 运行 遇到了从嵌套函数中获取数据并将其用于另一个嵌套函数的问题。

这是我的代码中与此问题相关的部分:

def func():
  
  def func1():
    a = float(input("Enter first number: "))
    b = float(input("Enter second number: "))
  
  def func2():
    print(f"{a}, {b}")

  func1()
  func2()

func()

如您所见,调用了 func(),调用了 func1()func2()。但是,运行此程序导致 NameError: name 'a' is not defined 有一条错误参考线指向 func2() 的正文。

我知道无法在 func2() 中访问 a, b,因为它们仅在 func1() 中定义,但我无法使用 nonlocal 语句documentation:

'names listed in a nonlocal statement ... must refer to pre-existing bindings in an enclosing scope.'

func1()不包含func2().

更重要的是,我试图避免使用 global 语句或在 func() 中定义 ab 因为这在任何编程中似乎都是不好的做法语言 (),并可能在我的程序开发后期导致意外的副作用。

有没有什么方法可以声明 abfunc() 中的任何地方可用和可修改,同时仍然在 func1 中定义它?

你只需要在 func1 中 return 它们并将结果传递给 func2

def func1():
    a = float(input("Enter first number: "))
    b = float(input("Enter second number: "))
    return a, b

然后,

def func2(a, b):
    print(f"{a}, {b}")

然后当您调用函数时,您将变量 a 和 b 分配给 func1 的结果并将它们作为参数传递给 func2,

a,b = func1()
func2(a, b)

您可以在 func 的范围内初始化变量,但最好将它们作为函数的 return 处理,这样更容易跟踪算法。

那是范围的问题。

您有 2 种可能性让它发挥作用:

1. Return abfunc1 中调用 func1func2:

def func():
  
    def func1():
      a = float(input("Enter first number: "))
      b = float(input("Enter second number: "))

      return (a,b)
  
    def func2():
      a,b = func1()
      print(f"{a}, {b}")

  
    func2()

func()

2。在func1中定义func2,声明后在func1中调用func2,声明后在func中调用func1

def func():
  
    def func1():
      a = float(input("Enter first number: "))
      b = float(input("Enter second number: "))


  
      def func2():
        print(f"{a}, {b}")

  
      func2()
    func1()

func()