文章目录
一、函数参数类型
python函数参数定义有以下四种类型:
1. 必选参数(位置参数)
调用函数时必须赋值的参数。
注:必须按照正确的数量和顺序依次传入函数。
def fun(x):
return x
b = 1
print(fun(1)) # 1
print(fun()) # 报错
2.默认参数
传入函数时有初始值,在调用函数时若未赋值则使用初始默认值。
def fun(x=1):
return x
print(fun()) # 1
print(fun(2)) # 2
3.不定长参数(可变参数)
不确定参数个数时,会分配给带*参数。
(1)*args
不定长的元组参数,参数格式化存储在一个元组中,长度没有限制。
必须位于普通参数和默认参数之后。
def fun(*args):
return args
a = fun(1, 2, 3)
print(a)# 返回一个元组(1, 2, 3)
(2)**kwargs
不定长的字典参数。
必须位于参数列表最后面。
def fun(**kwargs):
return kwargs
a = fuun(ai='爱', ni='你')
print(a) # 返回一个字典{'ai': '爱'. 'ni': '你'}
python3中,不定长元组参数可以在默认参数前,谁在前谁优先拿到值,但python2中不可行!
# 不定参数在前(python3中新增特性)
def fun(*args, y=1):
return y,x
a = fun(2, 1, 3, 4)
print(a) # y=1,x=(2, 1, 3, 4)
# 不定参数在后
def fun(y=1, *args):
return y,x
a = fun(2, 1, 3, 4)
print(a) # y=2, args=(1, 3, 4)
4.关键字参数
使用关键字参数来确定传入的参数值。调用函数时带关键字后,不受实参传入顺序影响。
def fun(x, y, z):
return x, y, z
a = fun(y=2, x=3, z=2)
print(a) # x=3,y=2,z=2
二、函数参数顺序
1.python2/3:(位置参数,默认参数,*args)
def fun(x, y=1, *args):
return x, y, args
a = fun(1, 2, 3, 4, 5)
print(a) # x=1, y=2, args=(3, 4, 5)
2.python3: (位置参数,*args,默认参数)
def fun(x, *args, y=1):
return x, args, y
a= fun(1, 2, 3, 4, 5)
print(a) # x=1, args= (2, 3, 4, 5) , y=1不变
3.python2/3:*args,**kwargs与位置参数,默认参数混用情况
位置参数、*args、**kwargs三者顺序必须是位置参数、*args、**kwargs。
def fun(x, *args, **kwargs):
return x, args, kwargs
a = fun(1, 2, 3, 4, y=5, a=6, b=7)
print(a) # x=1, args=(2, 3, 4), kwargs={'y': 5, 'a': 6, 'b': 7}
4.总结
python2参数顺序:
(必选参数,默认参数,不定长参数,关键字参数)
python2中,默认参数必须在不定长参数之前。
python3参数顺序:
(必选参数,默认参数,*args, **kwargs)
*python3中,args可以在默认参数前,谁在前谁优先拿到值。
python2与python3相同点:
(1)必选参数一定在默认参数之前;
(2)关键字参数在最后。