43

My problem is I have values in a list. And I want to separate these values and send them as a separate parameter.

My code is:

def egg():
    return "egg"

def egg2(arg1, arg2):
    print arg1
    print arg2

argList = ["egg1", "egg2"]
arg = ', '.join(argList)

egg2(arg.split())

This line of code (egg2(arg.split())) does not work, but I wanted to know if it is possible to call some built-in function that will separated values from list and thus later we can send them as two different parameters. Similar to egg2(argList[0], argList[1]), but to be done dynamically, so that I do no have to type explicitly list arguments.

arserbin3
  • 5,812
  • 8
  • 33
  • 52
Rohita Khatiwada
  • 2,663
  • 7
  • 39
  • 52
  • 5
    possible duplicate of [Pass each element of a list to a function that takes multiple arguments in Python?](http://stackoverflow.com/questions/3558593/pass-each-element-of-a-list-to-a-function-that-takes-multiple-arguments-in-python) – Felix Kling Aug 02 '11 at 13:54
  • Does this answer your question? [Pass each element of a list to a function that takes multiple arguments in Python?](https://stackoverflow.com/questions/3558593/pass-each-element-of-a-list-to-a-function-that-takes-multiple-arguments-in-pytho) – xskxzr Aug 09 '21 at 08:21

4 Answers4

87
>>> argList = ["egg1", "egg2"]
>>> egg2(*argList)
egg1
egg2

You can use *args (arguments) and **kwargs (for keyword arguments) when calling a function. Have a look at this blog on how to use it properly.

Jacob
  • 39,723
  • 6
  • 76
  • 81
13

There is a special syntax for argument unpacking:

egg2(*argList)
Sven Marnach
  • 530,615
  • 113
  • 910
  • 808
1

arg.split() does not split the list the way you want because the default separator does not match yours:

In [3]: arg
Out[3]: 'egg1, egg2'

In [4]: arg.split()
Out[4]: ['egg1,', 'egg2']

In [5]: arg.split(', ')
Out[5]: ['egg1', 'egg2']

From the docs (emphasis added):

If sep is not specified or is None, a different splitting algorithm is applied: runs of consecutive whitespace are regarded as a single separator, and the result will contain no empty strings at the start or end if the string has leading or trailing whitespace.

matt b
  • 135,500
  • 64
  • 278
  • 339
  • 1
    It's not immediately clear to me that this addresses the fundamental problem, which is that `eggs2` requires two arguments, but any variation on `['egg1', 'egg2'] is a single argument unless preceded by the `*` operator. – senderle Aug 02 '11 at 14:18
1

There are maybe better ways, but you can do:

argList = ["egg1", "egg2"]
(a, b) = tuple(argList)
egg2(a, b)
MByD
  • 133,244
  • 25
  • 260
  • 270