Python列表推導(dǎo)式與生成器用法分析
本文實(shí)例講述了Python列表推導(dǎo)式與生成器用法。分享給大家供大家參考,具體如下:
1. 先看兩個(gè)列表推導(dǎo)式
def t1(): func1 = [lambda x: x*i for i in range(10)] result1 = [f1(2) for f1 in func1] print result1 def t2(): func2 = [lambda x, i=i: x*i for i in range(10)] result2 = [f2(2) for f2 in func2] print result2
上面是兩個(gè)列表推導(dǎo)式,里面包含有lambda表達(dá)式。輸出結(jié)果分別為:
[18, 18, 18, 18, 18, 18, 18, 18, 18, 18]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
2. 為什么結(jié)果會(huì)不同
在上面的例子中,列表解析會(huì)生成一系列的函數(shù)對(duì)象。例如
def func(): pass
會(huì)產(chǎn)生一個(gè)名為func的函數(shù)對(duì)象。注意不同于func(),加上小括號(hào)以后,此時(shí)變?yōu)榱苏{(diào)用函數(shù)對(duì)象。
函數(shù)對(duì)象只有在調(diào)用的時(shí)候才開(kāi)始對(duì)內(nèi)部的變量進(jìn)行引用。在t1()方法中,對(duì)i來(lái)說(shuō), 當(dāng)函數(shù)對(duì)它引用的時(shí)候, 它已經(jīng)變?yōu)?, 所以10個(gè)函數(shù)都引用了i=9。
而對(duì)于t2()方法來(lái)說(shuō),lambda函數(shù)相當(dāng)于變成接受兩個(gè)參數(shù)了,所以返回了不一樣的結(jié)果。
3. 另外的方式
def t3(): func3 = (lambda x: x*i for i in range(10)) result3 = [f3(2) for f3 in func3] print result3
上面的代碼,輸出的結(jié)果為:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
此時(shí),相當(dāng)于把列表推導(dǎo)式變成了生成器,結(jié)果又不一樣了!
對(duì)于生成器, 只有你需要的時(shí)候它才會(huì)求值, 這也是和列表解析式的區(qū)別, 列表解析式只要你運(yùn)行, 馬上就把i變?yōu)榱?, 可是生成器不會(huì), 當(dāng)你調(diào)用第一個(gè)函數(shù)的時(shí)候, 他把相應(yīng)的i求出來(lái), 然后停止, 等你下一次調(diào)用, 這個(gè)就完美符合我們的預(yù)期了.
更多關(guān)于Python相關(guān)內(nèi)容可查看本站專題:《Python列表(list)操作技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
- Python中的推導(dǎo)式使用詳解
- Python列表推導(dǎo)式的使用方法
- 基于Python列表解析(列表推導(dǎo)式)
- python 列表推導(dǎo)式使用詳解
- Python列表推導(dǎo)式詳情
- Python列表推導(dǎo)式詳解
- python之列表推導(dǎo)式的用法
- Python基礎(chǔ)知識(shí)之推導(dǎo)式詳解
- Python學(xué)習(xí)筆記之列表推導(dǎo)式實(shí)例分析
- python列表推導(dǎo)式的原理及使用方法
- Python列表推導(dǎo)式與生成器表達(dá)式用法示例
- python進(jìn)階之推導(dǎo)式的實(shí)現(xiàn)
相關(guān)文章
Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法
本文匯總整理了Python標(biāo)準(zhǔn)庫(kù)itertools的使用方法,并提供簡(jiǎn)單應(yīng)用示例;如果還不能滿足你的要求,歡迎加入補(bǔ)充2020-01-01
pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn)
這篇文章主要介紹了pandas實(shí)現(xiàn)datetime64與unix時(shí)間戳互轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
python中pandas輸出完整、對(duì)齊的表格的方法
今天使用python計(jì)算數(shù)據(jù)相關(guān)性,但是發(fā)現(xiàn)計(jì)算出的表格中間好多省略號(hào),而且也不對(duì)齊。怎么解決這個(gè)問(wèn)題,下面小編給大家?guī)?lái)了python中pandas如何輸出完整、對(duì)齊的表格,感興趣的朋友一起看看吧2021-10-10
Pytorch mask_select 函數(shù)的用法詳解
今天小編就為大家分享一篇Pytorch mask_select 函數(shù)的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python提效小工具之統(tǒng)計(jì)xmind用例數(shù)量(源碼)
這篇文章主要介紹了python提效小工具之統(tǒng)計(jì)xmind用例數(shù)量,利用python開(kāi)發(fā)小工具,實(shí)現(xiàn)同一份xmind文件中一個(gè)或多個(gè)sheet頁(yè)的用例數(shù)量統(tǒng)計(jì)功能,需要的朋友可以參考下2022-10-10

