Using tuple as parameter to a function

Chris Angelico rosuav at gmail.com
Mon Nov 9 08:58:04 EST 2015


On Tue, Nov 10, 2015 at 12:40 AM, Cecil Westerhof <Cecil at decebal.nl> wrote:
> I was thinking about something like:
>     values = (( 1, 100), ( 2, 100), ( 5, 100),
>                10, 100), (20, 100), (40, 100))
>     for value in values:
>         do_stress_test('sqlite',   ???)
>         do_stress_test('postgres', ???)
>
> Is this possible? If so: what do I put at the place of the '???'?
>
> I could change the second and third parameter to a tuple as the second
> parameter, but I prefer three parameters if that would be possible.

Easy! Just unpack the tuple. Two options:

# Unpack in the loop
    for count, size in values:
        do_stress_test('sqlite', count, size)
        do_stress_test('postgres', count, size)

# Unpack in the function call
    for value in values:
        do_stress_test('sqlite', *value)
        do_stress_test('postgres', *value)

Either will work. For what you're doing here, I'd be inclined to the
first option, so you can give the values appropriate names (I'm
completely guessing here that they might be some sort of iteration
count and pool size; use names that make sense to your program); the
other option looks uglier in this particular instance, though it's a
more direct answer to your question.

This is one of Python's best-kept secrets, I think. It's not easy to
stumble on it, but it's so handy once you know about it.

ChrisA



More information about the Python-list mailing list