脚本之间的全局变量

时间:2013-09-30 20:27:28

标签: python scripting namespaces global-variables scope

我有一个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和global keyword.fun()使用并更新了name_dict,最后我在开头打印了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中它始终为零。我的猜测是它被视为局部变量。我该如何解决 ?

1 个答案:

答案 0 :(得分:2)

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

要修改模块变量,必须将其分配给模块:

#file1.py
import config

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

这样做的:

from config import *

name_dict = json.load(...)

simple创建一个 new name_dict,模块级变量并为其分配一个新对象,它更改{{1}中的任何内容}模块。

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

global

意味着您可以从其他模块访问>>> 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。您不能做的是执行global并更改模块级变量值。