迭代
可迭代对象iterable
1.定义
具有__iter__函数的对象,可以返回迭代器对象
2.语法
--创建:
class 可迭代对象名称:
def __iter__(self):
return 迭代器
--使用:
for 变量名 in 可迭代对象:
...
3.实例
class SkillIteror:
def __init__(self,skills):
self.__skills = skills
self.__index = -1
def __next__(self):
if len(self.__skills) - 1 == self.__index:
raise StopIteration()
self.__index += 1
return self.__skills[self.__index]
class SkillManager:
def __init__(self):
self.__skills = list()
def add_skill(self,skill):
self.__skills.append(skill)
def __iter__(self):
return SkillIteror(self.__skills)
skillmanager = SkillManager()
skillmanager.add_skill('九阳神功')
skillmanager.add_skill('降龙十八掌')
skillmanager.add_skill('太极拳')
iteror = skillmanager.__iter__()
for i in range(3):
print(iteror.__next__())
for each in skillmanager:
print(each)
迭代器对象iterator
1.定义
可以被next()函数调用并返回下一个值的对象
2.语法
class 迭代器类名:
def __init__(self):
self.聚合对象 = 聚合对象
def __next__(self):
if 没有元素:
raise StopIteration()
return 聚合对象元素
3.说明
聚合对象通常是容器对象
生成器
生成器 = 可迭代对象 + 迭代器对象
yield 返回值
实例:
class SkillManager:
def __init__(self):
self.__skills = list()
def add_skill(self,skill):
self.__skills.append(skill)
def __iter__(self):
for each in self.__skills:
yield each
skillmanager = SkillManager()
skillmanager.add_skill('九阳神功')
skillmanager.add_skill('降龙十八掌')
skillmanager.add_skill('太极拳')
for each in skillmanager:
print(each)
迭代器函数
实例:
def builder():
yield 1
yield 2
print(builder()) # 1
print(builder()) # 2
迭代器表达式
实例:
g = (i for i in range(10))
print(g)
print(next(g))
print(next(g))
print('-------------')
for i in g:
print(i)
运行结果:
<generator object <genexpr> at 0x006776F0>
0
1
-------------
2
3
4
5
6
7
8
9