For*_*zaa 2 python dictionary namespaces function local
这可能是之前被问过的,但是快速搜索并没有给我答案.
假设有一个包含所有变量的字典.如何将此字典传递给函数的本地命名空间?例如:
data = dict(a=1,b=2,c=3,d=4)
def f(data):
return data['a'] + data['d']
Run Code Online (Sandbox Code Playgroud)
需要在您想要访问的每个变量周围写入数据[''].如何将字典的所有条目添加到函数的本地命名空间?对于您可以使用的对象
self.__dict__.update(data)
Run Code Online (Sandbox Code Playgroud)
是否存在与函数等效的东西,以便您获得以下内容:
data = dict(a=1,b=2,c=3,d=4)
def f(data):
add_to_local_namespace(data)
return a + d
Run Code Online (Sandbox Code Playgroud)
在一般情况下,这是不可能的,因为dict可以具有不是有效变量名的键,例如Python 关键字或非字符串.
如果您迫切需要这个,并且可以保证dict键都是有效的变量名,并且您不需要它在Python 3上工作,则可以循环遍历dict项并使用exec语句.这种方法有一些奇怪的范围后果,它非常难看,应该强烈劝阻.
可接受的替代方法是创建一个虚拟对象并将它们设置为属性,例如:
>>> data = dict(a=1,b=2,c=3,d=4)
>>> from types import SimpleNamespace
>>> v = SimpleNamespace(**data)
>>> v.a
1
>>> v.d
4
Run Code Online (Sandbox Code Playgroud)
但它只是dict访问的语法糖. 阅读Python#19的zen.无论你如何看待它,你都需要命名空间!
另一个想法:创建一个可调用的类而不是一个函数(通过继承collections.Callable),并将dict解压缩到类的属性中.那么至少你的变量将由类命名.
| 归档时间: |
|
| 查看次数: |
573 次 |
| 最近记录: |