python學習-38迭代器和生成器

迭代器和生成器



---- 迭代器協議和for循環工作機制

1.迭代器協議:對象必須提供一個next方法,執行該方法要么返回迭代中的下一項,要么引起一個Stoplteration異常,以終止迭代(只能往后走,不能往前走)
2.可迭代對象:實現了迭代器的對象(如何實現:對象內部定義一個_iter_()方法)
3.協議是一種約定,可迭代對象實現了迭代器協議,python的內部工具(如:for循環,sum,min,max函數等)使用迭代器協議訪問對象。
dic ={'a':1,'b':2}
iter_d=dic.__iter__()              # 相當于for循環的迭代。 列表,字典,文件等有_iter_()方法的都可以
print(iter_d.__next__())

for循環的本質:循環所有對象,全部都是使用的迭代協議

-for循環機制也可以用while表示

a=[1,2,3,4,5]
iter_a=a.__iter__()
while True:try:print(iter_a.__next__())except StopAsyncIteration:print('迭代完畢,循環終止')break

-迭代器原理

1.

a = [1,2,3,4,5]
iter_a=a.__iter__()          # 切換為迭代器形式print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())
print(iter_a.__next__())

運行結果:

1
2
3
4
5Process finished with exit code 0

2.用next方法

a = [1,2,3,4,5]
iter_a=a.__iter__()          # 切換為迭代器形式print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))
print(next(iter_a))

?

運行結果是一樣的

?

只要遵循迭代器協議,那就是可迭代對象。

?

?

?

------ 初識生成器

?

可以理解為一種數據類型。這種數據類型自動實現了迭代器協議(其他的數據類型需要調用自己內置的_iter_方法),所以生成器就是可迭代對象。

?

--生成器表現形式:

1.生成器函數

?

def test():yield 1
g=test()
print(g)      # 生成器內存地址
print(g.__next__())

運行結果:

<generator object test at 0x0000023EBB890B10>1Process finished with exit code 0

?

2.生成器表達式

res=(i for i in range(11))
print(res.__next__())
print(res.__next__())

運行結果:

0
1Process finished with exit code 0

?

ps:

三元表達式

name='john'
res='1' if name == 'john' else'2'  #如果name='john',返回1,不是則返回2
print(res)

運行結果:

1Process finished with exit code 0

?

轉載于:https://www.cnblogs.com/liujinjing521/p/11193880.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448300.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448300.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448300.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載]基于Aaf的數據拆分

(本文適于使用Aaf框架的開發者閱讀) 1. 基本原理 在Aaf框架中&#xff0c;“對象”和“存儲”的關系映射有一個關鍵的紐帶StorageAlias&#xff0c;即“存儲別名”&#xff0c;同樣一個類型&#xff0c;在不同的存儲別名下&#xff0c;可以自由映射到任意存儲“位置”。  “位…

靠邊停車

什么是靠邊停車 靠邊停車是大路考中一個指標很明確的考核項目&#xff0c;要求學員駕駛車輛使之靠邊停下。 操作方法 1、停車前&#xff0c;要通過內、外后視鏡觀察后方和右側交通情況&#xff0c;開右轉向燈。 2、適量踩下制動踏板。 3、向右轉動方向盤(第一把輪…

RuntimeException 和 Exception 區別、異常的子父級關系

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.java 將所有的錯誤封裝為一個對象&#xff0c;其根本父類為Throwable, Throwable 有兩個子類&#xff1a;Error 和 Exception。 2.Err…

通過路口

操作方法 1、讓車減速 2、觀察路口的情況 3、通過路口 注意事項 1、不要搶黃燈 2、不要開英雄車&#xff0c;即紅燈亮起時通過路口的最后一輛車 3、控制車速&#xff0c;控制在50km/h以下 4、看到左右車都減速時&#xff0c;也馬上減速 5、要左轉…

C語言筆記(關鍵字)

gdb調試 gcc 源程序 -g&#xff1b;加gdb調試信息gdb可執行程序&#xff1b;&#xff08;gdb調試&#xff09;l&#xff08;ist&#xff09;&#xff1a;查看源碼&#xff0c;按一下從main開始10行以此往后l n&#xff1a;查看n處上下10行的源碼run&#xff1a;運行程序b&…

自定義 Git - Git 鉤子 (自動部署)

Git 鉤子 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 和其它版本控制系統一樣&#xff0c;Git 能在特定的重要動作發生時觸發自定義腳本。 有兩組這樣的鉤子&#xff1a;客戶端的和…

變更車道

操作方法 1、觀察與判斷觀察車輛后方、側方和準備變更的車道上的交通流情況&#xff1b; 2、確認安全后&#xff0c;打開轉向指示燈示意&#xff0c;并再次通過后視鏡觀察兩側道路上有無車輛超越&#xff0c;確認準備駛入的車道是否允許留有安全距離&#xff1b; 3…

C語言筆記(符號)

