国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

8 python的迭代器和生成器

這篇具有很好參考價(jià)值的文章主要介紹了8 python的迭代器和生成器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概述

????????在上一節(jié),我們介紹了Python的模塊和包,包括:什么是模塊、導(dǎo)入模塊、自定義模塊、__name__、什么是包、創(chuàng)建包、導(dǎo)入包等內(nèi)容。在這一節(jié)中,我們將介紹Python的迭代器和生成器。在Python中,迭代器是一個(gè)非常重要的概念,它使得我們能夠遍歷一個(gè)序列而無需使用索引。迭代器不僅限于列表、元組、字符串等,我們也可以創(chuàng)建自定義的迭代器對(duì)象。生成器是一種特殊的迭代器,能夠根據(jù)需要生成數(shù)據(jù)。與傳統(tǒng)的列表、元組等不同,生成器可以在需要時(shí)才生成數(shù)據(jù),從而有效節(jié)省內(nèi)存空間。

使用迭代器

????????迭代器是Python中一個(gè)重要的設(shè)計(jì)模式。迭代器是一個(gè)能夠記住遍歷的位置的對(duì)象,可以讓我們遍歷一個(gè)容器,比如:列表、元組、字典等。Python的許多內(nèi)置數(shù)據(jù)類型,比如:列表、元組、字典、集合和字符串,都實(shí)現(xiàn)了迭代器接口??梢允褂胕ter()函數(shù)獲取這些對(duì)象的迭代器,然后使用next()函數(shù)逐個(gè)獲取元素。

info = ['hello', 'CSDN', 'python']
# 獲取迭代器
it = iter(info)
# 遍歷下一個(gè)元素,輸出:hello
print(next(it))
# 遍歷下一個(gè)元素,輸出:CSDN
print(next(it))
# 遍歷下一個(gè)元素,輸出:python
print(next(it))

????????除了使用next()函數(shù)遍歷元素外,也可以使用for語句進(jìn)行遍歷。

info = ['hello', 'CSDN', 'python']
# 獲取迭代器
it = iter(info)
# 使用for遍歷,依次輸出:hello CSDN python
for item in it:
    print(item)

????????當(dāng)然,也可以使用while語句結(jié)合next()函數(shù)遍歷所有元素。此時(shí),需要額外處理StopIteration異常。這是因?yàn)?,?dāng)next()函數(shù)遍歷完序列中的所有元素后,會(huì)拋出StopIteration異常。

info = ['hello', 'CSDN', 'python']
# 獲取迭代器
it = iter(info)
# 使用while和next函數(shù)遍歷,依次輸出:hello CSDN python
while True:
    try:
        print(next(it))
    except StopIteration:
        break

創(chuàng)建迭代器

????????在Python中,可以通過定義一個(gè)包含__iter__()和__next__()函數(shù)的類來創(chuàng)建自定義的迭代器。其中,__iter__()函數(shù)返回一個(gè)特殊的迭代器對(duì)象,一般為迭代器對(duì)象本身;__next__()函數(shù)會(huì)返回序列中的下一個(gè)元素,并通過拋出StopIteration異常標(biāo)識(shí)整個(gè)迭代過程的完成。

# 自定義迭代器類
class CustomIterator:
    def __init__(self):
        self.value = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.value <= 6:
            result = self.value
            self.value += 1
            return result
        else:
            # 遍歷結(jié)束時(shí),需要拋出StopIteration異常
            raise StopIteration
        
# 創(chuàng)建自定義迭代器對(duì)象
cus_iter = CustomIterator()

# 遍歷自定義迭代器,依次輸出:1 2 3 4 5 6
for item in cus_iter:
    print(item)

????????在上面的示例代碼中,首先定義了一個(gè)名為CustomIterator的類。這個(gè)類包含__iter__()和__next__()函數(shù)。__iter__()函數(shù)返回迭代器對(duì)象本身,而__next__()函數(shù)返回序列中的下一個(gè)元素。在__next__()函數(shù)中,檢查當(dāng)前值是否小于等于6,如果是,則返回當(dāng)前值并將值加1,否則,拋出StopIteration異常,結(jié)束遍歷。最后,我們創(chuàng)建了一個(gè)CustomIterator的實(shí)例,并使用for循環(huán)遍歷它。

創(chuàng)建生成器

