[Python]小甲鱼Python视频第048课(魔法方法:迭代器) )课后题及参考解答
# -*- coding: utf-8 -*- """ Created on Sun Mar 24 20:24:02 2019 @author: fengs """ """ 0. 请用你的话解释一下“迭代”的概念? 重复相同的操作,将上一次操作的输出时的状态当次本次操作的输入状态 1. 迭代器是一个容器吗? 不是,迭代是一个计算得出后续状态的过程(__next__()),容器是已经存在,去取就行。 2. 迭代器可以回退(获取上一个值)吗? 不能 3. 如何快速判断一个容器是否具有迭代功能? isinstance(a,itera) 是否有 __iter__()和 __next__() 魔法方法 4. for 语句如何判断迭代器里边已经取空了? 接管了迭代已经停止的异常,遇到迭代停止异常就认为是取空 5. 在 Python 原生支持的数据结构中,你知道哪一个是只能用迭代器访问的吗. 无序的集合 """ """ 0. 用 while 语句实现与以下 for 语句相同的功能: for each in range(5): print(each) """ iter_range = iter(range(5)) while True: try: each = next(iter_range); print(each) except StopIteration: break """ 1. 写一个迭代器,要求输出至今为止的所有闰年。如 >>> leapYears = LeapYear() >>> for i in leapYears: if i >=2000: print(i) else: break 2016W 2012 2008 2004 2000 """ import time class LeapYear(): def __init__(self): self.year = time.localtime().tm_year #print(self.year) def isLeap(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 True: if self.isLeap(self.year) == False: self.year -= 1 else: break tmp = self.year; self.year -= 1 return tmp; print('---------------------------------') leapYears = LeapYear() for i in leapYears: if i >=2000: print(i) else: break print('---------------------------------') """ 2. 要求自己写一个 MyRev 类,功能与 reversed() 相同(内置函数 reversed(seq) 是返回一个迭代器,是序列 seq 的逆序显示)。例如: >>> myRev = MyRev("FishC") >>> for i in myRev: print(i, end='') ChsiF """ class MyRev(): def __init__(self,value): self.value = value; self.idx = len(self.value) def __iter__(self): return self def __next__(self): self.idx -= 1 if self.idx >= 0: return self.value[self.idx] else: raise StopIteration myRev = MyRev("FishC") print('------------------') for i in myRev: print(i, end='') print('\n------------------')
~不再更新,都不让我写公式,博客园太拉胯了