最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的迭代器和生成器詳解

 更新時(shí)間:2023年07月26日 10:06:22   作者:Looooking  
這篇文章主要介紹了Python中的迭代器和生成器詳解,生成器表達(dá)式是用來生成函數(shù)調(diào)用時(shí)序列參數(shù)的一種迭代器寫法,生成器對(duì)象可以遍歷或轉(zhuǎn)化為列表或元組等數(shù)據(jù)結(jié)構(gòu),但不能切片,需要的朋友可以參考下

可迭代對(duì)象(Iterable)

任何實(shí)現(xiàn)了 __iter__ 方法的對(duì)象都可以稱為可迭代對(duì)象。

class Fib:
    def __init__(self, n):
        self.prev = 0
        self.cur = 1
        self.n = n
    def __iter__(self):
        return self
fib = Fib(5)
import collections
print('fib is Iterable? ', isinstance(fib, collections.Iterable))
print('fib is Iterator? ', isinstance(fib, collections.Iterator))
print(next(fib))
fib is Iterable?  True
fib is Iterator?  False
Traceback (most recent call last):
  File "D:/MyProject/Python/insight-tools-rest/test.py", line 27, in <module>
    print(next(fib))
TypeError: 'Fib' object is not an iterator

迭代器(Iterator)

迭代器是用于進(jìn)行迭代操作的對(duì)象,它可以像列表一樣使用 for 迭代獲取其中的每一個(gè)元素。當(dāng)然,列表、字典屬于可迭代對(duì)象,但并不是迭代器。

要將列表、字典等常見的可迭代對(duì)象變成迭代器,需要使用 iter 或者 __iter__() 進(jìn)行作用:

l = [1, 2, 3]
d = {'a': 1, 'b': 2, 'c': 3}
print(type(l))
print(type(d))
l = l.__iter__()
d = iter(d)
print(type(l))
print(type(d))
<class 'list'>
<class 'dict'>
<class 'list_iterator'>
<class 'dict_keyiterator'>

迭代器與列表的區(qū)別在于,列表是一次性把所有的元素加載到內(nèi)存,迭代器則是使用延遲計(jì)算的方式返回元素,只有在調(diào)用 next 方法的時(shí)候才去計(jì)算并返回該元素,也即 call by need 的方式,for 循環(huán)本質(zhì)上也是不斷調(diào)用迭代器的 next 方法來進(jìn)行遍歷。

如果要將一個(gè)可迭代對(duì)象變成迭代器的話,還需要實(shí)現(xiàn)一個(gè) __next__ 方法:

class Fib:
    def __init__(self, n):
        self.prev = 0
        self.cur = 1
        self.n = n
    def __iter__(self):
        return self
    def __next__(self):
        if self.n > 0:
            value = self.cur
            self.cur += self.prev
            self.prev = value
            self.n -= 1
            return value
        else:
            raise StopIteration()
fib = Fib(5)
import collections
print('fib is Iterable? ', isinstance(fib, collections.Iterable))
print('fib is Iterator? ', isinstance(fib, collections.Iterator))
print([i for i in fib])

fib is Iterable?  True
fib is Iterator?  True
[1, 1, 2, 3, 5]

生成器(Generator)

普通函數(shù)一般使用 return 返回一個(gè)值,但在 Python 中還有一種函數(shù),用關(guān)鍵字 yield 來返回值,這種函數(shù)叫生成器。函數(shù)被調(diào)用時(shí)會(huì)返回一個(gè)生成器對(duì)象,生成器本質(zhì)上還是一個(gè)迭代器(特殊的迭代器,實(shí)現(xiàn)方式不一樣),因此在迭代操作中,生成器對(duì)象的行為和迭代器非常相似。下面是使用生成器實(shí)現(xiàn)的斐波那契數(shù)列:

def fib(n):
    prev = 0
    cur = 1
    while n > 0:
        yield cur
        n -= 1
        prev, cur = cur, cur + prev
        # tmp = prev
        # prev = cur
        # cur = cur + tmp
