默认参数必须指向不变参数
- 这是什么意思?用实例来看一看:
def add_end(a=[]):
a.append('end')
return a
print(add_end())
print(add_end())
返回结果:
['end']
['end', 'end']
默认参数a也是一个变量,它指向对象[],每次调用函数,如果改变了变量的内容,下次调用时,默认参数的内容就变了,不再是空的列表了。
- 那么如何定义默认参数呢?
def add_end(a=None):
if a is None:
a=[]
a.append('end')
return a
print(add_end())
print(add_end())
结果:
['end']
['end']
将参数a定义为固定的值即可。
在列表或元组之前可以加*,然后列表和元组就能传入函数。
定义一个平方和函数
def calc(*numbers):
sum=0
for n in numbers:
sum+=n*n
return sum
print(calc(1,2,3))
结果:
14
- 但是如果我们传入列表
nums=[1,2,3]
print(calc(nums[0],nums[1],nums[2]))
结果:
14
但是很不方便,那么可以用*nums直接传入函数
nums=[1,2,3]
print(calc(*nums))
结果依然是14。