# arbitrary numbers of arguments. def add(*nums): # * packing: convert/pack a number of values into a list return sum(nums) print(""" def add(*args): return sum(args) """) print(f"add(): {add()}") print(f"add(1,2,3,4,5): {add(1,2,3,4,5)}") # nums <- [1,2,3,4,5] print(f"add(10,2,3,4,5,6,7): {add(10,2,3,4,5,6,7)}") def multiplied_sum(*numbers, multiplier=1): total_sum = sum(numbers) return total_sum * multiplier print(""" def multiplied_sum(*numbers, multiplier=1): total_sum = sum(numbers) return total_sum * multiplier """) print(f"multiplied_sum(1,2,3,4,multiplier=5): {multiplied_sum(1,2,3,4,multiplier=5)}") print(f"multiplied_sum(1,2,3,4,5): {multiplied_sum(1,2,3,4,5)}") print(f"multiplied_sum(1,2,3,4,6,7,8,9,10,0, multiplier=5): {multiplied_sum(1,2,3,4,6,7,8,9,10,0, multiplier=5)}") def area(*, width, length): # After *, only named arguments. return width * length print(""" def area(*, width, length): return width * length """) print(f"area(width=2,length=3): {area(width=2,length=3)}") print( """ print(f"area(2,3): {area(2,3)}") TypeError: area() takes 0 positional arguments but 2 were given """ ) # print(f"area(2,3): {area(2,3)}") def area_with_weight(width, length, *, weight=1): # After *, only named arguments. return width * length * weight print(""" def area_with_weight(width, length, *, weight=1): # After *, only named arguments. return width * length * weight """) print(f"area_with_weight(2,3): {area_with_weight(2,3)}") print(f"area_with_weight(2,3,weight=2): {area_with_weight(2,3,weight=2)}") print(f"area_with_weight(2,3,2): {area_with_weight(2,3,2)}")