print([i for i in fib(5)])

[1, 1, 2, 3, 5]

當(dāng)然也可以使用 next 不斷去遍歷:

fib = fib(5)
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))
print(next(fib))

1
1
2
3
5

到此這篇關(guān)于Python中的迭代器和生成器詳解的文章就介紹到這了,更多相關(guān)迭代器和生成器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python對(duì)XML文件實(shí)現(xiàn)增刪改查操作

    Python對(duì)XML文件實(shí)現(xiàn)增刪改查操作

    這篇文章主要為大家詳細(xì)介紹了Python對(duì)XML文件進(jìn)行實(shí)現(xiàn)增刪改查操作的方法,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下
    2022-11-11
  • 關(guān)于pip install uwsgi安裝失敗問題的解決方案

    關(guān)于pip install uwsgi安裝失敗問題的解決方案

    這篇文章主要介紹了關(guān)于pip install uwsgi安裝失敗問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Conda命令教程小結(jié)

    Conda命令教程小結(jié)

    Conda 是一個(gè)開源的包管理器和環(huán)境管理器,主要用于安裝和管理 Python 包及依賴項(xiàng),本文就來介紹一下Conda命令,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-01-01
  • 完美解決python針對(duì)hdfs上傳和下載的問題

    完美解決python針對(duì)hdfs上傳和下載的問題

    這篇文章主要介紹了完美解決python針對(duì)hdfs上傳和下載的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python自動(dòng)化實(shí)現(xiàn)將PDF文檔高效轉(zhuǎn)換為HTML文件

    Python自動(dòng)化實(shí)現(xiàn)將PDF文檔高效轉(zhuǎn)換為HTML文件

    PDF作為一種廣泛使用的文檔格式,以其版面固定、跨平臺(tái)兼容的特性,在商務(wù)和學(xué)術(shù)領(lǐng)域占據(jù)主導(dǎo)地位,本文將深入探討如何利用Python,高效精準(zhǔn)地將PDF文檔轉(zhuǎn)換為HTML文件,感興趣的可以了解下
    2025-10-10
  • Python小游戲?qū)崿F(xiàn)實(shí)例之接蘋果

    Python小游戲?qū)崿F(xiàn)實(shí)例之接蘋果

    其實(shí)利用Python編寫的小游戲很簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于Python小游戲?qū)崿F(xiàn)實(shí)例之接蘋果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Pytest測(cè)試報(bào)告工具Allure的高級(jí)用法

    Pytest測(cè)試報(bào)告工具Allure的高級(jí)用法

    這篇文章介紹了Pytest測(cè)試報(bào)告工具Allure的高級(jí)用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • python 已知三條邊求三角形的角度案例

    python 已知三條邊求三角形的角度案例

    這篇文章主要介紹了python 已知三條邊求三角形的角度案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Python3.10新特性之match語句示例詳解

    Python3.10新特性之match語句示例詳解

    這篇文章主要為大家介紹了Python3.10新特性之match語句示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • Python獲取當(dāng)前路徑實(shí)現(xiàn)代碼

    Python獲取當(dāng)前路徑實(shí)現(xiàn)代碼

    這篇文章主要介紹了 Python獲取當(dāng)前路徑實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評(píng)論

昭通市| 美姑县| 临沭县| 嘉义县| 新化县| 鸡东县| 景谷| 永新县| 东丰县| 鄂尔多斯市| 湖南省| 酒泉市| 邳州市| 定州市| 泸西县| 萨嘎县| 个旧市| 古交市| 怀远县| 宁乡县| 太仓市| 凤翔县| 唐河县| 九江县| 耒阳市| 衡阳县| 日土县| 永州市| 丘北县| 贵港市| 岢岚县| 龙陵县| 宜宾市| 亚东县| 会同县| 滦南县| 锦屏县| 辉县市| 湘阴县| 伊宁市| 阳东县|