大家是不是了解过“**”与“*”很多内容,认为这两个小小的操作符,居然用法这么多的不同,其实关于这个内容,大家只要掌握以下四部分,就掌握全部了哦~
真正意义上有四类用法即:
算数运算,函数形参,函数实参,序列解包
算数运算
**=乘方 >>>2*510>>>2**532
函数形参
*args 和 **kwargs 主用于函数定义。
你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。*(星号) 才是必须的. 你也可以写成 *ar 和 **k 。而写成 *args 和**kwargs 只是一个通俗的命名约定。
python函数传递参数的方式有两种:
位置参数(positional argument)
关键词参数(keyword argument)
*args 与 **kwargs 的区别,都是 python 中的可变参数:
*args=任何多个无名参数,它本质是一个 tuple
**kwargs =关键字参数,它本质上是一个 dict
示例:
同使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。
>>>deffun(*args,**kwargs):...print('args=',args)...print('kwargs=',kwargs)...>>>fun(1,2,3,4,A='a',B='b',C='c',D='d')args=(1,2,3,4)kwargs={'A':'a','B':'b','C':'c','D':'d'}
*args
>>>deffun(name,*args):...print('你好:',name)...foriinargs:...print("你的宠物有:",i)...>>>fun("Geek","dog","cat")你好:Geek你的宠物有:dog你的宠物有:cat
**kwargs
>>>deffun(**kwargs):...forkey,valueinkwargs.items():...print("{0}喜欢{1}".format(key,value))...>>>fun(Geek="cat",cat="box")Geek喜欢catcat喜欢box
函数实参
如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用:
>>>deffun(data1,data2,data3):...print("data1:",data1)...print("data2:",data2)...print("data3:",data3)...>>>args=("one",2,3)>>>fun(*args)data1:onedata2:2data3:3>>>kwargs={"data3":"one","data2":2,"data1":3}>>>fun(**kwargs)data1:3data2:2data3:one
序列解包
这里只列出一个例子,序列解包没有 **。
>>>a,b,*c=0,1,2,3>>>a0>>>b1>>>c[2,3]
大家掌握上面4种就可以了哦~收藏消化起来吧~如需了解更多python实用知识,点击进入PyThon学习网教学中心。