本章将详细介绍python中*与**操作符的使用场景以及注意事项,并给出示例demo。1.作为运算符 *表示乘法运算 **表示乘方运算 代码示例:#1.***作为运算符print('\n------运算符测试------')a=3*2#乘法b=3**2#乘方print("a=",a)#输出6print("b=",b)#输出9'运行运行执行结果:2.作为函数形参 *在python中做函数形参,表示的是一个可变长度的序列,类型为tuple,即将所有参数放入一个元组(tuple)中,被函数使用。 **在python中做函数形参,表示的是一个可变长度的序列,类型为dict,即将所有的关键字参数,放入一个字典(dict)中,被函数使用。 *与**作为形参同时出现时,**必须在最后面. 代码示例:#2.作为形参print('\n------形参测试------')defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#调用P1=printx(1,2,key1=1,key2=2)'运行运行代码执行结果:3.作为函数实参 在list/tuple/set前加*,会把序列中的所有元素解包成位置参数 在dict前加*,会把dict的键变成位置参数;加**,把字典的键值对变成关键字参数。 A=(a,b,c) B={“key1” :1,“key2”:2}  3=Printx(*A) #等同于printx(a,b,c)  3=Printx(*A,*B) #等同于printx(a,b,c,key1,key2)  3=Printx(*A,**B) #等同于printx(a,b,c,key1=1,key2=2) 代码示例:defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#3.实参测试print('\n------实参测试------')A=(1,2,3)K1={'key1':1,'key2':2}P2=printx(*A,*K1)#注意在dict前加一个*,只把dict的'键'作为位置参传递print('')P3=printx(*A,**K1)'运行运行执行结果:4.作为序列解包 注意序列解包时*解包为list,不再是tuple了 1.先对不带*的变量解包,剩余的数据在划分给带*的变量 x,y,*z=1,2,3,4,5#等同于x=1,y=2,z=[3,4,5] X,*y,z=1,2,3,4,5#等同于x=1,y=[2,3,4],z=5 2.如果左值比右值要多,那么带*的变量默认为空列表 x,y,*z=1,2#等同于x=1,y=2,z=[] x,*y,z=1,2 #x=1,y=[],z=2 3.单*只解包dict的键,**解包dict键值对 key_A={‘key1’:1,‘key2’:2} key_B={“key3” :3,“key4”:4} X={*key_A} #等同于x={‘key1’,’key2’} X={**key_A} #等同于x={‘key1’:1,‘key2’:2} X={**key_A,**key_B}#等同于组包,x={‘key1’:1,‘key2’:2,“key3” :3,“key4”:4} 注意:组包时,若键相同,则用后面的键值替换前面的,即最终合并后,为后面的键值对。代码示例: #4.解包测试print('\n------解包测试------')x,y,*z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2print("x={0},y={1},z={2}".format(x,y,z))x,y,*z=1,2print("x={0},y={1},z={2}".format(x,y,z))#解包&组包K2={'key3':3,'key4':4}K3={'key5':5,'key6':6}k4={**K2,**K3}print("k4=",k4)'运行运行 执行结果:注意 在Python中默认的函数参数顺序是:必选参数、默认参数、*args和**kwargs。如下所示: def testFunc(name,age=10,*agrs,**kwargs): pass 整体测试代码:importtorch#1.***作为运算符print('\n------运算符测试------')a=3*2#乘法b=3**2#乘方print("a=",a)#输出6print("b=",b)#输出9#2.作为形参print('\n------形参测试------')defprintx(*arg1,**arg2):print("arg1={0},type:{1}".format(arg1,type(arg1)))print("arg2={0},type:{1}".format(arg2,type(arg2)))#调用P1=printx(1,2,key1=1,key2=2)#3.实参测试print('\n------实参测试------')A=(1,2,3)K1={'key1':1,'key2':2}P2=printx(*A,*K1)#注意在dict前加一个*,只把dict的'键'作为位置参传递print('')P3=printx(*A,**K1)#4.解包测试print('\n------解包测试------')x,y,*z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2,3,4,5print("x={0},y={1},z={2}".format(x,y,z))x,*y,z=1,2print("x={0},y={1},z={2}".format(x,y,z))x,y,*z=1,2print("x={0},y={1},z={2}".format(x,y,z))#解包&组包K2={'key3':3,'key4':4}K3={'key5':5,'key6':6}k4={**K2,**K3}print("k4=",k4)运行结果:
|