ele*_*lar 2 python scope function python-3.x
我试图理解Python(3.x)中的变量范围,但下面是一个不起作用的代码示例,我不知道为什么.
def function_a(A):
function_b()
def function_b():
print(A)
function_a(1)
Run Code Online (Sandbox Code Playgroud)
结果如何 NameError: name 'A' is not defined
所以,我认为它的工作方式是,function_a()和function_b()被definid.然后我运行function_a()在哪里A被赋值为1.
所以在function_a()变量A = 1 的范围内存在.
然后function_b()被调用,意味着打印变量的值A.在function_b()的范围内不存在A. 因此,我希望它看起来更高,这将是function_a()因为function_b()在其中运行的范围function_a().
但显然,我错了.究竟发生了什么?
仅仅因为你在function_b里面打电话function_a并不意味着它会继承范围function_a和有充分理由.该函数从定义的位置获取范围,而不是从其调用的位置.
如果你想完成像closures你应该尝试定义function_b内部的东西function_a.
def function_a(A):
def function_b():
print(A)
Run Code Online (Sandbox Code Playgroud)
话虽如此,我在这里看不到封闭的用例.你最好把变量作为参数传递.这样,它将更具可重用性和可测试性.
def function_a(A):
function_b(A)
def function_b(A):
print(A)
Run Code Online (Sandbox Code Playgroud)