[Tutor] random.choice()
Tim Golden
mail at timgolden.me.uk
Tue Jul 1 15:13:40 CEST 2008
Dick Moores wrote:
> At 05:43 AM 7/1/2008, Tim Golden wrote:
>> Dick Moores wrote:
>>> So I want to randomly choose between them. I thought that I might be
>>> able to use choice() to do that. So,
>>> (bunch of functions here)
>>> if __name__ == '__main__':
>>> choice([use_for_float_demo(), use_for_integer_demo()])
>>> I find that what's gets run each time is BOTH of these functions,
>>> first use_for_float_demo(), and then use_for_integer_demo()! What's
>>> going on?
>>
>> What you *want* to do is choose one of two functions, and call
>> whichever is chosen:
>>
>> fn = choice ([a, b])
>> result = fn ()
>>
>> What you're *actually* doing is calling two functions, and returning
>> one result or the other:
>>
>> result = choice ([a (), b ()])
>
> I'm not sure I understand the distinction. It seems you're saying in
> either case I get one result or the other. In fact, each time I run the
> program, I get BOTH results.
Let's talk through what the Python interpreter's doing in each case:
a) fn = choice ([a, b]); print fn ()
Here, the interpreter is saying: ok, let's build a list which contains
two functions. Now, let's pick one of those functions. Whichever one
we picked, let's call it and print out the result.
b) print choice ([a (), b ()]
In this case, the interpreter is saying: build a list containing *the result*
of calling each of these functions, so both functions are called when the
list is built, and the list contains [<result of calling a>, <result of calling b>].
Now pick one of those results and display it.
Is that any clearer? If not, I'm obviously not too good at explaining this
kind of thing; maybe someone else can have a go.
TJG
More information about the Tutor
mailing list