Python中的迭代器 生成器

2022-09-14 22:39:30 字數 1590 閱讀 7997

from collections import iterable, iterator

參考官網鏈結

class i:

def __init__(self, v):

self.v = v

def __iter__(self):

return iter([self.v]) # 返回的應該是迭代器物件

i = i(2)

print(isinstance(i, iterable), isinstance(i, iterator)) # true false

print(iter(i)) # class i:

def __init__(self, v):

self.v = v

def __getitem__(self, item):

if item > self.v:

raise indexerror

return item

i = i(2)

print(isinstance(i, iterable), isinstance(i, iterator)) # false false

print(iter(i)) #

參考官網鏈結

class i:

def __init__(self, v):

self.v = v

def __iter__(self):

return self

def __next__(self):

if self.v < 10:

self.v += 1

return self.v

raise stopiteration

i = i(2)

print(isinstance(i, iterable), isinstance(i, iterator)) # true true

print(iter(i)) # <__main__.i object at 0x00000000021e0898>

參考官網鏈結

class i:

def __init__(self, v):

self.v = v

def __iter__(self):

yield 1

i = i(2)

print(isinstance(i, iterable), isinstance(i, iterator)) # true false

print(iter(i)) #

只要實現了__iter__方法或者__getitem__方法, 就是iterable, 但iterable只檢測__iter__方法是否實現, 參見官網鏈結。推薦使用iter是否返回迭代器判斷可否可迭代。

__getitem__方法的返回有特殊要求, 參見官網鏈結。

實現了__iter__和__next__方法就是乙個iterator。參見pep234。

generator是返回乙個generator iterator的函式。與普通函式的不同在於函式中包含 yield 表示式。

python可迭代與迭代器

迭代器

Python中的迭代器 生成器

迭代器想要獲取每個值就要反覆呼叫 val lis.next 判斷乙個物件是否是迭代器 內部是否有 next 方法.v1 11,22,33,44 列表轉換成迭代器 v2 iter v1 result1 v2.next print result1 result2 v2.next print result...

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...