1. 程式人生 > >10.5叠代器

10.5叠代器

Python 叠代器 叠代器協議 for循環

叠代器

叠代器協議:
滿足兩個條件:1.有iter方法;2.有next方法

# -*-coding:utf-8 -*-
__date__ = ‘2018/3/18 ‘
__author__ = ‘xiaojiaxin‘
__file_name__ = ‘叠代器‘

#生成器都是叠代器,叠代器不一定是生成器

l=[1,2,3,4]
d=iter(l)
print(d)
# <list_iterator object at 0x000000CB6FC4B1D0>
print(next(d))
for i in d:
     print(i)

for循環內部三件事:
1.調用可叠代對象的iter方法,返回一個叠代器對象;

2.調用叠代器的next方法
3.處理StopIteration方法

for i in [1,2,3,4]:
    print(i)
# [1,2,3,4]本身沒有next方法,是for循環給他做的
from collections import Iterator
from collections import Iterable
print(isinstance([1,2,3,4],list))  #判斷是否為指定數據類型
# True
print(isinstance(1,list))
# False
print(isinstance([1,2],Iterable))
# True
print(isinstance([1,2],Iterator))
# False

# [1,2]是可叠代對象,但是不是叠代器
在for 循環裏也把文件轉換成了叠代器
max1=0
record=0
count=1
with open("hello.txt","r",encoding="utf-8")  as f:
    for i in f:
        if len(i.strip())>max1:
            max1=len(i)
            record=i
            count+=1

print("the longest sentence is %s,it is the  %d line,It has %d words"%(record,count,max1))

大家對內容有任何問題,歡迎留言,一定在第一時間解答,謝謝大家!

10.5叠代器