Python中定义的函数可以使用必选参数、默认参数、可变参数、命名关键字参数和关键字参数,使用的顺序也服从上述排列。
1-必选参数
def func(x):
print(x)
2-默认参数
def func(x,n = 2):
print(x,n)
调用时:
>>>func(20)
20 2
>>>func(20,5)
20 5
3-可变参数
def func(*value):
print(value)
可变参数,顾名思义就是可以传入0-任意个参数,也可以传入一个list或tuple
调用:
>>>func(1,2,3)
1 2 3
>>>b = [1,2,3]
>>>func(*b)
1 2 3
4-关键字参数
关键字参数与可变参数可以说大部分一样,不同的是可变参数会将传入的参数组装成list,而关键字参数会将传入的参数组装成dict
def func(n,**dict):
print(n,dict)
调用
>>>func(12,x='1',y='2')
12 {'x':'1',y':'2'}
>>>dic = {'x':'1','y':'2'}
>>>func(12,**dic)
12 {'x':'1',y':'2'}
5-命名关键字参数
命名关键字参数的作用是限制传入的关键字参数,也就是说你只能输入特殊固定的键值对,如果函数定义中有可变参数,那么命名关键字参数紧跟其后,如果没有可变参数,需要增加一个 ,*,来区分位置参数和关键字参数
def func(x,y,*,height,width): #限制只传入key = height和width
print(x,y,height,width)
Tips
1-默认参数必须指向不变对象;(list是可变对象)
原因:函数在定义的时候默认参数的值就已经是个占用内存的变量了,函数被调用时,如果默认参数是可变的list,那么在每次调用函数之后默认参数的值都会发生改变。
Eg.
def add_list(l =[]): #传入的默认参数是可变参数list
l.append('end')
print(l)
可以这样修改:
def add_list(l = None): #将默认参数置为None不可变参数
if l is None: #如果选择使用默认参数,就置为list
l = []
l.append('end')
print(l)