# function arguments

Discussion in 'Python' started by Joe Laughlin, Sep 15, 2004.

1. ### Joe LaughlinGuest

I want to do something like the following

def foo(list_of_args):
call_other_function(arg1, arg2, arg3)
# Where arg1 == "x", arg2 == "y", etc.
# Should work with any list size

foo(["x", "y", "z"])

Make sense? Need clarification? In summary, I want to pass a list of
arguments to a function. The function needs to pass each argument in the
list to a different function.

Thanks,
Joe

Joe Laughlin, Sep 15, 2004

2. ### Paul McGuireGuest

"Joe Laughlin" <> wrote in message
news:...
> I want to do something like the following
>
> def foo(list_of_args):
> call_other_function(arg1, arg2, arg3)
> # Where arg1 == "x", arg2 == "y", etc.
> # Should work with any list size
>
> foo(["x", "y", "z"])
>
> Make sense? Need clarification? In summary, I want to pass a list of
> arguments to a function. The function needs to pass each argument in the
> list to a different function.
>
> Thanks,
> Joe
>
>

Use *list_of_args. Try this:

def sum1( a ):
return a
def sum2( a,b ):
return a+b
def sum3( a,b,c ):
return a+b+c
def sum4( a,b,c,d ):
return a+b+c+d

def sumOf(list_of_args):
sumFn = (None, sum1, sum2, sum3, sum4)[len(list_of_args)]
return sumFn(*list_of_args) # <-- pass thru args to other function

print sumOf( [ 1,2 ] )
print sumOf( [ 1,2,3 ] )
print sumOf( [ 1,2,3,4 ] )

-- Paul

Paul McGuire, Sep 15, 2004

3. ### Larry BatesGuest

Paul has explanation (see his response), but I
wanted to expand a little.

def foo(*args, **kwargs):
for arg in args:
print arg
for key, value in kwargs.items():
print key, value
return

>>> foo('a','b',x=1,y=2)

a
b
y 2
x 1

or

def foo(list_of_args, **kwargs):
#
# Now call function with args as individual arguments
# and keyword arguments as individual keyword
# arguments also.
#
call_other_function(*list_of_args, **kwargs)
return

Hope this helps,
Larry Bates

"Joe Laughlin" <> wrote in message
news:...
>I want to do something like the following
>
> def foo(list_of_args):
> call_other_function(arg1, arg2, arg3)
> # Where arg1 == "x", arg2 == "y", etc.
> # Should work with any list size
>
> foo(["x", "y", "z"])
>
> Make sense? Need clarification? In summary, I want to pass a list of
> arguments to a function. The function needs to pass each argument in the
> list to a different function.
>
> Thanks,
> Joe
>
>

Larry Bates, Sep 15, 2004
4. ### Paul RubinGuest

"Joe Laughlin" <> writes:
> def foo(list_of_args):
> call_other_function(arg1, arg2, arg3)
> # Where arg1 == "x", arg2 == "y", etc.
> # Should work with any list size
>
> foo(["x", "y", "z"])
>
> Make sense? Need clarification?

In the old days you'd have had to say

apply(call_other_function, list_of_args)

But now you can just say

call_other_function(*list_of_args)

which does the same thing. The asterisk turns your list into an arglist.

Paul Rubin, Sep 15, 2004