chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python迭代器詳解

python爬蟲知識(shí)分享 ? 來源:python爬蟲知識(shí)分享 ? 作者:python爬蟲知識(shí)分享 ? 2022-02-24 15:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

python迭代器

1. 可迭代對(duì)象

可以利用 for 循環(huán)的對(duì)象,都叫可迭代對(duì)象。

列表、元組、字典、字符串等都是可迭代對(duì)象。

# 以列表為例
>>> alist = [0, 1, 2, 3, 4, 5]
>>> for i in alist:
...     print(i)
...
0
1
2
3
4
5

2. 是否可迭代?

對(duì) Python 比較熟悉的朋友,肯定知道哪些數(shù)據(jù)類型是可迭代的,哪些是不可迭代的。

但是對(duì)新手來說,可能需要借助一些函數(shù)來判別,比如 Python 內(nèi)置的 collections.abc 模塊,這個(gè)模塊只有在 Python 中才有噢,在這個(gè)模塊中提供了一個(gè) Iterable 類,可以用 isinstance 來判斷。

>>> from collections.abc import Iterable
>>>
>>> isinstance([0, 1, 2], Iterable) # 列表
True
>>> isinstance({"name": "張三"}, Iterable) # 字典
True
>>> isinstance((1,2,3), Iterable) # 元組
True
>>> isinstance("hello", Iterable) # 字符串
True

但是這種方法并不是百分百準(zhǔn)確(具體下面會(huì)說到),最準(zhǔn)確的方法,還是應(yīng)該使用 for 循環(huán)。

3. 可迭代協(xié)議

可迭代對(duì)象內(nèi)部是如何實(shí)現(xiàn)在你對(duì)其進(jìn)行 for 循環(huán)時(shí),可以一個(gè)一個(gè)元素的返回出來呢?

這就要談到迭代器協(xié)議。

第一種場(chǎng)景:如果一個(gè)對(duì)象內(nèi)部實(shí)現(xiàn)了 __iter__() 方法 ,并返回一個(gè)迭代器實(shí)例,那么該對(duì)象就是可迭代對(duì)象

class Array:
    mylist = [0,1,2]

    # 返回迭代器類的實(shí)例
    def __iter__(self):
        return iter(self.mylist)

# 得到可迭代對(duì)象
my_list = Array()
print(isinstance(my_list, Iterable)) # True

for i in my_list:
    print(i)

第二種場(chǎng)景:假設(shè)一個(gè)對(duì)象沒有實(shí)現(xiàn) __iter__() ,Python 解釋器 __getitem__() 方法獲取元素,如果可行,那么該對(duì)象也是一個(gè)可迭代對(duì)象。

from collections.abc import Iterable

class Array:
    mylist = [0,1,2]

    def __getitem__(self, item):
        return self.mylist[item]

# 得到一個(gè)可迭代對(duì)象
my_list = Array()
print(isinstance(my_list, Iterable)) # False

for i in my_list:
    print(i)

此時(shí)如果你使用 isinstance(my_list, Iterable) 去判斷是否是可迭代,就會(huì)返回 False,因?yàn)?isinstance 這種方法就是檢查對(duì)象是否有 __iter__ 方法。這也論證了使用 isinstance(my_list, Iterable) 去判斷是否可迭代是不準(zhǔn)確的。

4. 什么是迭代器

當(dāng)你對(duì)一個(gè)可迭代對(duì)象使用 iter 函數(shù)后,它會(huì)返回一個(gè)迭代器對(duì)象,對(duì)于迭代器對(duì)象,我們可以使用 next 函數(shù),去獲取元素,每執(zhí)行一次,獲取一次,等到全部獲取完畢,會(huì)拋出 StopIteration 提示無元素可取。

>>> alist = [0, 1, 2, 3]
>>> gen = iter(alist)
>>> gen

>>> next(gen)
0
>>> next(gen)
1
>>> next(gen)
2
>>> next(gen)
3
>>> next(gen)
Traceback (most recent call last):
  File "", line 1, in 
StopIteration

5. 迭代器協(xié)議

對(duì)比可迭代對(duì)象,迭代器的內(nèi)部只是多了一個(gè)函數(shù)而已 – __next__()

正因?yàn)橛辛怂?,我們才可以?next 來獲取元素。

迭代器,是在可迭代的基礎(chǔ)上實(shí)現(xiàn)的。要?jiǎng)?chuàng)建一個(gè)迭代器,我們首先,得有一個(gè)可迭代對(duì)象。 現(xiàn)在就來看看,如何創(chuàng)建一個(gè)可迭代對(duì)象,并以可迭代對(duì)象為基礎(chǔ)創(chuàng)建一個(gè)迭代器。

from collections.abc import Iterator

class Array:
    index = 0
    mylist = [0,1,2]

    # 返回該對(duì)象的迭代器類的實(shí)例
    # 因?yàn)樽约壕褪堑?,所以返回self
    def __iter__(self):
        return self

    # 當(dāng)無元素時(shí),必要拋出 StopIteration
    def __next__(self):
        if self.index <= len(self.mylist)-1:
            value = self.mylist[self.index]
            self.index += 1
            return value
        raise StopIteration

my_iterator = iter(Array())
print(isinstance(my_iterator, Iterator)) # output: True
print(next(my_iterator))  # output: 0
print(next(my_iterator))  # output: 1
print(next(my_iterator))  # output: 2
print(next(my_iterator))  # StopIteration

