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

Reply via email to