var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
上述代码会提示错误,指出'one'不存在。不能用这种方式进行赋值吗?我想为列表中的每个变量分配一个递增的数字。因此,我需要以下等效代码:one = 1
two = 2
three = 3
但不必手动创建和初始化所有变量,我该怎么做呢?
var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
上述代码会提示错误,指出'one'不存在。不能用这种方式进行赋值吗?我想为列表中的每个变量分配一个递增的数字。因此,我需要以下等效代码:one = 1
two = 2
three = 3
但不必手动创建和初始化所有变量,我该怎么做呢?
您可以使用内置函数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
Python变量是值的名称,它们并没有真正“包含”这些值。
for var in var_list:
会使var
依次成为列表中每个元素的名称。在循环内部,var = num
不影响列表:相反,它导致var
不再是列表元素的名称,而开始成为当前num
所指向的名称。
同样地,当你创建列表时,如果one
、two
和three
不是已经存在的值名称,那么就不能像那样使用它们,因为你要求创建一个具有这些名称的值的列表(然后使var_list
成为该列表的名称)。请注意,该列表也没有真正包含这些值:它引用(即共享)它们。
one, two, three = range(1, 4)
a,b = 1,2
一样。 这将展开range
并将其值分配给LHS变量,因此它看起来像您的循环(除了它起作用)。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
。
one, two, three = range(1, 4)
one, two, three = [val for val in ['one', 'two', 'three']]
v1, v2, v3 = [func(idx) for idx in range(1, 4)]