搜尋
首頁後端開發Python教學深入理解Python迭代器:使用'__iter__”和'__next__”導航數據

Deep Understanding on Python Iterators: Navigating Data with `__iter__` and `__next__`

迭代器是實現兩個方法的任何物件:

  • __iter__():傳回迭代器物件本身。
  • __next__():傳回序列中的下一項。當沒有更多項目可用時,它會引發 StopIteration 異常。

建立基本迭代器:

class Counter:
    def __init__(self, start, end):
        self.current = start
        self.end = end

    def __iter__(self):
        return self  # Returns itself as an iterator

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        self.current += 1
        return self.current - 1

counter = Counter(1, 4)
for number in counter:
    print(number)  # Outputs: 1, 2, 3

此類手動控制 next() 調用,當到達末尾時停止。迭代器有利於處理按需處理每個元素的序列。


2. Python 生成器:高效處理大數據

生成器是建立迭代器的更簡單方法。透過使用yield 關鍵字的函數進行定義,它會在yield 處暫停函數執行,並在呼叫next() 時還原函數執行。每個yield語句都會保存函數的狀態,這表示它可以從中斷處繼續。

基本生成器範例:

def countdown(num):
    while num > 0:
        yield num
        num -= 1

for n in countdown(3):
    print(n)  # Outputs: 3, 2, 1

當呼叫yield時,函數傳回目前值並暫停,等待next()恢復。


3.為什麼生成器記憶體效率高

生成器即時計算值,稱為惰性求值。與將所有項目儲存在記憶體中的清單不同,生成器僅根據需要產生項目,這非常適合:

  • 流資料(例如,從大檔案讀取行)。
  • 處理大型或無限序列而不會造成記憶體過載。

範例:使用生成器讀取大檔案:

def read_large_file(file_path):
    with open(file_path) as file:
        for line in file:
            yield line  # Only processes one line at a time

這種方法可以防止將整個文件載入到記憶體中,這對於大量文件特別有用。


4.生成器表達式:緊湊語法

生成器表達式是建立生成器的一種簡潔方式,使用括號而不是像列表推導式那樣的方括號。

範例

squares = (x * x for x in range(5))
print(next(squares))  # Outputs: 0
print(list(squares))  # Outputs remaining: [1, 4, 9, 16]

在這裡,squares 僅在請求時計算值,從而節省記憶體。


5.高級產生器的產量來自

yield from 語句對於將一個生成器的部分操作委託給另一個生成器非常有用。當您想要將生成器分解為子生成器以實現模組化時,這非常有用。

範例

def generator_a():
    yield 1
    yield 2

def generator_b():
    yield from generator_a()
    yield 3

for val in generator_b():
    print(val)  # Outputs: 1, 2, 3

簡化程式碼的產量,特別是在複雜或嵌套的生成器鏈中。


6.效能考量:生成器與清單

產生器在以下情況下特別有用:

  • 資料太大,無法一次全部裝入記憶體。
  • 可能只需要部分資料。
  • 您希望避免預先初始化大型清單的開銷。

另一方面,清單在以下情況會更好:

  • 您需要重複存取資料。
  • 資料集夠小,可以一次載入所有內容。
  • 需要隨機存取(生成器不支援索引)。

結論:迭代器和生成器作為強大的資料工具

透過迭代器和產生器,Python 讓您能夠以記憶體效率和靈活性來控制資料處理。它們對於處理大型資料集、流資料和建立自訂可迭代物件至關重要。
掌握這些,你就能像 Python 專家一樣處理資料! ?

以上是深入理解Python迭代器:使用'__iter__”和'__next__”導航數據的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
了解差異:用於循環和python中的循環了解差異:用於循環和python中的循環May 16, 2025 am 12:17 AM

theDifferenceBetweewneaforoopandawhileLoopInpythonisthataThataThataThataThataThataThataNumberoFiterationSiskNownInAdvance,而leleawhileLoopisusedWhenaconDitionNeedneedneedneedNeedStobeCheckedStobeCheckedStobeCheckedStobeCheckedStobeceDrepeTysepectients.peatsiveSectlyStheStobeCeptellyWithnumberofiterations.1)forloopsareAceareIdealForitoringercortersence

Python循環控制:對於vs -a -a比較Python循環控制:對於vs -a -a比較May 16, 2025 am 12:16 AM

在Python中,for循環適用於已知迭代次數的情況,而while循環適合未知迭代次數且需要更多控制的情況。 1)for循環適用於遍歷序列,如列表、字符串等,代碼簡潔且Pythonic。 2)while循環在需要根據條件控制循環或等待用戶輸入時更合適,但需注意避免無限循環。 3)性能上,for循環略快,但差異通常不大。選擇合適的循環類型可以提高代碼的效率和可讀性。

如何在Python中結合兩個列表:5種簡單的方法如何在Python中結合兩個列表:5種簡單的方法May 16, 2025 am 12:16 AM

在Python中,可以通過五種方法合併列表:1)使用 運算符,簡單直觀,適用於小列表;2)使用extend()方法,直接修改原列表,適用於需要頻繁更新的列表;3)使用列表解析式,簡潔且可對元素進行操作;4)使用itertools.chain()函數,內存高效,適合大數據集;5)使用*運算符和zip()函數,適用於需要配對元素的場景。每種方法都有其特定用途和優缺點,選擇時應考慮項目需求和性能。

循環時循環:python語法,用例和示例循環時循環:python語法,用例和示例May 16, 2025 am 12:14 AM

foroopsare whenthenemberofiterationsisknown,而whileLoopsareUseduntilacTitionismet.1)ForloopSareIdealForeSequencesLikeLists,UsingSyntaxLike'forfruitinFruitinFruitinFruitIts:print(fruit)'。 2)'

python串聯列表列表python串聯列表列表May 16, 2025 am 12:08 AM

toConcateNateAlistofListsInpython,useextend,listComprehensions,itertools.Chain,orrecursiveFunctions.1)ExtendMethodStraightForwardButverBose.2)listComprechencomprechensionsareconconconciseandemandeconeandefforlargerdatasets.3)

Python中的合併列表:選擇正確的方法Python中的合併列表:選擇正確的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入兩個列表?如何在Python 3中加入兩個列表?May 14, 2025 am 12:09 AM

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

Python串聯列表字符串Python串聯列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

北端:融合系統,解釋
4 週前By尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
4 週前By尊渡假赌尊渡假赌尊渡假赌
<🎜>掩蓋:探險33-如何獲得完美的色度催化劑
2 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器