分配给多个间接寻址的变量

时间:2013-11-08 19:49:02

标签: python

单一作业的工作方式如下:(可能有更好的方法)

b='bb'
vars()[b] = 10
bb
>>>10

但如果我这样做:

c='cc'
vars() [b,c]= 10,11

它无法成功分配bbcc

我不明白为什么,也不知道如何最好地做到这一点。

由于

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的新手,所以我不清楚它是否可以。

2 个答案:

答案 0 :(得分:3)

由于b,ctuple,因此您实际上是指定了密钥('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将字符串(或任何可缓存的数据类型)映射到值。动态命名变量不是一种好的做法。