參考內容來自牛客網–編程入門教程,
文章目錄
- 1.迭代器
- 1.概念:
- 2.基本方法:
- 3.創建迭代器
- 4.StopIteration
- 2.生成器
- 1.概念
- 2.示例
- 3.問題求解?
1.迭代器
1.概念:
迭代器是Python最強大的功能之一,是訪問集合元素的一種方式,
迭代器是一種可以記住遍歷的位置的物件,
迭代器物件從集合的第一個元素開始訪問,直到所有的元素訪問結束,迭代器只能往前不能后退,
2.基本方法:
迭代器兩個基本方法:iter()和next(),
注意:字串,串列,元組物件都可以創建迭代器,




運行結果:

3.創建迭代器
把一個類作為一個迭代器使用就需要在類中實作兩個方法iter() 和next().
在Python中定義類經常會用到__init__函式(方法),首先需要理解的是,兩個下劃線開頭的函式是宣告該屬性為私有,不能在類的外部被使用或訪問,而__init__函式(方法)支持帶引數類的初始化,也可為宣告該類的屬性(類中的變數),__init__函式(方法)的第一個引數必須為self,后續引數為自己定義,
+++++++++++++++++++++++++++++++++++++++++++++++++++
iter() 方法回傳一個特殊的迭代器物件,這個迭代器物件實作next()方法,通過StopIteration例外標識迭代的完成,
next() 方法回傳下一個迭代器物件,
案例
創建一個回傳數字迭代器,初始值為1,逐步遞增1.
class MyNumbers:
#兩個下劃線開頭的函式是宣告該屬性為私有,不能在類的外部被使用或訪問,
def __iter__(self):
self.a = 1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass =MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
運行結果:

4.StopIteration
StopIteration 例外用于表示迭代的完成,防止出現無限回圈的情況,在next()方法中我們可以設定在完成指定回圈次數后出發StopIteration 例外來結束迭代,
class MyNumbers:
#兩個下劃線開頭的函式是宣告該屬性為私有,不能在類的外部被使用或訪問,
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x,end = " ")#end= " "意思就是以空格為間隔,逐次輸出
#print(x) #隔行輸出
運行結果展示:

2.生成器
1.概念
在Python中,使用yield的函式被稱為生成器(generator),
生成器是一個回傳迭代器的函式,只能用于迭代操作,更簡單的理解生成器就是一個迭代器,在呼叫生成器運行的程序中,每次遇到yield時函式會暫停并保存當前所有的運行資訊,回傳yield的值,并在下一次執行next()方法的時候從當前位置繼續運行,呼叫一個生成器函式,回傳的是一個迭代器物件,
2.示例
1.使用yield實作斐波拉契數列,
import sys
def fibonacci(n): #生成器函式-斐波拉契
a,b = 0,1
count = 0
while True:
if (count >n):
return
yield a
a,b = b,a+b
count += 1
f = fibonacci(10) #f是一個迭代器,由生成器回傳生成
while True:
try:
print(next(f),end =" ")
except StopIteration:
sys.exit()
運行結果:


3.問題求解?
不知道為什么,同樣的代碼在jupyter notebook里面有錯誤,而在pycharm里面卻很正常,不知道你為什么 ?


轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/258958.html
標籤:python
上一篇:Python入門:條件陳述句
下一篇:說說 Python 中的閉包
