python中的 迭代器(如同遍歷一般理解)

2021-08-27 16:16:37 字數 3307 閱讀 8532

如同遍歷一般,這樣理解起來可以發現不是特別的繞,剛開始的時候我覺得這個迭代特別的不好理解,概念看來好幾遍,還是一頭蒙。突然發現把迭代這兩詞換成遍歷這之後,思路一下就開啟了!

先一步一步的來了解吧~

使用for迴圈遍歷取值的過程叫做迭代,比如:使用for迴圈遍歷列表獲取值的過程。

for

value

in [2, 3, 4]:

print(value)

結果:23

4

使用for迴圈遍歷取值的物件叫做可迭代物件, 比如:列表、元組、字典、集合、range、字串

可迭代的物件說明是可以被迭代(遍歷)的,但是只有迭代器可以使用!

不好理解,先不看著裡~~~

iter函式: 獲取可迭代物件的迭代器,會呼叫可迭代物件身上的iter方法

next函式: 獲取迭代器中下乙個值,會呼叫迭代器物件身上的next方法

也就是說:這兩個函式必須同時在乙個類裡,同時實現兩個方法。

自定義可迭代物件: 在類裡面定義__iter__方法建立的物件就是*可迭代(遍歷)物件*

class

mylist(object):

def__init__(self,age):

# 初始化

self.age = age

def__iter__(self):

# 返回本身

return

self

"說明:這個類是可迭代物件,實現了__iter__ 方法。

到這裡只能說明,是可以被迭代(遍歷),

如同現在就是乙個列表;可以做為遍歷取值的物件。"

# 現在它只是迭代器的一部分,只實現了兩個方法中的乙個。

自定義迭代器物件: 在類裡面定義iternext方法建立的物件就是迭代器物件。

這裡同時實現兩個方法,所以叫迭代器。

class

myclass

(object):

"""功能:實現迭代出任意範圍數字的值;

例如:遍歷出1到100的數字。

"""# 初始化

def__init__

(self, age):

self.age = age

self.num = 0

# 作用:把這個類變成乙個可迭代物件

def__iter__

(self):

return self

def__next__

(self):

"""根據條件實現的功能主要是寫在這!"""

# 判斷是否大於遍歷的值

if self.num >= self.age:

# 停止迭代(遍歷)

raise stopiteration

else:

# 繼續迭代(遍歷)直到滿足條件為止

self.num += 1

return self.num

#建立物件

myclass = myclass(100)

#使用for迴圈遍歷,說明這個類是迭代器。

for x in myclass:

print(x)

結果:

1 2

3 4

…. …..

99 100

迭代器:就是定義乙個類,在類裡面實現iternext這兩個方法;則這個類就是 迭代器;可以使用for迭代(遍歷)。

(個人理解)注:

iter的作用是把 這類變成 可迭代(遍歷)的物件,返回本身。

next就是能在迭代(遍歷)的時候,依次取出下乙個值。

———-迭代器:我們發現迭代器最核心的功能就是可以通過next()函式的呼叫來返回下乙個資料值。如果每次返回的資料值不是在乙個已有的資料集合中讀取的,而是通過程式按照一定的規律計算生成的。

———意味著不在依賴乙個已有的資料集合,也就是說不用再將所有要迭代的資料都一次性快取下來供後續依次讀取,這樣可以節省大量的儲存(記憶體)空間。

舉個例子,比如,數學中有個著名的斐波拉契數列(fibonacci),數列中第乙個數為0,第二個數為1,其後的每乙個數都可由前兩個數相加得到:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …

現在我們想要通過for…in…迴圈來遍歷迭代斐波那契數列中的前n個數。那麼這個斐波那契數列我們就可以用迭代器來實現,每次迭代都通過數學計算來生成下乙個數。

class

fibonacci

(object):

def__init__

(self, num):

# num:表示生成多少fibonacci數字

self.num = num

# 記錄(斐波拉契數列)fibonacci前兩個值,

self.a = 0

self.b = 1

# 記錄當前生成數字的索引

self.current_index = 0

def__iter__

(self):

return self

def__next__

(self):

if self.current_index < self.num:

result = self.a

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

self.current_index += 1

return result

else:

raise stopiteration

fib = fibonacci(5)

# value = next(fib)

# print(value)

for value in fib:

print(value)

執行結果:

0 1

1 2

3

python 手動遍歷迭代器

想遍歷乙個可迭代物件中的所有元素,但是卻不想使用for 迴圈 為了手動的遍歷可迭代物件,使用next 函式並在 中捕獲stopiteration 異常。比如,下面的例子手動讀取乙個檔案中的所有行 def manual iter with open etc passwd as f try while ...

python 手動遍歷迭代器

想遍歷乙個可迭代物件中的所有元素,但是卻不想使用for 迴圈 為了手動的遍歷可迭代物件,使用next 函式並在 中捕獲stopiteration 異常。比如,下面的例子手動讀取乙個檔案中的所有行 def manual iter with open etc passwd as f try while ...

python中迭代器 python中的迭代器

如果給定乙個list或tuple,我們可以通過for迴圈來遍歷這個list或tuple,這種遍歷我們稱為迭代 iteration d for key in d print key ac b當我們使用for迴圈時,只要作用於乙個可迭代物件,for迴圈就可以正常執行,而我們不太關心該物件究竟是list還...