irpas技术客

【python】——Python中的*和**的作用和含义_Kadima°_python中的**是什么意思

网络 8143

Python中的 * 和 ** 的作用和含义

python中的*和**被称为打包和解包参数,主要作用是能够让函数支持任意数量的参数,但是在函数定义和调用中,有着不同的使用场景,具体看下面的例子

打包参数

作为打包参数时,一般在函数形参定义时使用

的作用:在调用函数时,将传给函数的所有位置的实参收集到一个元组中,并将该元组作为一个整体赋值给函数形参 def func(*args): print(args) >>>func(1,2,3,4) (1,2,3,4)

**的作用:在调用函数时,将传给函数的所有位置的实参收集到一个字典中,并将该字典赋值给形参

def func(**kwargs): print(kwargs) >>>func(a=1,b=2) {'a':1,'b':2} 解包参数

作为解包参数时,一般在函数实参传入时使用 *的作用:在函数调用时,*能够将list或元组解包成不同的参数

def func(a,b,c,d): print(a,b,c,d) >>> args = (1,2,3,4) >>> func(*args) 1 2 3 4 >>> args = [1,2,3,4] >>> func(*args) 1 2 3 4

**的作用:在函数调用中,**会将已经打包好的字典,解包成独立的key-value对,并将解包后的参数传给函数形参

def func(a,b,c,d): print(a,b,c,d) >>> kwargs = {"a":1,"b":2,"c":3,"d":4} >>>func(**kwargs) 1 2 3 4 经典问题:func(*argc,**kwargc)中 *argc与 **kwargc的作用是什么?

有个上面的铺垫,显然这里*argc是tuple的打包参数,**kwargc是dict的打包参数 举个例子

def foo(*args,**kwargs): print ('args=',args) print ('kwargs=',kwargs) print ('**********************') if __name__=='__main__': foo(1,2,3) foo(a=1,b=2,c=3) foo(1,2,3,a=1,b=2,c=3) foo(1,'b','c',a=1,b='b',c='c') args= (1, 2, 3) kwargs= {} ********************** args= () kwargs= {'a': 1, 'b': 2, 'c': 3} ********************** args= (1, 2, 3) kwargs= {'a': 1, 'b': 2, 'c': 3} ********************** args= (1, 'b', 'c') kwargs= {'a': 1, 'b': 'b', 'c': 'c'} **********************

增加难度的例子

def foo(*args,**kwargs): print ('args=',args) print ('kwargs=',kwargs) print ('**********************') v = (1,2,4) d = {'a':1, 'b':12} # 需要注意当打包参数的输入本身就是一个整体的tuple或者tuple时,传给形参后其实是会再将其打包一次 foo(v) foo(d) foo(v,d)

输出

args= ((1, 2, 4),) kwargs= {} ********************** args= ({'a': 1, 'b': 12},) kwargs= {} ********************** args= ((1, 2, 4), {'a': 1, 'b': 12}) kwargs= {} **********************

再增加难度的例子 在函数定义时:*表示打包,在函数体内部时,*表示的其实是解包

def foo(*argc,**kwargc): # 未解包参数 print(argc) # 在函数体内解包后的参数 print(*argc) v = (1,2,4) d = {'a':1,'b':2} foo(v,d)

输出

((1, 2, 4), {'a': 1, 'b': 12}) (1, 2, 4) {'a': 1, 'b': 12}

再再再增加难度的例子 打包和解包参数并不能脱离函数而存在

c = {"name":'zhang',"age":2} >>> **c # 打包和解包参数不能单独使用 >>> "Name:{name},Age:{age}".format(**c) 'Name:zhang, Age:2'


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #python中的是什么意思 #Python中的 # #2