[Tutor] Functions returning multiple values
Giorgio
anothernetfellow at gmail.com
Tue Feb 23 13:13:07 CET 2010
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 <kent37 at tds.net>
> On Mon, Feb 22, 2010 at 9:13 AM, Giorgio <anothernetfellow at 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: anothernetfellow at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20100223/9dc20c1c/attachment.html>
More information about the Tutor
mailing list