????????生成器實(shí)際上是一種特殊的迭代器,通過定義一個(gè)包含yield關(guān)鍵字的函數(shù)即可創(chuàng)建生成器。yield關(guān)鍵字用于在函數(shù)執(zhí)行過程中返回一個(gè)值,并將控制權(quán)交回給調(diào)用者。當(dāng)再次調(diào)用生成器時(shí),它會(huì)從上次返回的位置繼續(xù)執(zhí)行,直到再次遇到y(tǒng)ield。通過yield,生成器函數(shù)可以逐步產(chǎn)生值,而不需要一次性計(jì)算并返回所有值,節(jié)省了內(nèi)存空間。與普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作。調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對(duì)象。在下面的示例代碼中,我們定義了get_odd生成器,用于生成小于num的奇數(shù)的迭代器。

def get_odd(num):
    ori = 1
    while ori < num:
        yield ori
        ori += 2

????????生成器在處理大量數(shù)據(jù)或需要按需生成數(shù)據(jù)的場(chǎng)景中,是非常有用的。比如:在處理文本文件時(shí),我們可能不需要將整個(gè)文件一次性加載到內(nèi)存中,而是可以使用生成器逐行讀取文件。另外,在機(jī)器學(xué)習(xí)、大數(shù)據(jù)處理等領(lǐng)域,生成器也能夠發(fā)揮重要作用。

????????Python中的生成器具有以下幾個(gè)優(yōu)點(diǎn):

????????1、按需生成數(shù)據(jù),有效節(jié)省內(nèi)存空間。

????????2、能夠處理大量數(shù)據(jù),而不會(huì)導(dǎo)致內(nèi)存溢出。

????????3、可以使用簡(jiǎn)單的代碼實(shí)現(xiàn)復(fù)雜的迭代邏輯。

使用生成器

????????創(chuàng)建好生成器之后,我們就可以像使用迭代器一樣使用生成器了。以上面的get_odd生成器為例,如果我們需要輸出10以下的奇數(shù),既可以使用next()函數(shù),也可以使用for語句,示例代碼如下。

def get_odd(num):
    ori = 1
    while ori < num:
        yield ori
        ori += 2

odd_generator = get_odd(10)
# 輸出:1
print(next(odd_generator))
# 輸出:3
print(next(odd_generator))
# 依次輸出:5 7 9
for item in odd_generator:
    print(item)

????????考慮下面的應(yīng)用場(chǎng)景:我們需要從文件中讀取大量數(shù)據(jù),并進(jìn)行相應(yīng)的處理。如果使用傳統(tǒng)的列表或元組,可能會(huì)占用大量?jī)?nèi)存。此時(shí),可以使用生成器逐行讀取文件,從而有效節(jié)省內(nèi)存。具體如何使用,可參考下面的示例代碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-685424.html

def read_file(file_path):
    with open(file_path, 'r', encoding='utf-8', errors='ignore') as file:
        while line := file.readline():
            yield line.strip()

generator = read_file('./test.py')
# 使用生成器讀取文件,并按行輸出文件內(nèi)容
for line in generator:
    print(line)

