为什么更新全局变量在导入的函数中定义的函数中不起作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么更新全局变量在导入的函数中定义的函数中不起作用相关的知识,希望对你有一定的参考价值。
我试图理解以下原因为何不起作用。我有两个文件:app.py
和config.py
,我试图通过从config.py
调用app.py
中定义的函数来设置全局变量。那根本行不通。预期输出为Global 2。
主文件(app.py
):
from config import global_name, init_global
def main():
init_global("Global 2")
print(global_name)
main()
辅助文件(config.py
):
global_name: str = "Global 1"
def init_global(name: str):
global global_name
global_name = name
输出全局1。 global_name
值的更改在外部不可见。
更让我感到困惑的是,如果我将init_global()
移至app.py
,我会收到Global 2的预期输出。此版本pf app.py
正常工作:
from config import global_name
def init_global(name: str):
global global_name
global_name = name
def main():
init_global("Global 2")
print(global_name)
main()
答案
Python始终假定在函数中分配的任何变量都是该函数的局部变量。因此,当您将global_name
分配给Global 2
时,Python将创建一个覆盖全局变量的局部变量。由于Python的垃圾回收系统,此局部变量超出了范围,因此无法从app.py
访问。
以上是关于为什么更新全局变量在导入的函数中定义的函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章