審核編輯:符乾江
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86709
  • 迭代器
    +關(guān)注

    關(guān)注

    0

    文章

    45

    瀏覽量

    4467
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    永磁同步電機(jī)二階迭代學(xué)習(xí)控制

    針對(duì)永磁同步電機(jī)存在的周期性脈動(dòng)問題,提出了一種二階 PD-型迭代學(xué)習(xí)控制策略,該算法能夠 有效實(shí)現(xiàn)最優(yōu)跟蹤控制 。利用卷積的推廣 Young 不等式,獲得了系統(tǒng)跟蹤誤差在 Lebesgue-p
    發(fā)表于 03-26 14:28

    Python中的迭代與生成器

    Python迭代與生成器 列表生成式 列表生成式也叫做列表推導(dǎo)式,它本身還是列表,只不過它是根據(jù)我們定義的規(guī)則來生成一個(gè)真實(shí)的列表。 ? ? list2 = [x for x in range
    的頭像 發(fā)表于 02-20 10:43 ?386次閱讀

    Python繪圖Matplotlib快速參考手冊(cè)

    ?PYTHON
    發(fā)表于 02-07 14:04 ?0次下載

    Python Connector for InterBase連接解決方案

    適用于 InterBase 的 Python 連接 Python Connector for InterBase 是一種可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問 Int
    的頭像 發(fā)表于 01-22 14:34 ?450次閱讀

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測(cè)。以下是一個(gè)詳細(xì)的教程,指導(dǎo)你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?1373次閱讀

    適用于MySQL和MariaDB的Python連接:可靠的MySQL數(shù)據(jù)連接和數(shù)據(jù)庫

    適用于 MySQL 和 MariaDB 的 Python 連接 Python Connector for MySQL 是一種可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問 M
    的頭像 發(fā)表于 01-17 12:18 ?491次閱讀
    適用于MySQL和MariaDB的<b class='flag-5'>Python</b>連接<b class='flag-5'>器</b>:可靠的MySQL數(shù)據(jù)連接<b class='flag-5'>器</b>和數(shù)據(jù)庫

    適用于Oracle的Python連接:可訪問托管以及非托管的數(shù)據(jù)庫

    適用于 Oracle 的 Python 連接 適用于 Oracle 的 Python 連接是一種可靠的連接解決方案,用于從 Python
    的頭像 發(fā)表于 01-14 10:30 ?469次閱讀

    Triton編譯安裝步驟詳解

    1. 系統(tǒng)要求 在開始安裝之前,請(qǐng)確保您的系統(tǒng)滿足以下要求: 操作系統(tǒng) :支持 Linux 或 Windows(通過 WSL 或 Cygwin)。 編譯 :GCC 或 Clang。 CMake
    的頭像 發(fā)表于 12-24 17:35 ?2613次閱讀

    Python中代理服務(wù)的配置與應(yīng)用

    在網(wǎng)絡(luò)通信中,代理服務(wù)作為一種重要的網(wǎng)絡(luò)中間件,充當(dāng)著客戶端和目標(biāo)服務(wù)之間的中間人角色。它能夠接收來自客戶端的請(qǐng)求,并將這些請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)服務(wù),然后將服務(wù)的響應(yīng)返回給客戶端。
    的頭像 發(fā)表于 11-12 07:13 ?560次閱讀

    Python代理技術(shù)詳解:從入門到進(jìn)階

    Python代理技術(shù)是一種在網(wǎng)絡(luò)編程中廣泛使用的技術(shù),它允許通過代理服務(wù)發(fā)送和接收網(wǎng)絡(luò)請(qǐng)求。
    的頭像 發(fā)表于 11-12 07:06 ?629次閱讀

    使用Python構(gòu)建高效的HTTP代理服務(wù)

    構(gòu)建一個(gè)高效的HTTP代理服務(wù)Python中涉及多個(gè)方面,包括性能優(yōu)化、并發(fā)處理、協(xié)議支持(HTTP/HTTPS)、錯(cuò)誤處理以及日志記錄等。
    的頭像 發(fā)表于 10-23 07:41 ?528次閱讀

    pytorch和python的關(guān)系是什么

    在當(dāng)今的人工智能領(lǐng)域,Python已經(jīng)成為了最受歡迎的編程語言之一。Python的易學(xué)易用、豐富的庫和框架以及強(qiáng)大的社區(qū)支持,使其成為了數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)等領(lǐng)域的首選語言。而在深度學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 08-01 15:27 ?3274次閱讀

    Python建模算法與應(yīng)用

    Python作為一種功能強(qiáng)大、免費(fèi)、開源且面向?qū)ο蟮木幊陶Z言,在科學(xué)計(jì)算、數(shù)學(xué)建模、數(shù)據(jù)分析等領(lǐng)域展現(xiàn)出了卓越的性能。其簡(jiǎn)潔的語法、對(duì)動(dòng)態(tài)輸入的支持以及解釋性語言的本質(zhì),使得Python在多個(gè)平臺(tái)
    的頭像 發(fā)表于 07-24 10:41 ?1256次閱讀

    Python在AI中的應(yīng)用實(shí)例

    Python在人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級(jí)的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細(xì)探討Python在AI中的幾個(gè)關(guān)鍵應(yīng)用實(shí)例,包括機(jī)器學(xué)習(xí)、深度學(xué)習(xí)、自然語言處理、
    的頭像 發(fā)表于 07-19 17:16 ?2695次閱讀

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會(huì)看到一些用 Python 實(shí)現(xiàn)文件復(fù)制的特殊方法。下面我們開始學(xué)習(xí)這九種不同的方法來實(shí)現(xiàn) Pyt
    的頭像 發(fā)表于 07-18 14:53 ?802次閱讀