我是这个网站的新手,我可以在以下方面得到一些帮助吗?
我有一个包含字典
main.py
的loaddict
程序。
我在主程序之外有一个模块,其中包含多个函数,所有这些函数都需要主程序中的字典
loaddict
。
有没有办法从这个模块中的多个函数访问字典
loaddict
,而无需将loaddict
设置为所有函数的参数?
下面的代码不起作用,因为即使使用关键字
loaddict
,剩余的函数仍然无法从函数dgm
访问global
。
## main program (main.py)
## user inputs data into dictionary: loaddict = {some data}
import BeamDiagram.dgm(loaddict, other parameters)
## module (BeamDiagram.py)
def dgm(loaddict, other parameters):
global loaddict
## some calculations, this part is fine
def function1(some parameters):
## calculations that requires loaddict
def function2(some parameters):
## calculations that requires loaddict
def function3(some parameters):
## calculations that requires loaddict
BeamDiagram.py
在我看来你的错误只是
import
指令,所以在你的代码中只需要一个正确的import
如下:
from main import loaddict
下面我向您展示了我在系统中创建的 2 个文件(这两个文件都在同一个文件夹中
/home/frank/stackoverflow
)。
loaddict = {'key1': 'value1'}
''' The function print the value associates to 'key1' in the dictionary loaddict
'''
def print_dict():
print(loaddict['key1'])
在
main.py
中,我创建了函数print_dict()
,它由脚本BeamDiagram.py
导入,因为它是导入字典loaddict
(见下文BeamDiagram.py
的代码)
'''
Module BeamDiagram.py
'''
from main import loaddict, print_dict
''' In the function the parameter 'loaddict' has been removed...
'''
def dgm(other_parameters):
# no global keyword inside the function
print(loaddict['key1'])
''' function1 modify loaddict value and call a function from main.py
'''
def function1(some_parameters):
# the following instruction is able to modify the value of associated to 'key1'
loaddict['key1'] = 'value2'
print_dict() # print 'value2' on standard output
dgm('other_params')
function1('some_params')
脚本
BeamDiagram.py
调用函数dgm()
和function1()
这意味着:
loaddict
(dgm()
)loaddict
(function1()
)key1
值的修改在main.py
中可见,并且实际上函数print_dict1()
打印value2
这是key1
的值,之后function1()
已经对loaddict
进行了写访问有用的链接是:Python 模块变量.
关于模块变量的有用帖子是:How to create module-wide variables in Python?.