【问题标题】:Truly Global Variable in pythonpython中真正的全局变量
【发布时间】:2015-01-03 17:21:08
【问题描述】:

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

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

*当我说要求时,我的意思是我还没有找到更有效的方法来做到这一点。

【问题讨论】:

  • 我可能会使用 memcached 或 redis 来做类似的事情。
  • 如果不是“跨模块(如内置)全局”,“真正的全局”是什么意思?你的意思是在进程之间共享?在不同时间单独运行之间共享?在世界上任何计算机上运行的每个程序副本之间共享?球形,上面有地图?
  • 总是视情况而定,但在软件开发中确实存在 3 种情况,其中全局变量是正确的答案。究竟是什么阻止您将相关数据从一个函数传递到另一个函数?
  • 我要问的是,是否有办法让一个程序中的所有函数都可以访问变量。
  • 为什么你认为你的程序需要全局变量?当然,全局变量可能很方便,但它们会破坏模块化设计(和测试)。您可能应该使用一个类来存储环境模拟的状态参数。

标签: python global-variables simulation


【解决方案1】:

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

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

 

# main_program.py
import globals

def modify_klaatu():
    print globals.klaatu
    globals.klaatu = "It was the best of times, it was the worst of times."

【讨论】:

  • 你知道这在多线程时是否也有效吗?
【解决方案2】:

@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'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多