首頁  >  文章  >  後端開發  >  Python迭代器定義與簡單用法分析

Python迭代器定義與簡單用法分析

不言
不言原創
2018-05-02 15:41:381524瀏覽

這篇文章主要介紹了Python迭代器定義與簡單用法,結合實例形式分析了迭代器的概念、原理、創建及使用方法,需要的朋友可以參考下

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

一、什麼是迭代器

迭代,顧名思義就是重複做一些事很多次(就現在循環中做的那樣)。迭代器是實現了__next__()方法的物件(這個方法在呼叫時不需要任何參數),它是訪問可迭代序列的一種方式,通常從序列的第一個元素開始訪問,直到所有的元素都被訪問才結束。 [注意]:迭代器只能前進不能後退

[迭代器的優點]:

##使用迭代器不要求事先準備好整個迭代過程中的所有元素。迭代器僅在迭代到某個元素時才計算該元素,而在這之前或之後元素可以不存在或被銷毀。因此迭代器適合遍歷一些數量巨大甚至無限的序列。

 二、建立迭代器

#A、使用內建的工廠函數iter(iterable)可以將可迭代序列轉換為迭代器

a=[1,2,3,4]
b=(1,2,3)
str='Tomwenxing'
print(iter(a))
print(iter(b))
print(iter(str))

運行結果:

#70ffc850aaa41dff99c29900598e9d2d

6c04a47b9eeec1a953e4c55df7706e87

B、自訂迭代器

•Python中迭代器的本質上每次呼叫

__next__()

方法都會傳回下一個元素或拋出StopIteration的容器物件•由於Python中沒有「迭代器」這個類,因此具有以下兩個特性的類別都可以稱為「迭代器」類別:

  1、有

__next__()

方法,返回容器的下一個元素或拋出StopIteration異常  2、有

__iter__()

方法,傳回迭代器本身<pre class="brush:py;">#斐波那契数列 class Fabs(): def __init__(self,max): self.max=max self.n,self.a,self.b=0,0,1 def __iter__(self):#定义__iter__方法 return self def __next__(self):#定义__next__方法 if self.n&lt;self.max: tmp=self.b self.a,self.b=self.b,self.a+self.b #等价于: #t=(self.a,self.a+self.b) #self.a=t[0] #self.b=t[1] self.n+=1 return tmp raise StopIteration print(Fabs(5)) for item in Fabs(10): print(item,end=&amp;#39; &amp;#39;)</pre>運行結果:

d210c61fd2686fd6b5edf12782e8f0cc
1 1 2 3 5 8 13 21 34 55


三、迭代器的方法

1.iter.__next__():返回迭代器的下一個元素,但沒有下一個元素時拋出StopIteration異常

#

list=[1,2,3,4]
list=iter(list)
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())
print(list.__next__())
執行結果:

Traceback (most recent call last):

  File "E:\py3Demo\Hello\iterDemo.py", line 7, in ebd0bbe24dfe59cf0aa1a3900a00d42a
    print(list.__next__())

StopIteration
1
2
3
4


#2.iter.__iter__ ():傳回迭代器物件本身

list=[1,2,3,4]
list=iter(list)
print(list.__iter__())
運行結果:

#0abd120954ee99d0333ef82d6f366b67

################################################################ ########相關建議:######### python迭代器中next()的用法範例#######

以上是Python迭代器定義與簡單用法分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn