函数的参数好几种类型:位置参数、默认参数、可变参数、关键字参数、命名关键字参数。这些参数可以混合使用,但是顺序不能变。
位置参数
举个例子:
def my_power1(x,n): return x**n
其中,x和n就是位置参数,在函数调用时必须传入这两个值。
默认参数 (默认参数必须指向不变对象!list是可变的,因此默认参数不可以指向list。)
举个例子:
def my_power2(x,n=2): return x**n
其中,x是位置参数,n是默认参数,当函数被调用时,可以传入n的值,也可以不传入n的值。不传入时,默认为2。
可变参数
可变参数就是说,传入的参数的个数是可变的,可以是0个,1个,2个....
举个例子:
def my_calc(*numbers): #求取传入的所有参数的平方和 sum = 0 for n in numbers: sum = sum + n * n return sum
此时,参数numbers前边加上了*,表示这是一个可变参数,这些可变参数在函数调用时自动组装成一个tuple。
关键字参数
关键字参数允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装成一个dict。
举个例子:
def person(name,age,**kw): print('name:',name,'age:',age,'other;',kw)
在函数调用时,可以只传入name和age,也可以在传入name和age的同时传入其他参数。
调用及结果:
>>>person('Bob',10) name:Bob age:10 other:{}
>>>person('Bob',10,city='Beijing') name:Bob age:10 other:{'city':'Beijing'} >>>person('Bob',10,city='Beijing',sex='Man') name:Bob age:10 other:{'city':'Beijing','sex':'Man'}
命名关键字参数
对于关键字参数,函数的调用者可以传入不受限制的关键字参数,但是命名关键字参数可以限制关键字参数的名字,只接收特定的关键字参数。
举个例子:
def person(naem,age,*,job,city): print(name,age,job,city)
使用*作为特殊分隔符,*后边的参数被视为命名关键字参数。在调用时,命名关键字参数要将参数名一起写出来。
调用及结果:
>>>person('Jack',24,job='Engineer',city='Beijing') Jack 24 Engineer Beijing
ps:不是很懂为什么要有命名关键字参数,调用时也不能省