为什么更新全局变量在导入的函数中定义的函数中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么更新全局变量在导入的函数中定义的函数中不起作用相关的知识,希望对你有一定的参考价值。

我试图理解以下原因为何不起作用。我有两个文件:app.pyconfig.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

输出全局1global_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访问。

以上是关于为什么更新全局变量在导入的函数中定义的函数中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Python函数导入在Django中不起作用

c语言中不允许在函数外部给全局变量赋值

Array .push 在 Promise 函数中不起作用

thinkphp 中在哪自定义全局变量?

BASH:仅当函数通过管道传输时,全局变量在函数中不可更新(简单示例)

访问 PHP 函数中的全局变量