单一作业的工作方式如下:(可能有更好的方法)
b='bb'
vars()[b] = 10
bb
>>>10
但如果我这样做:
c='cc'
vars() [b,c]= 10,11
它无法成功分配bb
和cc
。
我不明白为什么,也不知道如何最好地做到这一点。
由于
PS,有几个人非常合理地问我为什么要这样做。我发现我根据用户指定的选项设置了很多变量和对象。因此,如果用户指定选项2,3和7,我想创建a2,a3和7,加上b2,b3,b7等。这可能不是通常的做法,但使用vars和eval是一种非常简单和透明的方式这样做,需要简单的简洁代码:对于input_vector中的i:vars()['a'+ input_vector [i]] = create_a(input_vector [i])
对于input_vector中的i:vars()['b'+ input_vector [i]] = create_b(input_vector [i])
这适用于某些数据。麻烦的是当我使用另一个函数create_c_and_d时。这需要我将上面两行压缩成一个函数调用。如果可以使用词典轻松完成,我很乐意切换到该方法。我是python的新手,所以我不清楚它是否可以。
答案 0 :(得分:3)
由于b,c
是tuple
,因此您实际上是指定了密钥('bb', 'cc')
。
>>> vars() [b,c]= 10,11
>>> vars()[('bb', 'cc')]
(10, 11)
>>> x = b,c
>>> type(x)
<type 'tuple'>
答案 1 :(得分:0)
我不明白为什么,也不知道如何最好地做到这一点。
好吧,我不得不说,呃......最好的办法就是不要这样做。完全没有。
只需使用它应该使用的dict
:
d = {}
d['aa'] = 10
d['bb'] = 11
无论如何,要回答你的问题,你正在tuple
解开错误的地方。或者说,根本不打开包装;当您将a,b
指定为dict
时,这意味着您要将tuple
指定为关键字。相反,像这样解压缩:
vars()[b], vars()[c] = 10,11
我再次建议您不要这样做,只需使用dict
s将字符串(或任何可缓存的数据类型)映射到值。动态命名变量不是一种好的做法。