【问题标题】:Python dictionary holding reference to a global variable保存对全局变量的引用的 Python 字典
【发布时间】:2025-12-30 01:15:16
【问题描述】:

我觉得我想用这个来对抗 Python 的禅宗,但我有这样的情况:

my_var = False
my_var_2 = True

my_dict = {
    '1': {'a': my_var, 'b': my_var_2}
     .
     .
    'n': {...}
}

现在,我想做的是让 my_dict['1'] 值保持与全局声明的 my_var 和 my_var_2 的链接,这样当我更新 my_dict['1'][ 'a'] 或 my_dict['1']['b'],my_var 和 my_var_2 也会更新。显然,当前代码不会发生这种情况,但我想知道是否有可能通过对语言的一些创造性使用来达到这种效果。

我为什么要这样做?我希望 my_dict 值成为 my_var 和 my_var_2 的句柄,用于在 my_dict 按键上工作的通用函数中,并更新在 dict 之外声明的这些变量(由于通用性级别,我不能按名称调用变量函数)。

有什么想法吗?

【问题讨论】:

    标签: python-3.x dictionary variables


    【解决方案1】:

    一种可能性是重载索引运算符。 对于上述用例,重载值设置器 __setitem__ 就足够了,但也许您还需要 __getitem__

    my_var_2 = True
    my_var = False
    
    class GlobalMap:
        def __setitem__(self, key, value):
            global my_var, my_var_2
            if key == "a":
                my_var = value
            elif key == "b":
                my_var_2 = value
            else:
                raise Exception('invalid global {}'.format(key))
    
    
    my_dict = {
        '1': GlobalMap(),
    }
    
    my_dict['1']['a'] = True
    

    【讨论】: