Arbitrary Number Of Arguments In A Python Function
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"