Python中由于没有指针的概念,所以 * 和 ** 有自己特殊的定义。
下面就分别介绍下,这两个符号,在Python中的应用。
首先是 *号,我们通过以下例子来解释其用法。
- 代表list中的剩余值
a,b,*c = ['CANoe', 'SPY3', 'TSMaster', 'PCAN']
#这里的*c 实际代表['TSMaster', 'PCAN']类型为list
- 代表多个不包含关键字的函数参数
tools = ['CANoe', 'SPY3', 'TSMaster', 'PCAN']
def myfunc(tools1,tools2,tools3,tools4):
print(tools1,tools2,tools3,tools4)
myfunc(*tools)
#打印 'CANoe', 'SPY3', 'TSMaster', 'PCAN'
接一下来是 **号。
- 代表多个包含关键字的函数参数,比如:
busname ={"bus2":'CAN', "bus1":'CANFD'}
def myfunc(bus1="CAN", bus2="CANFD"):
print(bus1,bus2)
myfunc(**busname)
#打印 'CANFD', 'CAN'
这里需要注意, 字典中的键名需要和参数名完全一致,但顺序可以自由交换。
- 做函数参数使用
def myfunc(arg, *args, **dictargs):
print ("arg: ", arg)
#打印args
for value in args:
print ("other args:", value)
#打印dict类型的不定长参数 args
for key in dictargs:
print ("dictargs:" + key + ":" + bytes(dictargs[key]))
myfunc(2022,'YFT','SWV',name='pudding',age='Forever 18')
当 * 和 ** 写在函数参数部分时,Python会自动将传入参数与之匹配,这样参数的数量和关键字就不受限制了,函数体内必须去定义和解析这些参数。
归结起来,我们可以把list或dict比作一个压缩包,而 * 和 ** 则是一个解压工具,可以快捷的将其中的内容展开。
网友评论