Skip to content Skip to sidebar Skip to footer

Arbitrary Number Of Arguments In A Python Function

I'd like to learn how to pass an arbitrary number of args in a python function, so I wrote a simple sum function in a recursive way as follows: def mySum(*args): if len(args) ==

Solution 1:

This line:

return args[-1] + mySum(args[:-1])

args[:-1] returns a slice of the arguments tuple. I assume your goal is to recursively call your function using that slice of the arguments. Unfortunately, your current code simply calls your function using a single object - the slice itself.

What you want to do instead is to call with those args unrolled.

return args[-1] + mySum(*args[:-1])
                        ^---- note the asterisk

This technique is called "unpacking argument lists," and the asterisk is sometimes (informally) called the "splat" operator.

Solution 2:

If you don't want to do it recursively:

defmySum(*args):
    sum = 0for i in args:
        sum = sum + i
    returnsum

Solution 3:

args[:-1] is a tuple, so the nested call is actually mySum((4,)), and the nested return of args[0] returns a tuple. So you end up with the last line being reduced to return 3 + (4,). To fix this you need to expand the tuple when calling mySum by changing the last line to return args[-1] + mySum(*args[:-1]).

Solution 4:

In your code, args[:-1] is a tuple, so mySum(args[:-1]) is being called with the args being a tuple containing another tuple as the first argument. You want to call the function mySum with args[:-1] expanded to the arguments however, which you can do with

mySum(*args[:-1])

Solution 5:

The arbitrary arguments are passed as tuple (with one asterisk*) to the function, (you can change it to a list as shown in the code) and calculate the sum of its elements, by coding yourself using a for loop; if don't want to use the sum() method of python.

defsumming(*arg):
    li = list(*arg)
    x = 0for i inrange((len(li)-1)):
        x = li[i]+x

    return x

#creating a list and pass it as arbitrary argument to the function#to colculate the sum of it's elements

li = [4, 5 ,3, 24, 6, 67, 1]
print summing(li)

Post a Comment for "Arbitrary Number Of Arguments In A Python Function"