日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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)注

    58

    文章

    4889

    瀏覽量

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

    關(guān)注

    0

    文章

    45

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    使用PYTHON進(jìn)行的跨平臺(tái)仿真

    快速物理光學(xué)軟件VirtualLab Fusion以其“連接場(chǎng)求解”方法而自豪,該方法將應(yīng)用于不同組件上的專用電磁場(chǎng)求解結(jié)合在一起,以實(shí)現(xiàn)整個(gè)系統(tǒng)的物理光學(xué)模擬。這種方法的邏輯擴(kuò)展不僅是連接軟件
    發(fā)表于 04-02 08:21

    [VirtualLab] 使用Python運(yùn)行VirtualLab Fusion光學(xué)仿真

    摘要 VirtualLab Fusion允許Python外部訪問其建模技術(shù)、求解和結(jié)果。這個(gè)用例介紹了一種使用路徑變量和Visual Studio代碼將Python連接到VirtualLab
    發(fā)表于 03-31 09:39

    [VirtualLab] 使用Python進(jìn)行跨平臺(tái)參數(shù)掃描

    摘要 VirtualLab Fusion允許外部訪問其建模技術(shù)、求解和結(jié)果。這有助于應(yīng)用其他數(shù)據(jù)處理或優(yōu)化工具來進(jìn)一步研究光學(xué)模擬。在本示例中,我們演示如何使用Python腳本運(yùn)行參數(shù)掃描,以及
    發(fā)表于 03-31 09:36

    如何在 VisionFive 上使用 Python 包?

    Fedora 并確保 VisionFive 已連接到互聯(lián)網(wǎng)。有關(guān)詳細(xì)說明,請(qǐng)參閱通過以太網(wǎng)使用 SSH或使用 USB 轉(zhuǎn)串行轉(zhuǎn)換部分中的VisionFive 單板計(jì)算機(jī)快速入門指南. 執(zhí)行pip命令
    發(fā)表于 03-30 08:28

    安裝 Python VisionFive_GPIO失敗是哪里出了問題?

    盡管按照最新的文檔,我在安裝 VisionFive.gpio 包時(shí)仍然收到錯(cuò)誤 sudo apt 安裝 libxml2-dev libxslt-dev python3 -m pip 安裝請(qǐng)求
    發(fā)表于 02-11 06:13

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)

    你想要的是 1688 商品詳情 API 的 Python 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成 API 憑證配置、接口請(qǐng)求(含簽名)、響應(yīng)數(shù)據(jù)解析、異常處理 的全流程落地,我會(huì)提供可直接運(yùn)行的代碼,并
    的頭像 發(fā)表于 02-10 11:23 ?407次閱讀

    沒有專利的opencv-python 版本

    所有 官方發(fā)布的 opencv-python 核心版本(無 contrib 擴(kuò)展)都無專利風(fēng)險(xiǎn)——專利問題僅存在于 opencv-contrib-python 擴(kuò)展模塊中的少數(shù)算法(如早期 SIFT
    發(fā)表于 12-13 12:37

    Termux中調(diào)試圣誕樹Python代碼

    python --version 如果輸出Python 3.x.x(比如3.11.4),說明安裝成功。 二、代碼編寫(兩種方式可選) 方式1:用Termux自帶編輯(nano)(新手推薦) 創(chuàng)建并編輯
    發(fā)表于 12-09 09:02

    Python調(diào)用API教程

    兩個(gè)不同系統(tǒng)之間的信息交互。在這篇文章中,我們將詳細(xì)介紹Python調(diào)用API的方法和技巧。 一、用Requests庫發(fā)送HTTP請(qǐng)求 使用Python調(diào)用API的第一步是發(fā)送HTTP請(qǐng)求,通常
    的頭像 發(fā)表于 11-03 09:15 ?1219次閱讀

    Python 給 Amazon 做“全身 CT”——可量產(chǎn)、可擴(kuò)展的商品詳情爬蟲實(shí)戰(zhàn)

    一、技術(shù)選型:為什么選 Python 而不是 Java? 結(jié)論: “調(diào)研階段用 Python,上線后如果 QPS 爆表再考慮 Java 重構(gòu)?!?二、整體架構(gòu)速覽(3 分鐘看懂) 三、開發(fā)前準(zhǔn)備(5
    的頭像 發(fā)表于 10-21 16:59 ?638次閱讀
    用 <b class='flag-5'>Python</b> 給 Amazon 做“全身 CT”——可量產(chǎn)、可擴(kuò)展的商品詳情爬蟲實(shí)戰(zhàn)

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

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

    termux調(diào)試python猜數(shù)字游戲

    保存并運(yùn)行 - `Ctrl+O` → `Enter` 保存文件 - `Ctrl+X` 退出編輯 - 運(yùn)行命令: ```bash python guess_number.py ``` 2. 游戲
    發(fā)表于 08-29 17:15

    termux如何搭建python游戲

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

    python app不能運(yùn)行怎么解決?

    ;python_agent[1241]: xmlrpc request method supervisor.stopProcess failed;python_agent[1241]: xmlrpc request method supervisor.stopProces
    發(fā)表于 08-06 06:27

    【HarmonyOS 5】鴻蒙mPaaS詳解

    【HarmonyOS 5】鴻蒙mPaaS詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)# 一、mPaaS是什么? mPaaS 是 Mobile
    的頭像 發(fā)表于 07-11 18:23 ?1035次閱讀
    【HarmonyOS 5】鴻蒙mPaaS<b class='flag-5'>詳解</b>
    玛沁县| 文登市| 长白| 莎车县| 印江| 天峨县| 桑日县| 延吉市| 海南省| 海兴县| 新营市| 井研县| 双城市| 鲁山县| 兴仁县| 辽阳县| 文化| 漳浦县| 扎囊县| 甘谷县| 夏津县| 湖北省| 崇阳县| 永昌县| 拉萨市| 时尚| 金塔县| 麻江县| 宁陵县| 赣州市| 杭锦旗| 汽车| 昭平县| 南丰县| 绥化市| 通河县| 固始县| 修文县| 门源| 宁河县| 徐州市|