joh*_*s85 10 python variables loops list
var_list = [one, two, three]
num = 1
for var in var_list:
var = num
num += 1
Run Code Online (Sandbox Code Playgroud)
上面给出了一个"一"不存在的错误.你不能这样分配吗?我想为列表中的每个var分配一个递增的数字.
Mic*_*ius 14
您可以使用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
Run Code Online (Sandbox Code Playgroud)
Python变量是值的名称.它们并不真正"包含"这些价值观.
for var in var_list:导致'var'成为列表中每个元素的名称.在循环内部,var = num不会影响列表:相反,它会导致var不再是列表元素的名称,而是开始成为num当前名称的名称.
同样,当你创建列表,如果one,two而three不是已经为值的名字,那么你可以不使用它们一样,因为你问到创建具有这些名称(进而导致值的列表var_list是该名单的名称).请注意,列表实际上并不包含值:它引用,即共享它们.
不,它不是那样工作的。
你可以试试:
one, two, three = range(1, 4)
Run Code Online (Sandbox Code Playgroud)
通过在多个分配中定义变量来完成这项工作。就像您可以使用一样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
Run Code Online (Sandbox Code Playgroud)