当前位置: 首页 > 面试题库 >

如何将字典中的所有键作为局部变量加载,这是一个更好的方法?

朱经武
2023-03-14
问题内容

给这个字典:

>>> options = {'DATABASES': {'default': {'ENGINE': 'django.db.backends.sqlite3'}}}

最好的方法是什么?

>>> foo(options)
>>> print DATABASES
{'default': {'ENGINE': 'django.db.backends.sqlite3'}}

我正在解决这是locals()。update(options),但我在想,是否有更好的解决方案。


问题答案:
import inspect

allowed_vars = set(["min_", "max_", "path", ...])
def update_globals(dic):
    caller_frame = inspect.currentframe(1)
    globals = caller_frame.f_globals
    # here, you _could_ simply do globals.update(dic) 
    # but it is  evil
    for key, value in dic.items():
        #here you should carefully verify each key, and value for not
        #not dangerous pairs, with stuff like:
        #if key not in allowed_vars:
        #    sys.stderr.write("Warning: invalid variable in configuration update\n")
        #     continue
        #if type(value) not in (string, int, float):
        #    #(issue error)
        #    continue
        globals[key] = value

例:

>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> update_globals({"a": 5})
>>> a
5

2016-06更新 几周前,我整理了extradictPython程序包-
现在可以在pypi上使用。它的功能之一是MapGetter上下文管理器,它可以通过执行以下操作来确切地要求:

from extradict import MapGetter

def myfunc():
    options = {'DATABASES': {'default': {'ENGINE': 'django.db.backends.sqlite3'}}}
    with MapGetter(options) as options:
         from options import DATABASES
 ...

和其他正常的“ from .... import ....”用法,但来自字典或映射对象(包括默认字典)。



 类似资料:
  • 问题内容: 我想创建一个python字典,将字典中缺少的键的键值返回给我。 用法示例: 问题答案: 对此有一个钩子:

  • 问题内容: 问题 我正在以以下方式创建一个空列表作为值的字典。 字典看起来像这样。 当我将一个值附加到一个列表时,此示例将值附加到所有列表。 问题 我的问题分为两部分。首先,为什么会这样?第二,我该怎么办?也就是说,如何将一个值仅附加到一个列表中? 我想象在创建字典时,我使所有列表都指向同一个对象。但是我不明白怎么回事,因为当我输入而不是在字典创建中,然后添加值而不是附加值时,这些值的行为会不同,

  • 问题内容: 好的,我知道标题不能完全解释这个问题。因此,我正在编写一个执行大量计算的程序,并尝试对其进行优化,以使其运行不会太慢。我有一个函数,该函数是一个类的成员,该函数被调用约500万次。这是功能: 我想知道在类中声明变量vpPointx和vpPointy是否比每次调用函数时声明它们更好/更快。这将是一个很好的优化还是效果不大? 通常,如果这里有任何可以优化的内容,请告诉我。 问题答案: 通过

  • 问题内容: 我想在函数外部使用一堆在函数中定义的局部变量。因此,我传递了返回值。 如何将该词典中定义的所有变量加载到函数外部的名称空间中,这样我可以简单地使用而不是使用来访问值。 问题答案: 考虑替代方案: 因此,如果您有一本字典,并且想要使用语法而不是clumsier来访问(读取)其值,请执行 这个作品内外的功能-它的 巨大 清洁,较安全的注射进!记住Python Zen中的最后一行…:

  • 问题内容: 这个问题已经在这里有了答案 : 如何在Python中将两个列表组合成字典?[重复] (6个答案) 5年前关闭。 Python中是否有将两个列表合并成字典的 内置 函数?喜欢: 哪里: 充当包含键的列表。 充当包含值的列表 有一个名为array_combine的函数可以实现此效果。 问题答案: 似乎这样应该可以,尽管我猜这不是 一个 单一的功能: 从这里开始:如何在Python中将两个列

  • 问题内容: 我需要一些帮助来理解为什么此代码无法按预期工作。 如果要更改词典的键但保留值,则可以使用: 我想修改所有键(并将值保留在适当的位置),但是下面的代码跳过了某些行-(“ col2”)保持不变。是因为字典是无序的,而且我不断更改其中的值吗? 在不创建新字典的情况下如何更改键并保留值? 问题答案: 更改要迭代的对象绝不是一个好主意。通常,尝试时甚至会引发异常: RuntimeError:词典