var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
上面的代码给出了'one'不存在的错误。你不能以这种方式分配吗?我想为列表中的每个变量分配一个递增数字。使用循环将值赋给列表中的变量
var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
上面的代码给出了'one'不存在的错误。你不能以这种方式分配吗?我想为列表中的每个变量分配一个递增数字。使用循环将值赋给列表中的变量
Python变量是名称为值。他们并不真正“包含”这些价值观。
for var in var_list:
使'var'成为列表中每个元素的名称。在循环内部,var = num
不会影响列表:相反,它会导致var
不再是列表元素的名称,而是开始为当前名称的任何名称创建名称。
同样,当你创建列表,如果one
,two
和three
尚未对价值观的名字,那么你可以不使用它们那样的,因为你问到创建具有这些值的列表名称(然后导致var_list
成为该列表的名称)。请注意,该列表并不包含这些值,它们是:引用,即共享它们。
不,它不能这样工作。
你可以试试:
one, two, three = range(1, 4)
这项工作通过定义在多任务的变量。就像你可以使用a, b = 1, 2
一样。这将展开range
并将其值分配给LHS变量,因此它看起来像您的循环(除了它的工作原理)。
另一种选择(我不会在一个真正的程序...推荐)将引入一个exec语句中的变量名:
names = ['one', 'two', 'three']
num = 1
for name in names:
exec "%s = %s" % (name, num)
num += 1
print one, two, three
,直到你创建它变量不存在。仅仅引用一个变量不足以创建它。当您做[one, two, three]
时,您在创建之前引用变量one
,two
和three
。
您可以通过globals()
内置函数访问全局变量字典。这本词典使用串钥匙,这意味着,你可以创建在运行时给出的字符串名称变量,像这样:
>>> var_names = ["one", "two", "three"]
>>> count = 1
>>> for name in var_names:
... globals()[name] = count
... count += 1
...
>>> one
1
>>> two
2
>>> three
3
>>> globals()[raw_input()] = 42
answer
>>> answer
42
这工作,但这个答案是为什么有点短OP的方式*不工作。 – John 2011-01-14 04:09:30
的确如此。正如其他人已经介绍的那样,我会解释为什么这是基于此。 – TryPyPy 2011-01-14 04:10:53