#!/usr/bin/env python
# coding:UTF-8
"""
@version: python3.x
@author:曹新健
@contact: 617349013@qq.com
@software: PyCharm
@file: iterable协议.py
@time: 2018/11/6 15:46
"""
"""
1、具有__iter__()方法的对象,就是一个iterable(可迭代)对象。
2、可以使用iter()方法从一个iterable对象获取迭代器,返回的迭代具有__next__()方法,可逐一迭代出对象中的
信息,无法进一步迭代时,会引发StopIteration例外。
3、迭代器也具有__iter__()方法,返回迭代器自身,所以迭代器本身也是一个iterable对象。
4、生成器也是一种迭代器,对于大部分需求,使用yield语句创建生成器比较简单而直接。
5、对于状态比较复杂的对象,在生成器不适合时,就需要自己实现__iter__()方法来创建迭代器。
6、实际上很少会有机会直接调用__iter__()方法,或者使用iter()方法获取迭代器,因为python标准链接库很多情
况下都接受iterable对象,在内部自动帮你调用__iter__()方法。比如set([1,2,3])会自动创建{1,2,3}
"""
#自定义itertools模块中的repeat
#使用生成器
def repeat(item,n):
for i in range(n):
yield item
#自定义__iter__()方法
class Repeat:
def __init__(self,item,n):
self.item = item
self.n = n
def __iter__(self):
item = self.item
n = self.n
class _iter:
def __init__(self):
self.cnt = 0
def __next__(self):
if self.cnt < n:
self.cnt += 1
return item
else:
raise StopIteration
def __iter__(self):
return self
return _iter()
if __name__ == "__main__":
for it in repeat("cxj",5):
print(it,sep="",end="")
print("")
for it in Repeat("Good",5):
print(it, sep="", end="")