gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:27:29 25 4
gpt4 key购买 nike

给这本字典:

>>> 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 几周前,我整理了 extradict Python 包 - 它可以在 pypi now 上找到.它的特性之一是 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 - 如何将字典中的所有键作为局部变量加载,这是一种更好的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4650622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com