在 python 中从主程序访问变量

问题描述 投票:0回答:1

我是这个网站的新手,我可以在以下方面得到一些帮助吗?

我有一个包含字典

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
python variables module
1个回答
2
投票

你的错误:脚本中的导入
BeamDiagram.py

在我看来你的错误只是

import
指令,所以在你的代码中只需要一个正确的
import
如下:

from main import loaddict

下面我向您展示了我在系统中创建的 2 个文件(这两个文件都在同一个文件夹中

/home/frank/stackoverflow
)。

main.py

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
的代码)

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进行了写访问
     

© www.soinside.com 2019 - 2024. All rights reserved.