3 迭代
每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。例如:
循环获取容器中的元素。
3.1 可迭代对象iterable
(1) 定义:具有__iter__函数的对象,可以返回迭代器对象。
(2) 语法:
# 创建:
class 可迭代对象名称:
def __iter__(self):
return 迭代器
# 使用:
for 变量名 in 可迭代对象:
语句
(3) 原理:
迭代器 = 可迭代对象.__iter__()
while True:
try:
print(迭代器.__next__())
except StopIteration:
break
(4) 演示:
message = "我是花果山水帘洞孙悟空"
# for item in message:
# print(item)
# 1. 获取迭代器对象
iterator = message.__iter__()
# 2. 获取下一个元素
while True:
try:
item = iterator.__next__()
print(item)
# 3. 如果停止迭代则跳出循环
except StopIteration:
break
练习1:创建列表,使用迭代思想,打印每个元素.
练习2:创建字典,使用迭代思想,打印每个键值对.
3.2 迭代器对象iterator
(1) 定义:可以被next()函数调用并返回下一个值的对象。
(2) 语法:
class 迭代器类名:
def __init__(self, 聚合对象):
self.聚合对象= 聚合对象
def __next__(self):
if 没有元素:
raise StopIteration()
return 聚合对象元素
(3) 说明:聚合对象通常是容器对象。
(4) 作用:使用者只需通过一种方式,便可简洁明了的获取聚合对象中各个元素,而又无需了解其内部
结构。
(5) 演示:
class StudentIterator:
def __init__(self, data):
self.__data = data
self.__index = -1
def __next__(self):
if self.__index == len(self.__data) - 1:
raise StopIteration()
self.__index += 1
return self.__data[self.__index]
class StudentController:
def __init__(self):
self.__students = []
def add_student(self, stu):
self.__students.append(stu)
def __iter__(self):
return StudentIterator(self.__students)
controller = StudentController()
controller.add_student("悟空")
controller.add_student("八戒")
controller.add_student("唐僧")
# for item in controller:
# print(item) #
iterator = controller.__iter__()
while True:
try:
item = iterator.__next__()
print(item) #
except StopIteration:
break
练习1:遍历商品控制器
class CommodityController:
pass
controller = CommodityController()
controller.add_commodity("屠龙刀")
controller.add_commodity("倚天剑")
controller.add_commodity("芭比娃娃")
for item in controller:
print(item)
练习2:创建自定义range类,实现下列效果.
class MyRange:
pass
for number in MyRange(5):
print(number)# 0 1 2 3 4