最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實(shí)例講解Python 迭代器與生成器

 更新時(shí)間:2020年07月08日 15:47:39   作者:菜鳥教程  
這篇文章主要介紹了Python 迭代器與生成器的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

迭代器

迭代是Python最強(qiáng)大的功能之一,是訪問集合元素的一種方式。

迭代器是一個(gè)可以記住遍歷的位置的對象。

迭代器對象從集合的第一個(gè)元素開始訪問,直到所有的元素被訪問完結(jié)束。迭代器只能往前不會(huì)后退。

迭代器有兩個(gè)基本的方法:iter() 和 next()。

字符串,列表或元組對象都可用于創(chuàng)建迭代器:

>>> list=[1,2,3,4]
>>> it = iter(list) # 創(chuàng)建迭代器對象
>>> print (next(it)) # 輸出迭代器的下一個(gè)元素
1
>>> print (next(it))
2
>>>

迭代器對象可以使用常規(guī)for語句進(jìn)行遍歷:

#!/usr/bin/python3
 
list=[1,2,3,4]
it = iter(list) # 創(chuàng)建迭代器對象
for x in it:
 print (x, end=" ")

執(zhí)行以上程序,輸出結(jié)果如下:

1 2 3 4

也可以使用 next() 函數(shù):

#!/usr/bin/python3
 
import sys   # 引入 sys 模塊
 
list=[1,2,3,4]
it = iter(list) # 創(chuàng)建迭代器對象
 
while True:
 try:
  print (next(it))
 except StopIteration:
  sys.exit()

執(zhí)行以上程序,輸出結(jié)果如下:

1
2
3
4

創(chuàng)建一個(gè)迭代器

把一個(gè)類作為一個(gè)迭代器使用需要在類中實(shí)現(xiàn)兩個(gè)方法 __iter__() 與 __next__() 。

如果你已經(jīng)了解的面向?qū)ο缶幊?,就知道類都有一個(gè)構(gòu)造函數(shù),Python 的構(gòu)造函數(shù)為 __init__(), 它會(huì)在對象初始化的時(shí)候執(zhí)行。

__iter__() 方法返回一個(gè)特殊的迭代器對象, 這個(gè)迭代器對象實(shí)現(xiàn)了 __next__() 方法并通過 StopIteration 異常標(biāo)識迭代的完成。

__next__() 方法(Python 2 里是 next())會(huì)返回下一個(gè)迭代器對象。

創(chuàng)建一個(gè)返回?cái)?shù)字的迭代器,初始值為 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))
print(next(myiter))

執(zhí)行輸出結(jié)果為:

1
2
3
4
5

StopIteration

StopIteration 異常用于標(biāo)識迭代的完成,防止出現(xiàn)無限循環(huán)的情況,在 __next__() 方法中我們可以設(shè)置在完成指定循環(huán)次數(shù)后觸發(fā) StopIteration 異常來結(jié)束迭代。

在 20 次迭代后停止執(zhí)行:

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)

執(zhí)行輸出結(jié)果為:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

生成器

在 Python 中,使用了 yield 的函數(shù)被稱為生成器(generator)。

跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡單點(diǎn)理解生成器就是一個(gè)迭代器。

在調(diào)用生成器運(yùn)行的過程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回 yield 的值, 并在下一次執(zhí)行 next() 方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。

調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對象。

以下實(shí)例使用 yield 實(shí)現(xiàn)斐波那契數(shù)列:

#!/usr/bin/python3
 
import sys
 
def fibonacci(n): # 生成器函數(shù) - 斐波那契
 a, b, counter = 0, 1, 0
 while True:
  if (counter > n): 
   return
  yield a
  a, b = b, a + b
  counter += 1
f = fibonacci(10) # f 是一個(gè)迭代器,由生成器返回生成
 
while True:
 try:
  print (next(f), end=" ")
 except StopIteration:
  sys.exit()

執(zhí)行以上程序,輸出結(jié)果如下:

0 1 1 2 3 5 8 13 21 34 55

以上就是實(shí)例講解Python 迭代器與生成器的詳細(xì)內(nèi)容,更多關(guān)于Python 迭代器與生成器的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

黎城县| 曲沃县| 隆林| 泉州市| 兴国县| 原平市| 唐海县| 驻马店市| 讷河市| 白河县| 雷山县| 牙克石市| 县级市| 西安市| 通榆县| 文昌市| 达拉特旗| 都兰县| 景宁| 崇明县| 邵武市| 邵东县| 章丘市| 永州市| 赫章县| 成都市| 玉溪市| 东阿县| 鹰潭市| 宜兴市| 西乡县| 卓尼县| 儋州市| 闽清县| 永靖县| 哈密市| 福鼎市| 东辽县| 板桥市| 澎湖县| 金寨县|