Importing an output from another function

Terry Hancock hancock at anansispaceworks.com
Fri Mar 17 21:01:37 EST 2006


On 17 Mar 2006 12:15:28 -0800
"Byte" <eoinrogers at gmail.com> wrote:
> Probably a stupid question, but I'm a newbie and this
> really pisses me off. Run this script:
> 
> import random
> 
> def Func1():
>     choice = ('A', 'B', 'C')
>     output = random.choice(choice)
> 
> def Func2():
>     print output
> 
> Func1()
> Func2()

Several possible solutions. The simplest (but least
informative):

"""
import random

def Func1():
    global output
    choice = ('A', 'B', 'C')
    output = random.choice(choice)

def Func2():
    print output

Func1()
Func2()
"""

i.e. make output a global variable

But as has already been pointed out, you aren't really using
the nature of functions here.  Better:

"""
import random

def Func1():
    return random.choice(('A', 'B', 'C'))

def Func2(output):
    print output

Func2(Func1())
"""

You later ask about returning multiple values. Python is
pretty cool in this respect -- you can return multiple
values in a tuple, which can then be "unpacked"
automatically. This gives you a nice many-to-many idiom for
function calls, e.g.:

x, y = random_point(x_min, x_max, y_min, y_max)

And if you need to pass that to a function which takes two
arguments (x,y), you can:

set_point(*random_point(x_min, x_max, y_min, y_max))

Of course, some people would rather see that expanded out, 
and indeed, too many nested function calls can be hard on
the eyes, so you might want to do this anyway:

x, y = random_point(x_min, x_max, y_min, y_max)
set_point(x, y)

or 

P = random_point(x_min, x_max, y_min, y_max)
set_point(P)

and of course, it's possible that the function requires the
arguments in a different order, e.g.:

x, y = random_point(1,80,1,25)
set_rowcol(y, x, 'A')

or some such thing.

By far the coolest thing about tuple-unpacking, though, is
that this works like you'd expect it to:

x, y = y, x

instead of being a dumb mistake like this is:

x = y
y = x

which of course should be

temp = y
x = y
y = temp

But ewww that's ugly.

Cheers,
Terry

-- 
Terry Hancock (hancock at AnansiSpaceworks.com)
Anansi Spaceworks http://www.AnansiSpaceworks.com




More information about the Python-list mailing list