到了這里,關(guān)于8 python的迭代器和生成器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Python中的迭代器與生成器

    在Python中,迭代器(Iterator)和生成器(Generator)是兩種用于處理可迭代對(duì)象的重要工具。而可迭代對(duì)象包括列表,元組,字典,字符串等。 迭代器和生成器只能迭代一次,通常用于處理大型數(shù)據(jù)集,因?yàn)樗鼈儾粫?huì)一次性加載所有數(shù)據(jù)到內(nèi)存中,而是根據(jù)需要逐個(gè)生成值。

    2024年02月10日
    瀏覽(34)
  • 3.0 Python 迭代器與生成器

    當(dāng)我們需要處理一個(gè)大量的數(shù)據(jù)集合時(shí),一次性將其全部讀入內(nèi)存并處理可能會(huì)導(dǎo)致內(nèi)存溢出。此時(shí),我們可以采用迭代器 Iterator 和生成器 Generator 的方法,逐個(gè)地處理數(shù)據(jù),從而避免內(nèi)存溢出的問題。 迭代器是一個(gè)可以逐個(gè)訪問元素的對(duì)象,它實(shí)現(xiàn)了 python 的迭代協(xié)議,即

    2024年02月13日
    瀏覽(26)
  • Python迭代器與生成器研究記錄

    迭代器肯定是可迭代對(duì)象,但是可迭代對(duì)象不一定是迭代器,生成器一定是迭代器,但是迭代器不一定是生成器 生成器是特殊的迭代器,所以生成器一定是迭代器,迭代器一定是可迭代對(duì)象 我們平常接觸最多的對(duì)象中,字符串,字典,列表,集合,元組和open打開的文件對(duì)象

    2024年02月05日
    瀏覽(17)
  • Python小姿勢(shì) - ## Python中的迭代器與生成器

    Python小姿勢(shì) - ## Python中的迭代器與生成器

    Python中的迭代器與生成器 在Python中,迭代是一個(gè)非常重要的概念,迭代器和生成器是迭代的兩種最常見的形式。那么,迭代器與生成器有何不同呢? 首先,我們先來了解一下迭代器。 迭代器是一種對(duì)象,它可以記住遍歷的位置,并在每次訪問時(shí)返回下一個(gè)元素。迭代器只能

    2024年02月04日
    瀏覽(29)
  • 【python高級(jí)用法】迭代器、生成器、裝飾器、閉包

    【python高級(jí)用法】迭代器、生成器、裝飾器、閉包

    可迭代對(duì)象:可以使用for循環(huán)來遍歷的,可以使用isinstance()來測(cè)試。 迭代器:同時(shí)實(shí)現(xiàn)了__iter__()方法和__next__()方法,可以使用isinstance()方法來測(cè)試是否是迭代器對(duì)象 使用類實(shí)現(xiàn)迭代器 兩個(gè)類實(shí)現(xiàn)一個(gè)迭代器 一個(gè)類實(shí)現(xiàn)迭代器 可迭代對(duì)象與迭代器的總結(jié) 一個(gè)具備了__iter_

    2024年02月03日
    瀏覽(24)
  • Python基礎(chǔ)篇(十):迭代器與生成器

    Python基礎(chǔ)篇(十):迭代器與生成器

    迭代器和生成器是Python中用于 處理可迭代對(duì)象 的重要概念。它們提供了一種有效的方式來 遍歷和訪問 集合中的元素,同時(shí)具有 節(jié)省內(nèi)存和惰性計(jì)算 的特點(diǎn)。下面是關(guān)于迭代器和生成器的詳細(xì)介紹和示例: 迭代器是一種實(shí)現(xiàn)了迭代協(xié)議的對(duì)象,它可以用于遍歷集合中的元素

    2024年02月10日
    瀏覽(22)
  • 【Python】Python系列教程-- Python3 迭代器與生成器(二十)

    往期回顧: Python系列教程–Python3介紹(一) Python系列教程–Python3 環(huán)境搭建(二) Python系列教程–Python3 VScode(三) Python系列教程–Python3 基礎(chǔ)語法(四) Python系列教程–Python3 基本數(shù)據(jù)類型(五) Python系列教程-- Python3 數(shù)據(jù)類型轉(zhuǎn)換(六) Python系列教程-- Python3 推導(dǎo)式(

    2024年02月08日
    瀏覽(86)
  • python使用迭代生成器yield減少內(nèi)存占用的方法

    在python編碼中for循環(huán)處理任務(wù)時(shí),會(huì)將所有的待遍歷參量加載到內(nèi)存中。 其實(shí)這本沒有必要,因?yàn)檫@些參量很有可能是一次性使用的,甚至很多場(chǎng)景下這些參量是不需要同時(shí)存儲(chǔ)在內(nèi)存中的,這時(shí)候就會(huì)用到本文所介紹的迭代生成器yield。 首先我們用一個(gè)例子來演示一下迭代

    2024年04月28日
    瀏覽(27)
  • 【Python 4】列表與元組slice切片 迭代 列表生成式 生成器generator 迭代器Iterator對(duì)象

    在Python中,代碼不是越多越好,而是越少越好 取一個(gè)list或tuple的部分元素是非常常見的操作 對(duì)這種經(jīng)常取指定索引范圍的操作,用循環(huán)十分繁瑣,因此,Python提供了切片(Slice)操作符,能大大簡(jiǎn)化這種操作 L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3 如果第

    2024年02月07日
    瀏覽(17)
  • Python黑魔法:探秘生成器和迭代器的神奇力量

    在Python中,生成器和迭代器是實(shí)現(xiàn)惰性計(jì)算的兩種重要工具,它們可以幫助我們更有效地處理數(shù)據(jù),特別是在處理大數(shù)據(jù)集時(shí),可以顯著減少內(nèi)存的使用。接下來,我們將詳細(xì)介紹這兩種工具。 迭代器是一種特殊的對(duì)象,它可以遍歷一個(gè)集合中的所有元素。任何實(shí)現(xiàn)了__ite

    2024年02月12日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包