迭代器可以記住遍歷的位置
迭代器只能前進不能後退
迭代器物件從第乙個元素開始訪問,直到所有元素被訪問完
列表、元組、字典、集合、字串均屬於可迭代物件
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中新增了海象運算子 可以在區域性 塊中的表示式給變數賦值,並且該變數可以用於該 塊中。該...