我试图理解 Python (3.x) 中的变量范围,但下面是一个不起作用的代码示例,我不确定为什么。
def function_a(A):
function_b()
def function_b():
print(A)
function_a(1)
这导致 NameError: name 'A' is not defined
所以,我认为它的工作方式是 function_a()
和 function_b()
是确定的。之后,我运行 function_a()
,其中 A
被赋值为 1。
所以在 function_a()
的范围内,变量 A=1 存在。
然后调用 function_b()
并打印变量 A
的值。 A 不存在于 function_b() 的范围内。因此我希望它看起来更高一级,这将是 function_a()
的范围,因为 function_b()
在 function_a()
中运行>.
但显然,我弄错了。实际发生了什么?
最佳答案
仅仅因为您在 function_a
中调用了 function_b
并不意味着它会继承 function_a
的范围并且有充分的理由。该函数从定义它的地方而不是它被调用的地方获取范围。
如果您想完成类似闭包
的操作,您应该尝试在function_a
中定义function_b
。
def function_a(A):
def function_b():
print(A)
话虽如此,我在这里并没有真正看到闭包的用例。您最好将变量作为参数传递。这样它会更可重用和测试。
def function_a(A):
function_b(A)
def function_b(A):
print(A)
关于python - 无参数输入的函数可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46560140/