我曾试图在这里问过一次问题,但没有人理解我想问的问题.所以我在PHP中找到了一些例子.
// $_POST = array('address' => '123', 'name' => 'John Doe');
extract($_POST);
echo $address;
echo $name
Run Code Online (Sandbox Code Playgroud)
在PYTHON中是否有类似extract()的函数?????
字典也一样:
mydict = {'raw':'data', 'code': 500}
// some magic to extract raw and code as vars
print raw
Run Code Online (Sandbox Code Playgroud)
ps为什么我要这样做:当你在类方法时,当string是self.data ['raw'] ['code']时,很难在join()和format()中使用字符串进行6次操作.假设它在这里的字典中是dict)
locals是一个内置函数,返回本地值的字典.文件说:
警告
不应修改此词典的内容; 更改可能不会影响解释器使用的局部变量的值.
不幸的是,exec在Python 3.0中也有同样的问题.这有什么办法吗?
用例
考虑:
@depends("a", "b", "c", "d", "e", "f")
def test():
put_into_locals(test.dependencies)
Run Code Online (Sandbox Code Playgroud)
depends将其参数中提供的字符串存储在列表中test.dependences.这些字符串是字典中的键d.我希望能够编写,put_into_locals以便我们可以将值拉出d并将它们放入本地.这可能吗?
The following code works in Python 2.7, to dynamically inject local variables into a function scope:
myvars = {"var": 123}
def func():
exec("")
locals().update(myvars)
print(var)
func()
# assert "var" not in globals()
Run Code Online (Sandbox Code Playgroud)
这有点微妙,但是exec语句的存在向编译器指示可以修改本地名称空间。在参考实现中,它将把名称“ locals”的查找从LOAD_GLOBAL op转换为LOAD_NAME op,从而允许添加到本地名称空间。
在Python 3中,它exec变成了函数而不是语句,并且该locals()调用返回了名称空间的副本,其中的修改无效。
您如何在Python 3中重新创建想法,以便在函数内部动态创建局部变量?还是仅在Python 2.x中才有“功能”?
注意:该代码不得在外部范围内绑定名称。