亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

python迭代器詳解

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

掃碼添加小助手

加入工程師交流群

python迭代器

1. 可迭代對象

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

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

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

2. 是否可迭代?

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

但是對新手來說,可能需要借助一些函數(shù)來判別,比如 Python 內(nèi)置的 collections.abc 模塊,這個模塊只有在 Python 中才有噢,在這個模塊中提供了一個 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)確(具體下面會說到),最準(zhǔn)確的方法,還是應(yīng)該使用 for 循環(huán)。

3. 可迭代協(xié)議

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

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

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

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

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

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

for i in my_list:
    print(i)

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

from collections.abc import Iterable

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

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

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

for i in my_list:
    print(i)

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

4. 什么是迭代器

當(dāng)你對一個可迭代對象使用 iter 函數(shù)后,它會返回一個迭代器對象,對于迭代器對象,我們可以使用 next 函數(shù),去獲取元素,每執(zhí)行一次,獲取一次,等到全部獲取完畢,會拋出 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é)議

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

正因?yàn)橛辛怂覀儾趴梢杂?next 來獲取元素。

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

from collections.abc import Iterator

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

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

    # 當(dāng)無元素時,必要拋出 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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4849

    瀏覽量

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

    關(guān)注

    0

    文章

    45

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    淘寶商品詳情接口(item_get)企業(yè)級全解析:參數(shù)配置、簽名機(jī)制與 Python 代碼實(shí)戰(zhàn)

    本文詳解淘寶開放平臺taobao.item_get接口對接全流程,涵蓋參數(shù)配置、MD5簽名生成、Python企業(yè)級代碼實(shí)現(xiàn)及高頻問題排查,提供可落地的實(shí)戰(zhàn)方案,助你高效穩(wěn)定獲取商品數(shù)據(jù)。
    的頭像 發(fā)表于 09-26 09:13 ?320次閱讀
    淘寶商品詳情接口(item_get)企業(yè)級全解析:參數(shù)配置、簽名機(jī)制與 <b class='flag-5'>Python</b> 代碼實(shí)戰(zhàn)

    termux如何搭建python游戲

    模擬,支持通過APT包管理安裝軟件。搭建Python游戲開發(fā)環(huán)境前需完成以下基礎(chǔ)配置: 1. 更換國內(nèi)源 為提升下載速度,需替換Termux默認(rèn)源為清華源,執(zhí)行以下命令: ```bash
    發(fā)表于 08-29 07:06

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

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

    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行Python程序?

    在這篇文章中,我將為你簡要介紹Python程序是什么、Python程序可以用來做什么,以及如何在RaspberryPi上編寫和運(yùn)行一個簡單的Python程序。什么是Python程序?
    的頭像 發(fā)表于 03-25 09:27 ?1351次閱讀
    零基礎(chǔ)入門:如何在樹莓派上編寫和運(yùn)行<b class='flag-5'>Python</b>程序?

    Python中的迭代與生成器

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

    Python繪圖Matplotlib快速參考手冊

    ?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 ?633次閱讀

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

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

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

    適用于 MySQL 和 MariaDB 的 Python 連接 Python Connector for MySQL 是一種可靠的連接解決方案,用于從 Python 應(yīng)用程序訪問 M
    的頭像 發(fā)表于 01-17 12:18 ?779次閱讀
    適用于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 ?686次閱讀

    迭代學(xué)習(xí)閉環(huán)系統(tǒng)simulink仿真

    其中包含了迭代學(xué)習(xí)的仿真,輸入數(shù)據(jù),控制程序等
    發(fā)表于 01-03 15:30 ?0次下載

    Triton編譯安裝步驟詳解

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

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

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

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

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

    使用Python進(jìn)行圖像處理

    下面是一個關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?804次閱讀
    使用<b class='flag-5'>Python</b>進(jìn)行圖像處理