【发布时间】:2021-02-21 13:06:44
【问题描述】:
我目前正在开发一个简单的计算器程序,但在从嵌套函数中获取数据并将其用于另一个嵌套函数时遇到了问题。
这是我的代码中与此问题相关的部分:
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() 内定义,但我不能根据documentation 使用nonlocal 语句:
'在非本地语句中列出的名称......必须引用封闭范围内预先存在的绑定。'
并且func1() 不包含func2()。
更重要的是,我试图避免使用global 语句或在func() 中定义a 和b,因为在任何编程语言(reference) 中这似乎都是不好的做法,并且可能导致后来在我的程序开发中出现了意想不到的副作用。
有没有办法在func() 中的任何地方声明a 和b 可用和可修改,同时仍在func1 中定义它?
【问题讨论】:
-
您可以从 func1 返回 a 和 b 值并将它们作为参数传递给 func2
标签: python function scope encapsulation local-variables