以前可能有人问过这个问题,但快速搜索没有给我答案。
假设有一个包含所有变量的字典。如何将此字典传递到函数的本地命名空间?例如:
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/