日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可迭代对象、迭代器与生成器

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可迭代对象、迭代器与生成器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

迭代器

什么是迭代器
迭代指的是一個重復的過程,且不是單純的重復,每次重復都基于上次的結果。
迭代器指的是迭代取值的工具,該工具的特點是可以不依賴于索引取值。
為什么用迭代器
為了找出一種通用的&可以不依賴于索引的迭代取值方式。
如何用迭代器
可迭代的對象:但凡內置有__iter__方法得當對象都稱之為可迭代的對象
迭代器對象:既內置有__iter__,又內置__next__方法
關于__iter__方法:

  • 調用可迭代對象的__iter__會得到一個迭代器對象
  • 調用迭代器對象的__iter__會得到迭代器本身
  • 迭代器的優缺點
    有點

  • 提供了一種通用的&可以不依賴于索引的迭代取值方式
  • 同一時刻在內存中只有一個值,更加節省內存
    缺點
  • 取指定值時不如索引靈活,并且迭代器是一次性的,只能往前取值
  • 無法預知迭代器數據的個數
  • 可迭代的對象
    str、list、tuple、dict、set、文件對象
    迭代器對象
    文件對象是python定義好的迭代器對象

    可迭代對象如何轉化為迭代器對象

    調用可迭代對象內置的__iter__方法會得到一個返回值,該返回值就是對應的迭代器對象

    for循環

    for循環準確的說應該是迭代器循環,原理如下:

  • 先調用in后面可迭代對象的__iter__方法,得到迭代器對象
  • 執行迭代器的__next__方法得到一個返回值,賦值給每次循環的變量,運行循環體代碼
  • 循環往復,直到迭代器取值完畢拋出異常然后捕捉異常結束循環

    自定義迭代器

    定義一個迭代器必須要有yield關鍵字
    在函數內但凡包含有yield關鍵字,運行到yield時,會暫停運行并會得到一個返回值,該返回值成為生成器對象,生成器本質就是迭代器
    yield
  • 提供一種自定義迭代器的解決方案
  • yield可用于返回值
    yield和return的異同
    相同點:都可以用于返回值
    不同點:yield可以暫停函數,yield可以返回多個值,而return只能返回一次值且會終止函數的運行。
    一個自定義的生成器
  • def my_range(start,stop,step=1):while start<stop:yield startstart+=step res=my_range(1,5,2) print(next(res)) print(next(res))

    轉載于:https://www.cnblogs.com/zuanzuan/p/9720875.html

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的可迭代对象、迭代器与生成器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。