Assigning values to variables in a list using a loop
You can access the dictionary of global variables with the globals()
built-in function. The dictionary uses strings for keys, which means, you can create variables with names given as strings at run-time, like this:
>>> 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
Recommended reading
Python variables are names for values. They don't really "contain" the values.
for var in var_list:
causes 'var' to become a name for each element of the list, in turn. Inside the loop, var = num
does not affect the list: instead, it causes var
to cease to be a name for the list element, and instead start being a name for whatever num
currently names.
Similarly, when you create the list, if one
, two
and three
aren't already names for values, then you can't use them like that, because you are asking to create a list of the values that have those names (and then cause var_list
to be a name for that list). Note that the list doesn't really contain the values, either: it references, i.e. shares them.
No, it doesn't work like that.
You can try:
one, two, three = range(1, 4)
This work by defining the variables in a multiple assignment. Just as you can use a, b = 1, 2
. This will unroll the range
and assign its values to the LHS variables, so it looks like your loop (except that it works).
Another option (which I wouldn't recommend in a real program...) would be to introduce the variable names in an exec statement:
names = ['one', 'two', 'three']
num = 1
for name in names:
exec "%s = %s" % (name, num)
num += 1
print one, two, three