> Hi, I just started picking up python
yesterday, and have already come
> across something that has me stumped. I want some code that does
> this:
>
> a = foo(a)
> b = foo(b)
> c = foo(c)
>
> So I try to do this with a for loop, like so:
>
> for i in [a, b, c]:
> i = foo(i)
> print i # make sure that it worked correctly
>
> So far, so good. The problem is that outside the loop, the values
> aren't changed. For example,
> across something that has me stumped. I want some code that does
> this:
>
> a = foo(a)
> b = foo(b)
> c = foo(c)
>
> So I try to do this with a for loop, like so:
>
> for i in [a, b, c]:
> i = foo(i)
> print i # make sure that it worked correctly
>
> So far, so good. The problem is that outside the loop, the values
> aren't changed. For example,
You need to understand the difference
between names
and variables and values. A variable in
Python is a reference
to a value (or more correctly an object
which has a value)
for i in [a,b,c]
makes a new variable(name) i which takes on
the *values*
of a,b,c in turn with each iteration of the
loop.
i does not take on the name a,b or c, it
takes on the value.
Thus in the first iteration the variable i
will take on the
value referenced by a, in the second
iteration the value
referenced by b and in the third iteration
the value
referenced by c. The original variables
still refer
to their original values.
i = foo(a)
now i will be rebound to the value returned
by the function
foo() when passed the value of a as an
argument. The value
refered to by a has not been changed in any
way.
print i
prints the new value associated with i. It
changes nothing.
in the second iteration the same happens
but with i
taking on the initial value of
b.
Lets look at a more concrete
example:
def foo(x): return x + 10
a,b,c = 1,2,3
code
iter 1 iter
2 iter 3
----------------------------------------------------------------
for i in
[a,b,c]: i =
1 i =
2 i = 3
i =
foo(i) i
= 11 i =
12 i = 13
Note that a,b,c are not changed anywhere in
this loop.
They retain the original values of
1,2,3.
If you wanted to change them you would need
to explicitly
set their values
> What is going on?
> Why aren't the values of my variables
changing when
> I change them inside a loop like this?
> I change them inside a loop like this?
You are not changing the variables you are
changing i
which is an entirely different
variable!
The normal way to do what I think you want
is to
put the variables in a list or dictionary,
then
you can loop over that and change the
values.
Like so:
vars = {'a':1, 'b':2,'c':3}
def foo(x): return x+10
for key,value in vars.items():
vars[key] =
foo(value)
print vars
HTH,
_______________________________________________ Tutor maillist - [email protected] http://mail.python.org/mailman/listinfo/tutor
