代碼取自pythoncookbook第三版第四頁(yè)1.2.3代碼如下:
records =[
('foo', 1, 2),
('batr', 'hello'),
('foo', 3 ,4),
]
def do_foo(x,y):
print('foo', x ,y)
def do_bar(s):
print('bar', s)
for tag, *args in records:
if tag == 'foo':
do_foo(*args)
elif tag == 'bar':
do_bar(*args)
返回值如下:
foo 1 2
foo 3 4
代碼的原理不是很明白,請(qǐng)高人解釋一下,謝謝!
在 Python 中,函數(shù)用 *args 來(lái)獲取不確定數(shù)量的參數(shù)算是一種經(jīng)典寫(xiě)法。
在 Python 3 中,這個(gè)概念唄擴(kuò)展到了平行賦值中:
>>> a, b, *rest = range(5)
>>> a, b, * rest
(0, 1, [2, 3, 4])
>>> a, b, *rest = range(3)
>>> a, b, rest
(0, 1, [2])
>>> a, b, *rest = range(2)
>>> a, b, rest
(0, 1, [])
在平行賦值中, * 前綴只能用在一個(gè)變量名前面,但是這個(gè)變量可以出現(xiàn)在賦值表達(dá)式的任意位置:
>>> a, *body, c, d = range(5)
>>> a, body, c, d
(0, [1, 2], 3, 4]
>>> *head, b, c, d = range(5)
([0, 1], 2, 3, 4]我猜想你的困惑可能是為什么:bar hello結(jié)果沒(méi)有出現(xiàn)?
因?yàn)槟愕膔ecords第二項(xiàng)寫(xiě)錯(cuò)了: ('batr', 'hello') 應(yīng)該是 ('bar', 'hello'),
In [1]: records =[
...: ('foo', 1, 2),
...: ('bar', 'hello'),
...: ('foo', 3 ,4),
...: ]
...: def do_foo(x,y):
...: print('foo', x ,y)
...:
...: def do_bar(s):
...: print('bar', s)
...:
...: for tag, *args in records:
...: if tag == 'foo':
...: do_foo(*args)
...: elif tag == 'bar':
...: do_bar(*args)
...:
foo 1 2
bar hello
foo 3 4
簡(jiǎn)單的解釋就是:
*arg分解tag后面的幾個(gè)元素,
比方說(shuō)列表record中的三個(gè)元素分別是:('foo', 1, 2) ('bar', 'hello') ('foo', 3 ,4)
tag為'foo',后面的元素(1,2)為 *args,因此打印 foo 1 2
tag為'bar',后面的元素'hello'為*args,因此打印 bar hello
tag為'foo',后面的元素(3,4)為*args,因此打印 foo 3 4
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。