【Python备忘录】Python函数中*的使用

it2024-03-25  71

简介

萌新看代码的时候经常看到使用Python函数的时候用到*,以前用c或者java的时候从来没看过,看的是一脸懵逼,因此差了一点资料理解了一下使用方法,记录在此用以备忘。


一、在定义函数时参数使用*

1.1 定义时形参使用单*

举个例子:def test(*args): 意思是把传入的参数都装在元组args中。 调用时使用test(1,2,3)就相当于传入了一个args=(1,2,3)的元组。

1.2 定义时形参使用双*

举个例子:def test(**kwargs): kwargs是关键字参数的意思,意思是把传入的参数转换为字典kwargs中。 调用时使用test(a=1,b=‘two’,c=‘c3’)相当于传入了一个kwargs={‘a’:1,‘b’:‘two’,c:‘c3’}的字典。


二、在调用函数时参数使用*

首先定义一个函数 def test(a,b,c,d):

2.1 调用时实参使用单*

举个例子:test(*args)

意思是把元组args中每个元素当作位置参数传入函数中。 假设args=(1,2,3,4) 调用时使用test(*args)就相当于test(a=1,b=2,c=3,d=4)

2.2 调用时实参使用双*

举个例子:test(**kwargs)

意思是把字典kwargs中每个元素当作关键字参数传入函数中。 假设kwargs={‘a’:1,‘b’:2,‘c’:3,‘d’:4} 调用时使用test(**kwargs)相当于test(a=1,b=2,c=3,d=4) 注释:根据我的理解,如果调用时kwargs中关键字和定义时不完全一致的话会报错,但是不知道是不是这样,希望各位大佬给个解答。


三、个人小结

一般比较常见的还是作为形参使用*和**,前者用作取元组,后者用于取字典。 作为实参使用时,前者用来传元组,后者用来传字典。 作为形参时,**必须放在最后面,否则会把定义的别的关键字给吞了。 最后放一段代码帮助理解。

def test(a,*args,**kwargs): print a print args print kwargs test(1,2,3,d='4',e=5) 输出结果: 1 (2, 3) {'e': 5, 'd': '4'}
最新回复(0)