Python:在函数的本地命名空间中包含字典的条目

标签 python function dictionary namespaces local

以前可能有人问过这个问题,但快速搜索没有给我答案。

假设有一个包含所有变量的字典。如何将此字典传递到函数的本地命名空间?例如:

data = dict(a=1,b=2,c=3,d=4)
def f(data):
    return data['a'] + data['d']

需要在您想要访问的每个变量周围写入 data[' ']。如何将字典的所有条目添加到函数的本地命名空间中?对于可以使用的对象

self.__dict__.update(data)

是否有与函数等效的东西,以便您得到类似的东西:

data = dict(a=1,b=2,c=3,d=4)
def f(data):
    add_to_local_namespace(data)
    return a + d

最佳答案

在一般情况下这是不可能的,因为字典可以具有不是有效变量名称的键,例如 python keywords或非字符串。

如果你迫切需要这个,并且你可以保证字典键都是有效的变量名称,并且你不需要它在Python 3上工作,那么可以循环字典项并使用 exec 语句。这种方法会产生一些奇怪的范围后果,非常丑陋,应该强烈反对。

一个可接受的替代方案是创建一个虚拟对象并将它们设置为属性,例如:

>>> data = dict(a=1,b=2,c=3,d=4)
>>> from types import SimpleNamespace
>>> v = SimpleNamespace(**data)
>>> v.a
1
>>> v.d
4

但它只是真正像字典访问的语法糖。 阅读 Python #19 之禅。无论你从哪个角度来看,你都需要命名空间!

另一个想法:创建一个可调用类而不是函数(通过继承collections.Callable),并将字典解压到该类的属性中。那么至少你的变量将由类命名。

关于Python:在函数的本地命名空间中包含字典的条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21782132/

相关文章:

R编程: perform function with switch functionality for each row based on different columns

python - 字典条目被覆盖?

python - 如何对具有多个关键属性的字典列表进行排序 - python

python - 将 Python 类恢复到原始状态

javascript - 如何在 Python 中解码转义的 unicode javascript 代码?

c++ - 将 LONG 转换为函数指针?

typescript - TypeError: book.isEqual 不是一个函数

java - 从具有相似对象 ID 的两个列表中获取 map

python - 使用应用程序工厂模式将应用程序上下文传递给自定义转换器

python - 从非统一格式的字符串中提取多个数据字段