python中的真正全局变量

python中的真正全局变量,python,global-variables,simulation,Python,Global Variables,Simulation,好的,所以我正在进行的项目需要*使用一个真正的全局变量(或五个),这里的其他问题都与跨模块变量有关(稍后可能会有帮助,但还没有) 这是我的问题:我有一个程序将运行环境模拟,我需要设置一些全局变量,以便在一些函数中使用和修改。一个人怎么做呢 *当我说require时,我的意思是我还没有找到一种更有效的方法来实现这一点。是的,有一种方法可以在分布在多个模块中的函数中使用和修改全局变量。将变量放入模块并将该模块导入主程序: # globals.py klaatu = "Once in Persia r

好的,所以我正在进行的项目需要*使用一个真正的全局变量(或五个),这里的其他问题都与跨模块变量有关(稍后可能会有帮助,但还没有)

这是我的问题:我有一个程序将运行环境模拟,我需要设置一些全局变量,以便在一些函数中使用和修改。一个人怎么做呢


*当我说require时,我的意思是我还没有找到一种更有效的方法来实现这一点。

是的,有一种方法可以在分布在多个模块中的函数中使用和修改全局变量。将变量放入模块并将该模块导入主程序:

# globals.py
klaatu = "Once in Persia reigned a king ..."


@rob方法的一个有点狡猾但完全动态的变体:

import types
import sys

sys.modules['myglobals'] = types.ModuleType('myglobals')
sys.modules['myglobals'].__dict__.update({'first': 'thing', 'second': 'thing'})

import myglobals
print(myglobals.first) # prints 'thing'
import sys
sys.modules['myglobal'] = 'thing'

import myglobal
print(myglobal) # prints 'thing'
或者,如果你只有一个全局的,那么这种极其狡猾的方法如何:

import types
import sys

sys.modules['myglobals'] = types.ModuleType('myglobals')
sys.modules['myglobals'].__dict__.update({'first': 'thing', 'second': 'thing'})

import myglobals
print(myglobals.first) # prints 'thing'
import sys
sys.modules['myglobal'] = 'thing'

import myglobal
print(myglobal) # prints 'thing'

我可能会使用memcached或redis来实现类似的功能。如果不是“跨模块(如内置)全局”,那么“真正的全局”是什么意思?你是说在进程之间共享?在不同时间的不同运行之间共享?在世界上任何计算机上运行的程序的每个副本之间共享?球形的,有地图投影在上面吗?这取决于它是否始终存在,但在软件开发中,有三种情况下全局变量是正确的答案。到底是什么阻止了您将相关数据从一个函数传递到另一个函数?我想问的是,是否有一种方法可以让一个程序中的所有函数都可以访问变量。为什么您认为您的程序需要全局变量?当然,globals可能很方便,但它们会扰乱模块化设计(和测试)。您可能应该使用一个类来存储环境模拟的状态参数。您知道这在多线程处理时是否也起作用吗?