读书笔记:
iterator 是迭代器。
迭代器有两种方法:
iter(可迭代的对象):返回一个迭代器
next(迭代器): 返回迭代器的下一个元素,若果迭代器为空,将引发StopIteration
演示:
>>> string = "zss041962"
>>> iter(string)
<str_iterator object at 0x0000000002F53B38>
>>> iter(range(10))
<range_iterator object at 0x0000000002F2EFD0>
>>> it = iter(range(10))
>>> next(it)
0
>>> next(it)
1
演示斐波那契数列
可以设置终止迭代条件,如下
if 条件:
raise StopIteration
>>> class Fibs:
def __init__(self,n = 10):
self.a = 0
self.b = 1
self.n = n
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > self.n :
raise StopIteration
return self.a
>>> f = Fibs()
>>> for i in f:
print(i)
1
1
2
3
5
8
>>>
改写代码:
import time as t
class LeapYear:
#从begin到现在为止的所有闰年
def __init__(self,begin = 1980 ):
self.now = t.localtime()[0]
self.begin = begin
def isLeapYear(self,year):
if year%4 == 0 and year%100 != 0 or year%400 == 0 :
return True
else:
return False
def __iter__(self):
return self
def __next__(self):
while not self.isLeapYear(self.now):#找第一个闰年
self.now -= 1
temp = self.now#保存第一个闰年
self.now -= 1 #为下次迭代作准备
if self.now < self.begin:
raise StopIteration
return temp
"""
>>> leapyear = LeapYear(1900)
>>> years = LeapYear(1900)
>>> cnt = 0
>>> for y in years:
cnt += 1
s = "\n"
if cnt%10:
s = " "
print(y,end = s)