PHP有一个名为extract()的函数,它以关联数组作为参数,并将键的值分配给键的变量。在Python中是否有类似的功能呢?快速的谷歌搜索并没有立即向我展示如何实现这一点。我怀疑可以使用exec()函数来实现,但如果有一些函数可以帮助我做到这一点就太好了。
PHP有一个名为extract()的函数,它以关联数组作为参数,并将键的值分配给键的变量。在Python中是否有类似的功能呢?快速的谷歌搜索并没有立即向我展示如何实现这一点。我怀疑可以使用exec()函数来实现,但如果有一些函数可以帮助我做到这一点就太好了。
由于修改locals()返回的字典不安全,因此需要注意。
>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=%r"%i for i in d.items())
>>> a
6
>>> b
'hello'
>>> c
set([])
>>> d={'a':6, 'b':"hello", 'c':set()}
>>> exec '\n'.join("%s=d['%s']"%(k,k) for k in d)
>>> id(d['c'])
3079176684L
>>> id(c)
3079176684L
尝试:
locals().update(my_dict)
编辑:
gnibbler
提出了一个非常有价值的观点,即不应修改本地变量(参见:http://docs.python.org/library/functions.html#locals)。但是,Python文档并没有说这样做是不安全的,它只是说对本地变量的更改可能不会影响变量的值。在回答问题之前,我尝试了一下我的Python 2.6 IDLE,发现更新本地变量确实可以工作,在全局范围和函数内部都可以。这就是为什么我不删除我的答案,而是添加一个警告,即它可能在某些(平台特定?)情况下可以工作,但不能保证。
locals()
并不安全。请参考http://docs.python.org/library/functions.html#locals。 - John La Rooy修改locals()字典可能是一种解决方案,但文档说,http://docs.python.org/library/functions.html#
注意:不应修改此字典的内容;更改可能不会影响解释器使用的局部和自由变量的值。
所以问题是为什么你需要它?可能有更好的方法来实现你想要实现的目标。
另外,为什么不能直接访问字典或将它们分配给变量?
**kwargs
。 - Mike Graham