欧美老妇交乱视频_福利片在线观看_欧美日本在线观看_人人色视频_狠狠爱综合网_成人精品一区二区三区

您現(xiàn)在的位置是:首頁(yè) >python教程 >python教程十六 迭代器與生成器網(wǎng)站首頁(yè)python教程

python教程十六 迭代器與生成器

三只小菜猿 2023-02-10 09:35:44
簡(jiǎn)介在調(diào)用生成器運(yùn)行的過(guò)程中,每次遇到 yield 時(shí)函數(shù)會(huì)暫停并保存當(dāng)前所有的運(yùn)行信息,返回 yield 的值, 并在下一次執(zhí)行 next() 方法時(shí)從當(dāng)前位置繼續(xù)運(yùn)行。跟普通函數(shù)不同的是,生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作,更簡(jiǎn)單點(diǎn)理解生成器就是一個(gè)迭代器。迭代器對(duì)象從集合的第一個(gè)元素開(kāi)始訪問(wèn),直到所有的元素被訪問(wèn)完結(jié)束。迭代器只能往前不會(huì)后退。() 方法返回一個(gè)特殊的迭代器對(duì)象, 這個(gè)迭代器對(duì)象實(shí)現(xiàn)了。調(diào)用一個(gè)生成器函數(shù),返回的是一個(gè)迭代器對(duì)象。迭代器是一個(gè)可以記住遍歷的位置的對(duì)象。

迭代器

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

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

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

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

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

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

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

#!/usr/bin/python3
 
list=[1,2,3,4]
it = iter(list)    # 創(chuàng)建迭代器對(duì)象
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)建迭代器對(duì)象
 
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ì)在對(duì)象初始化的時(shí)候執(zhí)行。

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

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

創(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)識(shí)迭代的完成,防止出現(xiàn)無(wú)限循環(huán)的情況,在 next() 方法中我們可以設(shè)置在完成指定循環(huán)次數(shù)后觸發(fā) StopIteration 異常來(lái)結(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ù),只能用于迭代操作,更簡(jiǎn)單點(diǎn)理解生成器就是一個(gè)迭代器。

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

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

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

#!/usr/bin/python3
 
import sys
 
def fibonacci(n): # 生成器函數(shù) - 斐波那契
    a, b, counter = 010
    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


夢(mèng)想加空間!平時(shí)喜歡研究各種技術(shù),目前在從事后端開(kāi)發(fā)工作,熱愛(ài)生活、熱愛(ài)工作。
主站蜘蛛池模板: 日韩电影在线看 | www.97超碰.com | 久久久国色 | 亚洲精品日韩激情在线电影 | 97视频在线 | 免费欧美| 99久久精品一区二区成人 | 在线小视频 | 黄色网页观看 | 亚洲高清视频一区 | 久久久成人动漫 | 欧美久久久久久久久久 | 成人不卡在线观看 | 国产高清在线精品一区二区三区 | 亚洲免费精品 | 久久亚洲精品国产精品紫薇 | 国产一区二区视频在线 | 91日韩精品一区二区三区 | 日韩av中文 | 亚洲精品视频在线播放 | 日本天天操 | 福利久久 | 亚洲免费在线 | 成人久久一区 | 精品欧美一区二区三区久久久 | 免费污视频在线 | 亚洲视频免费 | 伊人春色在线播放 | 久久久国产一区二区三区 | 午夜爱| 日韩在线精品强乱中文字幕 | 国产精品日韩欧美一区二区三区 | 久久亚洲精品中文字幕 | 自拍偷拍亚洲欧美 | 日韩中文字幕在线播放 | 久久久久久国产精品mv | 国产精品久久久久久久久久久久久 | 午夜精品久久久久久久久 | 免费成人在线观看 | av7777| 久久精品亚洲精品 |