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? I think this is called ‘unpacking’.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
function_that_needs_strings(*my_list) # works!
You can read all about it here.
Method 2
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
Method 3
Since Python 3.5 you can unpack unlimited amount of lists.
PEP 448 – Additional Unpacking Generalizations
So this will work:
a = ['1', '2', '3', '4'] b = ['5', '6'] function_that_needs_strings(*a, *b)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0