python - 无参数输入的函数可变范围

标签 python python-3.x function scope

我试图理解 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/

相关文章:

python - NumPy 数组元素的自定义排列

python - 根据多个条件创建新的列和行

python - 让高优先级python线程进入临界区,而低优先级线程在临界区执行

regex - 如何将 perl 正则表达式替换编写为表达式中的函数?

c - 使用过程为变量赋值

Python如何做列表字典的字典的.values().values()

python - 在 Python 中读取文件不会读取第一行

python - 在 SCons 中创建混合(值集)CPPDEFINES

python - 子进程 stdin PIPE 在程序终止之前不会返回

c - 从不同地方调用相同功能时的行为不一致