赞
踩
迭代:每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
例如:循环获取容器中的元素。
创建:
class 可迭代对象名称:
def __iter__(self):
return 迭代器
使用:
for 变量名 in 可迭代对象:
语句
while True:
try:
print(迭代器.__next__())
except StopIteration:
break
list01 = [1, 2, 3, 4, 5]
# 迭代
for item in list01:
print(item)
# 1. 获取迭代器
iterator = list01.__iter__()
while True:
try:
# 2. 获取下一个元素
item = iterator.__next__()
print(item)
# 3. 如果没有元素则结束循环
except StopIteration:
break
class 迭代器类名:
def __init__(self, 聚合对象):
self.聚合对象= 聚合对象
def __next__(self):
if 没有元素:
raise StopIteration
return 聚合对象元素
# 迭代器 class Iterator: def __init__(self, data): self. __data = data self.__index = 0 def __next__(self): try: item = self.__data[self.__index] self.__index += 1 return item except: raise StopIteration() # 可迭代对象 class StudentManager: def __init__(self): self.__list_stus = ['吕布', '赵云', '典韦'] def add_stu(self, name): self.__list_stus.append(name) def __iter__(self): return Iterator(self.__list_stus) manager = StudentManager() for item in manager: print(item)
创建:
def 函数名():
语句
yield 数据
调用:
for 变量名 in 函数名():
语句
伪代码:生成器 --> 迭代器 + 可迭代对象
class Generator:
def __iter__(self):
return self
def __next__(self):
...
def my_range(end):
begin = 0
while begin < end:
yield begin # 暂时离开,再次调用继续执行
begin += 1
for item in my_range(100):
print(item) # 0 1 2 3 4
for 变量 in enumerate(可迭代对象):
语句
for 索引, 元素in enumerate(可迭代对象):
语句
def my_enumerate(iterable):
index = 0
for item in iterable:
yield (index, item)
index += 1
list01 = [1, 2, 3, 4, 5]
for index, item in my_enumerate(list01):
print(index, item)
# 等价于
for index, item in enumerate(list01):
print(index, item)
for item in zip(可迭代对象1, 可迭代对象2….):
语句
def my_zip(iterable01, iterable02):
for i in range(len(iterable01)):
yield (iterable01[i], iterable02[i])
list01 = ["悟空", "八戒", "沙僧"]
for item in my_zip(list02, list01):
print(item)
# 等价于
for item in zip(list02, list01):
print(item)
list01 = [1, 2, 3, 4, 5]
for item in (item + 10 for item in list01 if item % 2):
print(item)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。