之前在读python代码时,总会遇到函数里有**kwarg, *param的写法,一直不是很清楚究竟是什么意思。今天,就来总结一下好了。
参数收集
在函数定义中,有时候会允许用户使用任意个参数,比如若干个数相加,但不确定一共有几个数。此时就可以使用一个参数来指代任意多的参数,它们都被存放在一个元组里。params就是函数print_params的参数,星号表示将调用时的参数都收集起来放在一个元组里,也就是params。如果没有可供收集的参数,params就是None
> def print_params (*params):
print(params)
> print_params(1, 2, 3, 4, 5)
> (1 2 3 4 5)
一般,带星号的参数都放在参数列表最后。星号不会收集关键字参数,要收集关键字参数,需要两个星号,此时参数被收集到了一个dict里。
> def print_params(**params):
print(params)
> print_params(x=1, y=2, z=3)
> {'x':1, 'y':2, 'z':3}
参数分配
参数收集是用在函数的定义里的,将参数收集在tuple或dict里,用在函数定义中;参数分配可以看成参数收集的逆过程,将tuple里或dict里的参数分配给函数的参数,用在函数调用中。
> params = (1, 2)
> def add(x, y):
return x + y
> add(*params)
> 3
也可以将dict里的值分配给关键字参数
> params = {'x' : 5, 'y' : 3}
> def minus(x, y):
return x - y
> minus(**params)
> 2
参数收集和参数分配一般不同时使用。
网友评论