国产探花免费观看_亚洲丰满少妇自慰呻吟_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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵武市| 门头沟区| 台北市| 大方县| 乌海市| 嘉荫县| 马山县| 屏东县| 余江县| 平昌县| 叶城县| 祥云县| 万源市| 昆明市| 吉木乃县| 柳河县| 武平县| 栾川县| 青神县| 涪陵区| 长寿区| 崇义县| 图片| 微山县| 海淀区| 淮南市| 鲁甸县| 家居| 旌德县| 宜良县| 象州县| 天等县| 枝江市| 德昌县| 渝北区| 托克托县| 温宿县| 虞城县| 高雄县| 策勒县| 饶阳县|