定义默认参数要牢记一点:默认参数必须指向不变对象!
在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的:
以数学题为例子,给定一组数字a,b,c....,请计算a2 + b2 + c2 + …...。
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
但是调用的时候,需要先组装出一个list或者tuple:
>>> calc([1, 2, 3])
14
>>> calc((1, 3, 5, 7))
84
如果利用可变参数,调用函数的方式可以简化成:
>>> calc(1, 2, 3)
14
>>> calc(1, 3, 5, 7)
84
至此,可以把函数的参数改为可变参数:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定义可变参数和定义一个list或者tuple参数相比,仅仅在参数前面加一个*号。函数内部,参数 numbers接收到的是一个tuple,因此函数代码完全不变,但是调用该函数时,可以传入任意个参数,包括0个参数:
>>> calc(1, 2)
5
>>> calc()
0
如果要传入的参数是已经存在的list或者tuple,又该如何调用呢?
>>> nums = [1, 2, 3]
>>> calc(nums[0], nums[1], nums[2])
14
但是 上面的写法不够简练,还可以这样调用:
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
Python是允许list或者tuple前面加*号,变成可变参数传进去的。