在Python中从字典创建或分配变量

hol*_*lms 15 python variables extract

我曾试图在这里问过一次问题,但没有人理解我想问的问题.所以我在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)

Fré*_*idi 25

您可以使用locals()函数访问本地符号表并更新该表:

>>> mydict = {'raw': 'data', 'code': 500}
>>> locals().update(mydict)
>>> raw
'data'
>>> code
500
Run Code Online (Sandbox Code Playgroud)

但是,通过这种方式修改符号表是非常不寻常的,而且可能不是可行的方法.也许您需要更改设计,以便可以使用mydict字典而不是实际变量.

  • 还值得注意的是,这样做会使得在生成的代码对象上没有设置`CO_OPTIMIZED`标志(在'code.h'中读取它).这意味着编译器不会在代码中使用`*_FAST`指令,并且必须使用相应的`*_NAME`指令.因此代码也会运行得更慢. (5认同)
  • 使用`locals().update(mydict)`可以使它更短 (3认同)

cyb*_*ast 10

可怕的比赛迟到了,但我需要这个,我的解决方案是:

mydict = {'raw':'data', 'code': 500}
raw, code = [mydict.get(k) for k in ['raw','code']]
Run Code Online (Sandbox Code Playgroud)

这样它就是明确的阅读,并且没有潜在的本地化()(这是我宁愿避免的魔法).

  • 但这不是动态的,即变量的名称不能在运行时动态分配,或者它们的数量变化. (5认同)

hol*_*lms 5

好的,php 兄弟,这是一个坏消息,python 无法从空间之外创建变量...就像 php 可以: ${$var} 。使用 local() 是一个非常糟糕的主意,因为你会在调试时遇到很多问题,并且那里已经定义了一些本地变量..所以这真的很糟糕......

您不能像 php 那样以编程方式创建它。我认为这就是所谓的非显式性,这是 Python 的一个通用原则:你总是知道变量名。这种东西在某些情况下只是自杀,你需要手动编写大量的变量...主要是我因为 XML 解析之类的事情而感到不高兴,但似乎有一些方法如何将 python 字典转换为类,我昨天被告知这一点,但仍然没有检查它是如何工作的(类似这里