Thankyou. It's clear, this definitely helps me with the first question. But still doesn't explain almost anything about the example i've posted in the last post, right?
Giorgio 2010/2/23 Christian Witts <cwi...@compuscan.co.za> > Giorgio wrote: > >> I have an update: >> >> I can easily undertand why this example doesn't work: >> >> def nochange(x): >> x = 0 >> >> y = 1 >> nochange(y) >> print y # Prints out 1 >> >> X is a local variable, and only gets modified in the function, that >> doesn't return any value. >> >> But it's very difficult for me to understand WHY this works: >> >> def change(some_list): >> some_list[1] = 4 >> >> x = [1,2,3] >> change(x) >> print x # Prints out [1,4,3] >> >> some_list is a "local" list, isn't it? Maybe i can't have lists that are >> only existing in a function? >> >> Thankyou all >> >> 2010/2/22 Kent Johnson <ken...@tds.net <mailto:ken...@tds.net>> >> >> >> On Mon, Feb 22, 2010 at 9:13 AM, Giorgio >> <anothernetfel...@gmail.com <mailto:anothernetfel...@gmail.com>> >> >> wrote: >> >> > And, i have some difficulties understanding the other "strange" >> example in >> > that howto. Just scroll down to: "However, the point is that the >> value >> > of x is picked up from the environment at the time when the >> function is >> > defined. How is this useful? Let’s take an example — a function >> which >> > composes two other functions." >> > He is working on a function that compose other 2 functions. This >> is the >> > final solution >> > def compose(fun1, fun2): >> > def inner(x, fun1=fun1, fun2=fun2): >> > return fun1(fun2(x)) >> > return inner >> > But also tries to explain why this example: >> > # Wrong version >> > def compose(fun1, fun2): >> > def inner(x): >> > return fun1(fun2(x)) >> > return inner >> > def fun1(x): >> > return x + " world!" >> > def fun2(x): >> > return "Hello," >> > sincos = compose(sin,cos) # Using the wrong version >> > x = sincos(3) >> > Won't work. Now, the problem is that the "inner" function gets >> fun1 and fun2 >> > from other 2 functions. >> > My question is: why? inner is a sub-function of compose, where >> fun1 and fun2 >> > are defined. >> >> It does work: >> In [6]: def compose(fun1, fun2): >> ...: def inner(x): >> ...: return fun1(fun2(x)) >> ...: return inner >> ...: >> >> In [7]: def fun1(x): >> ...: return x + " world!" >> ...: >> >> In [8]: def fun2(x): >> ...: return "Hello," >> ...: >> >> In [9]: from math import sin, cos >> >> In [10]: sincos = compose(sin,cos) # Using the wrong version >> >> In [11]: >> >> In [12]: x = sincos(3) >> >> In [13]: >> >> In [14]: x >> Out[14]: -0.8360218615377305 >> >> That is a very old example, from python 2.1 or before where nested >> scopes were not supported. See the note "A Note About Python 2.1 and >> Nested Scopes" - that is now the default behaviour. >> >> Kent >> >> >> >> >> -- >> -- >> AnotherNetFellow >> Email: anothernetfel...@gmail.com <mailto:anothernetfel...@gmail.com> >> ------------------------------------------------------------------------ >> >> >> _______________________________________________ >> Tutor maillist - Tutor@python.org >> To unsubscribe or change subscription options: >> http://mail.python.org/mailman/listinfo/tutor >> >> > Take a look at the Python gothcha's: > http://www.ferg.org/projects/python_gotchas.html#contents_item_6 > > -- > Kind Regards, > Christian Witts > > > -- -- AnotherNetFellow Email: anothernetfel...@gmail.com
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor