Unpack a list in Python?


Question

I think 'unpack' might be the wrong vocabulary here - apologies because I'm sure this is a duplicate question.

My question is pretty simple: in a function that expects a list of items, how can I pass a Python list item without getting an error?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

Surely there must be a way to expand the list, and pass the function 'red','blue','orange' on the hoof?

1
180
12/17/2013 7:47:46 PM

Accepted Answer

function_that_needs_strings(*my_list) # works!

You can read all about it here.

232
8/8/2014 6:23:36 PM

Yes, you can use the *args (splat) syntax:

function_that_needs_strings(*my_list)

where my_list can be any iterable; Python will loop over the given object and use each element as a separate argument to the function.

See the call expression documentation.

There is a keyword-parameter equivalent as well, using two stars:

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

and there is equivalent syntax for specifying catch-all arguments in a function signature:

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon