Velocity Reviews > function arguments

# function arguments

Joe Laughlin
Guest
Posts: n/a

 09-15-2004
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

Paul McGuire
Guest
Posts: n/a

 09-15-2004
"Joe Laughlin" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> 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

Larry Bates
Guest
Posts: n/a

 09-15-2004
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" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>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
>
>

Paul Rubin
Guest
Posts: n/a

 09-15-2004
"Joe Laughlin" <(E-Mail Removed)> 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.