1. 默认参数
就是给参数一个固定值,比如power(x,n=2),中n=2就是默认参数的含义。
2. 位置参数
按照位置依次赋值,比如power(x,n)中,x、n都是位置参数
3. 可变参数
就是将传入值作为一个list或者tuple传入,比如
def cacl(numbers):
sum =0
for n in numbers:
sum=sum+n*n
return sum
#调用该函数
cacl([1,2,3])
#使用可变参数*numbers
def cacl(*numbers):
sum =0
for n in numbers:
sum=sum+n*n
return sum
#调用该函数
cacl(1,2,3)
需要注意的是,可变参数接受的到的是一个tuple类型的数据,当存在一个list或者tuple时想要调用可变参数只需要在该list或者tuple之前加上一个*即可,比如:
nums=[1,2,3]
cacl(*nums)
*nums表示吧nums这个list的所有元素作为可变参数传进去,这种写法相当有用,且十分常见。
当然,你也可以写成
nums=[1,2,3]
cacl(num[0],num[1],num[2])
4. 关键字参数
可变参数允许你传入0个或者任意个参数,这些可变参数在函数调用时自动组装成一个tuple,而关键字参数允许你传入0个或者任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict。
比如:
def person(name,age,**kwargs):
print('name:',name,'age:',age,'other:',kw)
调用
person('bob',35,city='beijing')
输出结果
name:bob,age:35,other:{'city':'beijing'}
5. 命名关键字参数
如果要限制关键字参数的名字,就可以使用命名关键字参数,例如,只接收city和job作为关键字参数,这种方式定义的函数如下:
def person(name,age,*,city,job):
print(name,age,city,job)
与关键字参数**kw不同的是,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为是命名关键字参数
调用方式:
person('jack',24,city='beijing',job='engineer')
输出:jack 24 beijing engineer
命名关键字参数必须传入参数名,这和位置参数不同,如果没有传入参数名,调用将会报错。因为不传入参数名的话,python解释器会将这四个参数均视为位置参数,但person()函数仅接受2个位置参数
此外,命名关键字参数还可以有缺省值,从而简化调用:
def person(name,age,*,city='beijing',job):
print (name,age,city,job)
特别注意的是,*不是参数,而是特殊分隔符,如果缺少*,Python解释器将无法识别命名关键字参数和位置参数。
6. 参数组合
def func(a,b,*args,**kwargs):