1位置参数
调用函数时根据函数定义的参数位置来传递参数。
def fun(a,b):
print('a: ','b: ',b)
>>fun(1,2)
a: 1 b: 2
2关键字参数
用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求
def fun(a,b):
print('a: ',a,'b: ',b)
>>fun(a=1,b=2)
>>fun(b=2,a=1)
a: 1 b: 2
def fun(a,b):
print('a: ',a,'b: ',b)
>>fun(b = 2,1)
SyntaxError: positional argument follows keyword argument
注意:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的
3默认值参数
指的是在函数定义时给参数赋值
def fun(a,b=2):
print('a: ',a,'b: ',b)
>>fun(1)
a: 1 b: 2
def fun(a=1,b):
print('a: ',a,'b: ',b)
>>fun(2)
SyntaxError: non-default argument follows default argument>
注意:默认参数必须在位置参数之后
4命名关键字参数
定义时出现在一个*号之后的参数,调用时必须以关键字调用
def fun(a,*,b):
print('a: ',a,'b: ',b)
>>fun(1,b=4)
a: 2 b: 4
def fun(a,*,b=2):
print('a: ',a,'b: ',b)
>>fun(1,b=4)
a: 2 b: 4
def fun(a,*,b=2):
print('a: ',a,'b: ',b)
>>fun(1,4)
fun() takes 1 positional argument but 2 were given
def fun(*a,b):
print('a: ',a,'b: ',b)
>>fun(2,4,b=3)
a: (2, 4) b: 3
def fun(*a,b):
print('a: ',a,'b: ',b)
>>fun(2,4,3)
fun() missing 1 required keyword-only argument: 'b'
5可变参数
def fun(*a):
print(type(a))
print('a: ',a)
>>fun(8,9)
<class 'tuple'>
(8, 9)
>>fun()
<class 'tuple'>
()
def fun(**a):
print(type(a))
print('a: ',a)
>>fun(a=1,b=2)
<class 'dict'>
a: {'a': 1, 'b': 2}
>>fun()
<class 'dict'>
{}
def fun(a,b):
print('a: ',a,'b: ',b)
l = [1,2]
fun(*l)
a: 1 b: 2
def fun(a,b):
print('a: ',a,'b: ',b)
l = {'c':1,'d':2}
fun(*l)
a: c b: d
def fun(a,b):
print('a: ',a,'b: ',b)
l = {'a':1,'b':2}
fun(**l)
a: 1 b: 2
参数组合
定义时:顺序必须是:位置参数、默认参数、*args, 命名关键字参数, **kwargs。
调用时:同上