溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python3中怎么手動(dòng)創(chuàng)建一個(gè)迭代器

發(fā)布時(shí)間:2021-06-17 15:55:40 來(lái)源:億速云 閱讀:118 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Python3中怎么手動(dòng)創(chuàng)建一個(gè)迭代器,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

迭代器即可以遍歷諸如列表,字典及字符串等序列對(duì)象甚至自定義對(duì)象的對(duì)象,其本質(zhì)就是記錄迭代對(duì)象中每個(gè)元素的位置。迭代過(guò)程從第一個(gè)元素至最后一個(gè)元素,且過(guò)程不能回滾或反方向迭代。

兩個(gè)基本方法iter、next

序列對(duì)象可以利用 iter() 直接創(chuàng)建迭代器,并通過(guò) next() 即可迭代迭代器。

利用for循環(huán)迭代

S = 'PYTHON'
IT = iter(S)
for it in IT:
  print(it)

示例結(jié)果:

P
Y
T
H
O
N

利用next()迭代

S = 'PYTHON'
IT = iter(S)
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))
print(next(IT))

示例結(jié)果:

P
Y
T
H
O
N

當(dāng)我們使用next()迭代時(shí),如果迭代了次數(shù)超過(guò)了迭代器中的元素個(gè)數(shù)就會(huì)引發(fā) StopIteration ,由此我們可以利用 while 循環(huán)迭代,并不斷捕捉迭代結(jié)束的異常完成for循環(huán)的迭代過(guò)程。

S = 'PYTHON'
IT = iter(S)
while True:
  try:
    print(next(IT))
  except StopIteration:
    break

P
Y
T
H
O
N

手動(dòng)構(gòu)建迭代器

把一個(gè)類作為一個(gè)迭代器使用需要在類中實(shí)現(xiàn)兩個(gè)方法 iter () 與 next () 。 iter () 方法返回一個(gè)特殊的迭代器對(duì)象, 這個(gè)迭代器對(duì)象實(shí)現(xiàn)了 next () 方法并通過(guò) StopIteration 異常標(biāo)識(shí)迭代的完成。 next () 方法(Python 2 里是 next())會(huì)返回下一個(gè)迭代器對(duì)象。下面這個(gè)類構(gòu)造了一個(gè)迭代器接受一個(gè)可迭代的數(shù)字,每次迭代都返回上一次迭代結(jié)果的平方,當(dāng)?shù)Y(jié)果大于 9999999999999 時(shí)拋出異常。利用該類創(chuàng)建示例對(duì)數(shù)字2進(jìn)行平方和迭代。

class IT_SQUARE:
  def __init__(self, x):
    self.x = x

  def __next__(self):
    self.x = self.x ** 2
    if self.x > 9999999999999:
      raise StopIteration
    
    else:
      return self.x

  def __iter__(self):
    return self
 
IT1 = IT_SQUARE(2)
 
while True:
  try:
    print(IT1.__next__())
  except StopIteration:
    break

示例結(jié)果

4
16
256
65536
4294967296

關(guān)于Python3中怎么手動(dòng)創(chuàng)建一個(gè)迭代器就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI