【问题标题】:Get global variables from file as dict?从文件中获取全局变量作为字典?
【发布时间】:2023-03-31 18:39:01
【问题描述】:

我有一个文件constants.py,其中包含一堆全局常量。有没有一种方法可以将它们全部作为 dict 获取,仅用于这个文件?

【问题讨论】:

    标签: python import globals


    【解决方案1】:

    应该很简单:

    import constants
    print(constants.__dict__)
    

    【讨论】:

    • 哇,这比我的回答简单多了。
    【解决方案2】:
    import constants
    
    constants_dict = {}
    for constant in dir(constants):
        constants_dict[constant] = getattr(constants, constant)
    

    我不确定我是否明白这一点。写constants_dict['MY_CONSTANT']constants.MY_CONSTANT 更好/更容易/更易读?

    编辑:

    基于 cmets,我现在看到了一些潜在用途。

    这是上面的另一种写法,取决于你想要的紧凑程度。

    constants_dict = dict((c, getattr(constants, c)) for c in dir(constants))
    

    EDIT2:

    cji 赢了! constants.__dict__

    【讨论】:

    • 我能想到的一件事是使用计算值作为键 - 但是还有 getattrsetattr 函数。
    • 好吧,我可以为我当前的项目回答这个问题(尽管我的问题是函数,而不是变量):我们必须跨三个套接字连接(一个 USB 连接)引用变量(在我的情况下是函数) ,和一个无线电信号(这是从函数调用到函数执行的完整路径)。目的地需要一个字符串字典:函数配对来知道要调用什么函数,当只给定一个函数名和要使用的参数值时。更具体地说,我们将字符串:函数配对,然后配对字节:字符串,这让我们配对字节:函数(大大减少了数据包大小)。
    • 我正在将常量传递给我的模板...constants_dict 部分将消失,我可以直接使用我的常量。
    • @myself - 上面 cmets 中给出的基本原理让我重新思考这个问题,然后最简单的解决方案立即出现了 - 我多次使用 __dict__ 属性以避免写 object.something (而不仅仅是 @ 987654332@) 在 Django 模板中 - 它并不优雅,但它可以工作。在我的情况下,我用一些对象实例的__dict__ 更新了context - 但它也适用于模块。但是,如果您定义了 __slots__ 的类,并且可能在您尝试查询某个包时(__init__.py 没有 __all__),它将失败。
    猜你喜欢
    • 2014-01-10
    • 1970-01-01
    • 2020-10-02
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多