Python中由于沒(méi)有指針的概念,所以 * 和 ** 有自己特殊的定義。
下面就分別介紹下,這兩個(gè)符號(hào),在Python中的應(yīng)用。
首先是 *號(hào),我們通過(guò)以下例子來(lái)解釋其用法。
- 代表list中的剩余值
a,b,*c = ['CANoe', 'SPY3', 'TSMaster', 'PCAN']
#這里的*c 實(shí)際代表['TSMaster', 'PCAN']類(lèi)型為list
- 代表多個(gè)不包含關(guān)鍵字的函數(shù)參數(shù)
tools = ['CANoe', 'SPY3', 'TSMaster', 'PCAN']
def myfunc(tools1,tools2,tools3,tools4):
print(tools1,tools2,tools3,tools4)
myfunc(*tools)
#打印 'CANoe', 'SPY3', 'TSMaster', 'PCAN'
接一下來(lái)是 **號(hào)。
- 代表多個(gè)包含關(guān)鍵字的函數(shù)參數(shù),比如:
busname ={"bus2":'CAN', "bus1":'CANFD'}
def myfunc(bus1="CAN", bus2="CANFD"):
print(bus1,bus2)
myfunc(**busname)
#打印 'CANFD', 'CAN'
這里需要注意, 字典中的鍵名需要和參數(shù)名完全一致,但順序可以自由交換。
- 做函數(shù)參數(shù)使用
def myfunc(arg, *args, **dictargs):
print ("arg: ", arg)
#打印args
for value in args:
print ("other args:", value)
#打印dict類(lèi)型的不定長(zhǎng)參數(shù) args
for key in dictargs:
print ("dictargs:" + key + ":" + bytes(dictargs[key]))
myfunc(2022,'YFT','SWV',name='pudding',age='Forever 18')
當(dāng) * 和 ** 寫(xiě)在函數(shù)參數(shù)部分時(shí),Python會(huì)自動(dòng)將傳入?yún)?shù)與之匹配,這樣參數(shù)的數(shù)量和關(guān)鍵字就不受限制了,函數(shù)體內(nèi)必須去定義和解析這些參數(shù)。
歸結(jié)起來(lái),我們可以把list或dict比作一個(gè)壓縮包,而 * 和 ** 則是一個(gè)解壓工具,可以快捷的將其中的內(nèi)容展開(kāi)。