参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb9000
首先要才分清楚,如果你想传入字典参数,那么正常写就好,因为字典也是python的数据类型,比如想用**kw来传入字典参数,这是什么鬼操作?(是因为kw就是关键字的意思吗?)
可变参数
可变参数的意思函数接受的参数的个数可以改变,可以是0个,也可以是2个,即能接受任意个数的参数
如果我们什么也不做,那么要想函数接受可变参数只有让传入的参数是一个列表或元组类型的,然后在函数内部再去遍历他。
#分别传入列表类型的和元组类型的作为参数传入
parameter1=[1,2,3]
parameter2=[1,2,3,5]
#元组类型
parameter3=(1,2,3)
parameter4=(1,2,3,4)
def test(a):
sum=0
for s in a:
sum=sum+s*s
print(sum)
test(parameter1)
test(parameter2)
test(parameter3)
test(parameter4)
#结果:
(sort) λ python forTest.py
0
39
0
30
这样不方便的地方每次都必须把参数组装成一个元组或者列表的类型才能传进去,这样十分的不方便。
test([1,2,3,5])#把参数组装成列表
test((1,2,3,5))#组装成元组
使用可变参数之后,调用的方式可以简化为这样
test()#传入0个参数
test(1,2,3,5)
这需要把函数的参数改为可变参数,只需要加上一个*号,在定义函数的时候
def test(*a):#注意还是要有a的
#结果
(sort) λ python forTest.py
0
5
加上一个*好后,在函数内部,参数numbers
接收到的是一个tuple(可以理解为:函数内部把接受到的参数组装成一个元组或一个列表?)
如果已经有了一个类型为元组或者列表类型的参数,怎么传入一个参数为可变参数的函数中呢?
一种笨的:
test(parameter2[0],parameter2[1])
(sort) λ python forTest.py
5
另外一种:
test(*parameter2)
(sort) λ python forTest.py
39
*nums
表示把nums
这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
如果需要对传入的参数做不同的操作怎么办呢,比如一个参数是名字,一个参数是年龄,想要让他们两个随机组合的参数该怎么设定呢?
关键字参数**kw
关键字参数只是kw接受了一个字典而已,他跟你要传入的参数是个字典并没有关系
1)在函数中使用
首先要在定义函数的时候这样写
def functionName(positionArg,**kw):
s=kw['name_a']#获取关键字参数中键名为a的
使用函数的时候传入参数的时候
test('1',a='23',b='234')
#不能下面这样写,否则后提示有一个位置参数却给了两个
dics={'a':'23','b':'234'}
test('1',dics)
在函数中取值
def test(arg,**kw):
s=kw['b']#没有b的时候会出错