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()
中定义 a
和 b
因为这在任何编程中似乎都是不好的做法语言 (),并可能在我的程序开发后期导致意外的副作用。
有没有什么方法可以声明 a
和 b
在 func()
中的任何地方可用和可修改,同时仍然在 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 a
和 b
在 func1
中调用 func1
在 func2
:
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()
我目前正在开发一个简单的计算器程序,但我 运行 遇到了从嵌套函数中获取数据并将其用于另一个嵌套函数的问题。
这是我的代码中与此问题相关的部分:
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()
中定义 a
和 b
因为这在任何编程中似乎都是不好的做法语言 (
有没有什么方法可以声明 a
和 b
在 func()
中的任何地方可用和可修改,同时仍然在 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 a
和 b
在 func1
中调用 func1
在 func2
:
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()