python3 8 三利器之 迭代器

2021-10-23 20:44:21 字數 3265 閱讀 9761

迭代器可以記住遍歷的位置

迭代器只能前進不能後退

迭代器物件從第乙個元素開始訪問,直到所有元素被訪問完

列表、元組、字典、集合、字串均屬於可迭代物件

from collections import iterable,iterator

#iterable,iterator:前者用於判斷物件是否是乙個可迭代物件,後者用於判斷是否是乙個迭代器

# 列表是可迭代物件,所以下面的print列印true

x =[1,

2,3,

45,'asd'

]print

(isinstance

(x, iterable)

)>>

>

true

通過列表推倒式獲取迭代器,將[

]改為(

)則獲得最簡易的生成器

y =[x for x in

range(10

)]# 迭代器

z =(x for x in

range(10

))# 生成器

print

(type

(y))

>>

>

<

class

'list'

>

print

(type

(z))

>>

>

<

class

'generator'

>

print

(isinstance

(z, iterable)

)>>

>

true

print

(isinstance

(z, iterable)

)>>

>

true

print

(isinstance

(y, iterator)

)>>

>

false

print

(isinstance

(z, iterator)

)>>

>

true

由上可知:y是乙個可迭代物件,但是不乙個迭代器

迭代器可以通過__next__方法遍歷,但如果超過迭代物件本身的範圍,就會報stopiteration錯誤

a =

'hello'

b = a.__iter__(

)print

(b.__next__())

>>

> h

print

(b.__next__())

>>

> e

print

(b.__next__())

>>

> l

print

(b.__next__())

>>

> l

print

(b.__next__())

>>

> o

print

(b.__next__())

>>

> 報錯,stopiteration超出範圍,停止迭代

下面實現類,以實現迭代功能

class

mylist

(object):

def__init__

(self)

: self.newlist =

list()

def(self, data)

:"""

該方法實現了增加乙個元素到列表到末尾

:param data:

:return:

"""def__iter__

(self)

:"""

__iter__表示該類實力化的物件是乙個可迭代物件,這個魔法方法獲取的是__iter__方法中的迭代器

:return:

"""iterobj = myiterator(self.newlist)

return iterobj

lass myiterator(

object):

""" 這個類實現的是迭代器的類

"""def__init__

(self, newlist)

: self.newlist = newlist

self.current_index =

0# 記錄當前迭代的索引

def__iter__

(self)

:return self

def__next__

(self)

:"""

當前的魔法方法用來記錄遍歷的位置,第二功能記錄需要獲取的值

:return:

"""if self.current_index <

len(self.newlist)

: self.current_index +=

1return self.newlist[self.current_index -1]

else

:raise stopiteration # for迴圈自動捕獲到stopiteration後自動結束迴圈

list1 = mylist(

)print

(isinstance

(list1, iterable)

)print

(iter

(list1)

)# 報錯,說明可迭代物件並不一定有迭代器

# todo 可迭代物件不一定是迭代器,但迭代器一定是可迭代物件!

# 1)可迭代物件包含迭代器。

# 2)如果乙個物件擁有__iter__方法,其是可迭代物件;如果乙個物件擁有next方法,其是迭代器。

# 3)定義可迭代物件,必須實現__iter__方法;定義迭代器,必須實現__iter__和next方法。

obj = myiterator([1

,2,3

,4,5

])for i in obj:

print

(i)

for迴圈的本質:如果物件是乙個迭代器,則直接遍歷,若是乙個可迭代物件,則先通過iter()尋找迭代器,然後再遍歷

iter() 獲取的是物件內部的__iter__魔術方法,在裡面一般寫為 return self

next() 獲取的是物件內部的 __next__魔術方法,第乙個功能是記錄了訪問位置,第二個功能則是將訪問的資料返回

雲伺服器安裝Python3 8

cd usr mkdir download 再 usr download 解壓軟體包 tar xvf python 3.8.5.tgz解壓完成後 這裡要插一句話 如果你之前安裝過python3版本,我之前是安裝了python3.6.5的版本,先要進行解除安裝。使用如下命令 rpm qa grep p...

阿里雲伺服器安裝Python3 8

centos 7.7 64位 wget 注意 只刪除python2的軟鏈結就行,千萬不要解除安裝python2,千萬不要解除安裝python2,千萬不要解除安裝python2,重要的事情說3遍 由於執行centos的yum命令需要使用自帶的python2的版本,所以需要做兩處修改,將需要python...

python3 8中新增的三個特性

由於之前學習以及專案中一直用的是python3.6.5,最近幾天在學習之餘看了一下python3.8的官方文件,了解了一下python3.8.x中新增的特性。以此來記錄一下。1.海象運算子 python3.8.x中新增了海象運算子 可以在區域性 塊中的表示式給變數賦值,並且該變數可以用於該 塊中。該...