欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python列表推導(dǎo)式與生成器用法分析

 更新時間:2018年08月02日 09:32:08   作者:bitcarmanlee  
這篇文章主要介紹了Python列表推導(dǎo)式與生成器用法,結(jié)合實例形式分析了列表推導(dǎo)式、生成器的原理、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下

本文實例講述了Python列表推導(dǎo)式與生成器用法。分享給大家供大家參考,具體如下:

1. 先看兩個列表推導(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

上面是兩個列表推導(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é)果會不同

在上面的例子中,列表解析會生成一系列的函數(shù)對象。例如

def func():
  pass

會產(chǎn)生一個名為func的函數(shù)對象。注意不同于func(),加上小括號以后,此時變?yōu)榱苏{(diào)用函數(shù)對象。

函數(shù)對象只有在調(diào)用的時候才開始對內(nèi)部的變量進(jìn)行引用。在t1()方法中,對i來說, 當(dāng)函數(shù)對它引用的時候, 它已經(jīng)變?yōu)?, 所以10個函數(shù)都引用了i=9。

而對于t2()方法來說,lambda函數(shù)相當(dāng)于變成接受兩個參數(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]

此時,相當(dāng)于把列表推導(dǎo)式變成了生成器,結(jié)果又不一樣了!

對于生成器, 只有你需要的時候它才會求值, 這也是和列表解析式的區(qū)別, 列表解析式只要你運(yùn)行, 馬上就把i變?yōu)榱?, 可是生成器不會, 當(dāng)你調(diào)用第一個函數(shù)的時候, 他把相應(yīng)的i求出來, 然后停止, 等你下一次調(diào)用, 這個就完美符合我們的預(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文件與目錄操作技巧匯總

希望本文所述對大家Python程序設(shè)計有所幫助。

相關(guān)文章

  • Python中的閉包與裝飾器的用法詳解

    Python中的閉包與裝飾器的用法詳解

    這篇文章主要介紹了Python中的閉包與裝飾器的用法詳解,裝飾器本質(zhì)上是一個Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動的前提下增加額外功能,裝飾器的返回值也是一個函數(shù)對象,需要的朋友可以參考下
    2023-07-07
  • OpenCV半小時掌握基本操作之高斯雙邊

    OpenCV半小時掌握基本操作之高斯雙邊

    這篇文章主要介紹了OpenCV基本操作之高斯雙邊,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python使用plt.boxplot() 參數(shù)繪制箱線圖

    Python使用plt.boxplot() 參數(shù)繪制箱線圖

    這篇文章主要介紹了Python使用plt.boxplot() 參數(shù)繪制箱線圖 ,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • python 實現(xiàn)數(shù)組list 添加、修改、刪除的方法

    python 實現(xiàn)數(shù)組list 添加、修改、刪除的方法

    下面小編就為大家分享一篇python 實現(xiàn)數(shù)組list 添加、修改、刪除的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 如何不用安裝python就能在.NET里調(diào)用Python庫

    如何不用安裝python就能在.NET里調(diào)用Python庫

    這篇文章主要介紹了如何不用安裝python就能在.NET里調(diào)用Python庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • 終于搞懂了Keras中multiloss的對應(yīng)關(guān)系介紹

    終于搞懂了Keras中multiloss的對應(yīng)關(guān)系介紹

    這篇文章主要介紹了終于搞懂了Keras中multiloss的對應(yīng)關(guān)系介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python Asyncio調(diào)度原理詳情

    Python Asyncio調(diào)度原理詳情

    這篇文章主要介紹了Python Asyncio調(diào)度原理詳情,Python.Asyncio是一個大而全的庫,它包括很多功能,而跟核心調(diào)度相關(guān)的邏輯除了三種可等待對象外,還有其它一些功能,它們分別位于runners.py,base_event.py,event.py三個文件中
    2022-06-06
  • python 詳解如何寫flask文件下載接口

    python 詳解如何寫flask文件下載接口

    Flask是一個使用 Python 編寫的輕量級 Web 應(yīng)用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎則使用 Jinja2 。Flask使用 BSD 授權(quán)。Flask也被稱為 "microframework" ,因為它使用簡單的核心,用 extension 增加其他功能。Flask沒有默認(rèn)使用的數(shù)據(jù)庫、窗體驗證工具
    2021-10-10
  • pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明

    pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明

    這篇文章主要介紹了pytorch中Tensor.to(device)和model.to(device)的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python實現(xiàn)一行輸入多個值和一行輸出多個值的例子

    python實現(xiàn)一行輸入多個值和一行輸出多個值的例子

    今天小編就為大家分享一篇python實現(xiàn)一行輸入多個值和一行輸出多個值的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07

最新評論