gpt4 book ai didi

python - 脚本之间的全局变量

转载 作者:行者123 更新时间:2023-12-01 05:35:52 25 4
gpt4 key购买 nike

我有一个 python 项目,其中有几个由 .sh shell 文件运行的脚本。

我有一个配置文件,它定义了跨脚本使用的字典。

config.py

name_dict = dict()

file1.py

from config import *
..
..

## I have that reads tries to load the dump file that will contain the json values.

name_dict = json.load(open(dict_file))

##This file - file1.py calls another function fun() in file2.py, iteratively 3/4 times.
..
file2.fun(args)
print "Length of dict in file1.py : %d " %len(name_dict) // Always Zero ??? Considers name_dict as local variable.

在 file2 - file2.py 中,我使用全局关键字定义了 name_dict。fun() 使用并更新 name_dict,最后我在开头打印了字典的长度,我发现它已更新。

def fun(args)    
global name_dict
print "Length of dict file2.py(start): %d " %len(name_dict)
..
..
print "Length of dict file2.py(end): %d " %len(name_dict)

每次控件从 file2 返回后,在 file1.py 中我都会打印 name_dict 的值,它为零。但是,在下一次调用 fun() 时 -> print 语句仍然打印 name_dict() 的全局值(长度)

但在 file1.py 中它始终为零。我的猜测是它被视为局部变量。我该如何解决 ?

最佳答案

Python 没有有全局变量。这些变量都包含在模块中,因此您可以说您定义的是模块级变量。

为了修改模块变量,您必须将其分配给模块:

#file1.py
import config

config.name_dict = json.load(...)

正在做:

from config import *

name_dict = json.load(...)

simple 创建一个new name_dict,模块级变量并为其分配一个新对象,它不会更改 配置模块。

另请注意,global 语句告诉 python 不应将给定名称视为局部变量。例如:

>>> x = 0
>>> def function():
... x = 1
...
>>> function()
>>> x
0
>>> def function():
... global x
... x = 1
...
>>> function()
>>> x
1

意味着您可以从其他模块访问x。而且它仅在分配给变量时才有用:

>>> x = 0
>>> def function():
... return x + 1
...
>>> function()
1
>>> def function():
... global x
... return x + 1
...
>>> function()
1

正如您所看到的,您可以引用模块级x,而不必说它是全局。您不能做的是执行 x = Something 并更改模块级变量值。

关于python - 脚本之间的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19103218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com