Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I explode a tuple so that it can be passed as a parameter list?

Let's say I have a method definition like this:

def myMethod(a, b, c, d, e)

Then, I have a variable and a tuple like this:

myVariable = 1
myTuple = (2, 3, 4, 5)

Is there a way I can pass explode the tuple so that I can pass its members as parameters? Something like this (although I know this won't work as the entire tuple is considered the second parameter):

myMethod(myVariable, myTuple)

I'd like to avoid referencing each tuple member individually if possible...

like image 711
froadie Avatar asked Jul 07 '10 19:07

froadie


People also ask

How do you pass a list of tuples in Python?

1) Using tuple() builtin function tuple () function can take any iterable as an argument and convert it into a tuple object. As you wish to convert a python list to a tuple, you can pass the entire list as a parameter within the tuple() function, and it will return the tuple data type as an output.

How do you convert a tuple to a list?

The most Pythonic way to convert a tuple to a list in Python is to call the built-in list() function and pass the tuple as a function argument to the function. The function list() takes any sequence type such as a tuple and converts them to lists. The return value of the function is the new list generated.

Can you pass tuple as argument in Python?

A tuple can also be passed as a single argument to the function. Individual tuples as arguments are just individual variables. A function call is not an assignment statement; it's a reference mapping.

How do you pass multiple tuples as parameters in Python?

To expand tuples into arguments with Python, we can use the * operator. to unpack the tuple (1, 2, 3) with * as the arguments of add . Therefore, a is 1, b is 2, and c is 3. And res is 6.


2 Answers

You are looking for the argument unpacking operator *:

myMethod(myVariable, *myTuple)
like image 50
unutbu Avatar answered Oct 08 '22 14:10

unutbu


From the Python documentation:

The reverse situation occurs when the arguments are already in a list or tuple but need to be unpacked for a function call requiring separate positional arguments. For instance, the built-in range() function expects separate start and stop arguments. If they are not available separately, write the function call with the *-operator to unpack the arguments out of a list or tuple:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

In the same fashion, dictionaries can deliver keyword arguments with the **-operator:

>>> def parrot(voltage, state='a stiff', action='voom'):
...     print "-- This parrot wouldn't", action,
...     print "if you put", voltage, "volts through it.",
...     print "E's", state, "!"
...
>>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
>>> parrot(**d)
-- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
like image 24
Escualo Avatar answered Oct 08 '22 14:10

Escualo