国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python迭代器和生成器定義與用法示例

2020-02-22 23:11:38
字體:
來源:轉載
供稿:網友

本文實例講述了Python迭代器和生成器定義與用法。分享給大家供大家參考,具體如下:

迭代器 iter()

迭代器是訪問集合中元素的一種方式,迭代器 object 從集合中的第一個元素開始訪問,直到所有的元素被訪問完成.

所以迭代器的特點是:只能往前,不能后退

迭代器的優點:不需要提前準備整個迭代器中的所有元素,僅僅迭代到某個元素時才計算該元素,而之前或者之后,元素可以不存在或者銷毀.因為這個特點,迭代器特別適合遍歷文件比較大或者無限的集合.

總結下迭代器 iter()的特點吧:

1.訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容
2.不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問
3.訪問到一半時不能往回退
4.便于循環比較大的數據集合,節省內存

**迭代器是用__next__()來取值的,來看個例子吧:

li=[1,2,3,4,56,78]a=iter(li)print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__())print(a.__next__()) #取值到最后一個元素787print(a.__next__())

輸出:

12345678#開始報錯Traceback (most recent call last): File "/Users/shane/PycharmProjects/Py_study/Base/S5/iter_test.py", line 14, in <module>  print(a.__next__())StopIteration

生成器generator

一個函數調用時返回一個迭代器,那這個函數就叫做生成器(generator);如果函數中包含yield語法,那這個函數就會變成生成器

yield是個什么鬼?yield 其實和函數中的 return 一樣,一樣的是都會返回定義好的值,但不同的是,return 是退出函數,yield 只是暫停函數執行,等待下一次迭代器取值

我們來看個例子:

def func():  print(111)  yield 1  print(222)  yield 2  print(333)  yield 3ret=func()r1=ret.__next__()print(r1) #如果沒有 print,只會返回111

out:

1111

一個典型的生成器的取值方式:

def func():  print(111)  yield 1  print(222)  yield 2  print(333)  yield 3ret=func()r1=ret.__next__()print(r1)r2=ret.__next__()print(r2)r3=ret.__next__()print(r3)r4=ret.__next__()  #如果沒有 r4就不會報錯,因為已經沒值可取了print(r4)

out:

Traceback (most recent call last): File "/Users/shane/PycharmProjects/Py_study/Base/S5/geno.py", line 21, in <module>  r4=ret.__next__()StopIteration111122223333

進程已結束,退出代碼1

來看一個比較完整一點的生成器和迭代器吧:

def myrange(args):  start=0  while True:    if start > args:      return    else:      yield start      start+=1res=myrange(3)ret=res.__next__()print(ret)ret=res.__next__()print(ret)ret=res.__next__()print(ret)ret=res.__next__()print(ret)ret=res.__next__()print(ret)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海宁市| 滦南县| 莱州市| 灌南县| 天长市| 彭阳县| 赫章县| 太湖县| 南丰县| 西宁市| 大同市| 怀宁县| 得荣县| 博乐市| 荃湾区| 钟山县| 呼伦贝尔市| 黄梅县| 全椒县| 麻城市| 延长县| 蒙城县| 岳阳市| 汉源县| 康保县| 文山县| 织金县| 淅川县| 浠水县| 巴林左旗| 辰溪县| 台安县| 西城区| 武清区| 临城县| 安龙县| 绵竹市| 班戈县| 固始县| 双峰县| 桐庐县|