注釋符號 幾個似非而是的注釋問題 例子&#xff1a; (A) int / * ... * /i; (B) char * s "abcdefgh //hijklmn"; (C) //Is it a \valid comment? (D) in/ * ... * /t i; 我們知道C語言里可以有兩種注釋方式&#xff1a;“/* */” 和 “ // ”。那么上面幾條…

直線行駛

考核要求 保證跟車安全速度和安全距離&#xff0c;了解車輛行駛速度、注意觀察路面狀況&#xff0c;采取相應措施。不能有左右擺動、方向不穩的現象。 考試口訣 一.尋找中心 二.雙眼鎖定本車能通行的中心 三.心理想著走中間 四.雙眼從本車前面最突出點的.中心…

java 命令: jmap 命令使用 ( 查看內存使用、設置 )

jdk安裝后會自帶一些小工具&#xff0c;jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java進程(或核心文件、遠程調試服務器)的共享對象內存映射或堆內存細節。 jmap命令可以獲得運行中的jvm的堆的快照&#xff0c;從而可以離線分析堆&#xff0c;以檢查內存泄漏&am…

第一節 接口概述 [轉貼]

接口&#xff08;interface&#xff09;用來定義一種程序的協定。實現接口的類或者結構要與接口的定義嚴格一致。有了這個協定&#xff0c;就可以拋開編程語言的限制&#xff08;理論上&#xff09;。接口可以從多個基接口繼承&#xff0c;而類或結構可以實現多個接口。接口可以…

獲取本機用戶名、MAC地址、IP地址、硬盤ID、CPU序列號、系統名稱、物理內存

我們在利用C#開發桌面程序&#xff08;Winform&#xff09;程序的時候&#xff0c;經常需要獲取一些跟系統相關的信息&#xff0c;例如用戶名、MAC地址、IP地址、硬盤ID、CPU序列號、系統名稱、物理內存等。 首先需要引入命名空間&#xff1a; using System.Management; //…

只用一套解決方案,就可解決80%的交通物流行業信息難題

行業背景 新中國成立70多年來&#xff0c;中國交通運輸總體上已經形成了多節點、全覆蓋的綜合運輸網絡&#xff0c;“五縱五橫”綜合運輸大通道基本貫通&#xff0c;一大批綜合客運、貨運樞紐站場&#xff08;物流園區&#xff09;投入運營&#xff0c;取得了一系列矚目成果&am…

起步

什么是開車起步 起步&#xff0c;即發動汽車&#xff0c;使汽車開始走動。 操作方法 1、“踩”離合器 2、“掛”一檔 3、“打”左轉向燈&#xff08;提醒后車駕駛員注意安全避讓&#xff09; 4、“鳴”號&#xff08;引起車輛周圍的行人或機動車等注意&…

Linux 使用 jstat 命令查看 jvm 的 GC 情況

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Options&#xff0c;選項&#xff0c;我們一般使用 -gcutil 查看gc情況 vmid&#xff0c;VM的進程號&#xff0c;即當前運行的java進程號…

WKWebview加載本地圖片時出現路徑問題

出現問題情況是&#xff1a;將uiwebview換成wkwebview之后&#xff0c;之前將webview上那些圖片放回本地下載后緩存的圖片沒辦法在webview上找到&#xff0c;最后排查出原因是&#xff0c;wkwebview需要將圖片和網頁文件放在同個路徑下。 具體實現方法如下(獲取圖片緩存的路徑&…

上車準備

上車準備一 1、環視車輛、確保安全。 2、調整駕駛座。身體坐正&#xff0c;雙手向前伸直&#xff0c;以手腕剛好能放在方向盤上為準。左腳擱在離合器上&#xff0c;右腳擱在剎車上&#xff0c;小腿和大腿成90度。左腳可以輕松把離合器踩到底。身體離方向盤20—25厘米。 …

C++復習

register關鍵字請求“編譯器”將局部變量存儲于寄存器中 C語言中無法取得register變量地址 在C中依然支持register關鍵字 1、C編譯器有自己的優化方式&#xff0c;不使用register也可能做優化 2、C中可以取得register變量的地址 C編譯器發現程序中需要取register變量的地址…

Docker 方式安裝 Nginx 、阿里云服務器上裝 Ngnix

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 非 Docker 方式安裝&#xff0c;直接 Linux 安裝見另一文&#xff1a;Linux 上 安裝 nginx 、阿里云服務器上安裝 nginx 1. 直接從鏡像倉…

C#實現A*算法

理解A*尋路算法具體過程 這兩天研究了下 A* 尋路算法, 主要學習了這篇文章, 但這篇翻譯得不是很好, 我花了很久才看明白文章中的各種指代. 特寫此篇博客用來總結, 并寫了尋路算法的代碼, 覺得有用的同學可以看看. 另外因為圖片制作起來比較麻煩, 所以我用的是原文里的圖片. 當…