簡單理解Python迭代器

2021-10-06 17:43:10 字數 1572 閱讀 8010

在使用列表時,直接將資料存入列表將會佔據大量空間,且復用率較低,為解決這個問題,這裡了解一下迭代器,從而建立一種資料產生的方式,以此來節省空間。

注意,這裡需要使用到內建函式__iter__,簡單理解為,使用了__iter__才會是乙個可迭代物件,關於這部分,我們可以對一些物件做一些判斷,從而清楚是不是可迭代物件,比如l1列表:

from collections.abc import iterable

# 判斷l1是否為可迭代物件

l1 = [i for i in range(4)]

print(isinstance(l1, iterable)) # 結果為true,確定為迭代物件

這裡我們使用__iter__()方法和__next__()方法來將元素取出。

l2 = l1.__iter__()

# l2 = iter(l1) # 和上面一句等價

print(next(l2))

print(l2.__next__()) # 和上面一句等價

print(next(l2))

在這裡我們實現了使用for迴圈來取出元素的方法,在了解這裡之後,我們開始做乙個自己的迭代器

# 構造迭代器

class newiter():

# 用於生成斐波那契數列

def __init__(self, num):

self.num = num

self.a = 0

self.b = 1

def __iter__(self):

# 建立可迭代物件

return self

def __next__(self):

while self.num > 0:

result = self.a

self.a, self.b = self.b, self.a + self.b

self.num -= 1

return result

# 迴圈結束後跳出

raise stopiteration

new_iter = newiter(5)

print(next(new_iter))

print(next(new_iter))

這裡引入生成器個概念,生成器能做到迭代器能做的所有事,由於自動建立了iter()和next()方法,生成器顯得特別簡潔。除了建立和儲存程式狀態的自動方法,當

發生器終結時,還會自動丟擲 stopiteration 異常。簡單理解他就是迭代器的一種!!使用yield即可實現。

# 生成器實現

def new_create(num):

# 用於生成斐波那契數列

a, b = 0, 1

while num > 0:

yield a

a, b = b, a+b

num -= 1

new_iter = new_create(5)

print(next(new_iter))

print(next(new_iter))

目的就是節省空間,提高復用率

python迭代器簡單理解

1 凡是可應用於for迴圈的物件都是可迭代 可迴圈 iterable 物件,例如字串 列表 元組 字典 集合等 2 凡是可應用於next 方法的物件都是迭代器 iterator 物件,迭代器 iterator 是乙個惰性計算的過程,只有在需要返回下乙個數值的時候才會被計算 這一過程跟生成器很像,都是...

python簡單理解迭代器,生成器,裝飾器

迭代器 是什麼 是乙個抽象的概念,任何物件,如果它實現了next方法和iter方法,就是迭代器。next方法要麼返回迭代中的下一項,要麼返回乙個stapiteration異常,iter方法要返回乙個迭代器物件,而它本身就是乙個迭代器物件,所有返回自己本身。作用 像我們提供乙個中間人即迭代器幫助我們迭...

理解Python的迭代器

首先,廖雪峰老師的教程中解釋了迭代器和生成器,這篇文章只是補充和我個人的總結。可以直接作用於for迴圈的物件統稱為可迭代物件 iterable 可以被next 函式呼叫並不斷返回下乙個值的物件稱為迭代器 iterator 所有的iterable均可以通過內建函式iter 來轉變為iterator。對...