Python-迭代| “朝闻道”知识分享大赛

小年华°Moon 2024-10-31 11:57:39

这是我参加朝闻道知识分享大赛的第32篇文章。

​ 每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。例如:循环获取容器中的元素。

"""
    迭代 iteration
        每次都会在之前基础上有所增加的重复过程
    迭代器 iter ator
        完成迭代过程的对象
    可迭代对象 iter able
        创建迭代器的对象
"""
message = "我是齐天大圣孙悟空"
# 遍历
for item in message:
    print(item)
# 学习for循环原理(内部代码)
# 1. 获取迭代器
iterator = message.__iter__()
while True:
    try:
        # 2. 获取下一个元素
        item = iterator.__next__()
        print(item)
        # 3. 如果停止迭代则退出循环
    except StopIteration:
        break
# 面试题:
# 能够参与for循环的条件是什么?
# 答:对象具有__iter__函数
#    能够获取迭代器对象(是可迭代对象)
# 自定义对象参与for循环
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.list_student = []

    def __iter__(self):
        return StudentIterator(self.list_student)


controller = StudentController()
controller.list_student.append("吉宇轩")
controller.list_student.append("周字华")
controller.list_student.append("涂洋涛")
# for item in controller:
#     print(item)
iterator = controller.__iter__()
while True:
    try:
        item = iterator.__next__()
        print(item)
    except StopIteration:
        break

可迭代对象iterable

(1) 定义:具有__iter__函数的对象,可以返回迭代器对象。

(2) 语法

# 创建:
class 可迭代对象名称:
    def __iter__(self):
           return 迭代器
# 使用:
    for 变量名 in 可迭代对象:
        语句

(3) 原理:

迭代器 = 可迭代对象.__iter__()
while True:
    try: 
        print(迭代器.__next__())
    except StopIteration:
        break

迭代器对象iterator

(1) 定义:可以被next()函数调用并返回下一个值的对象。

(2) 语法

class 迭代器类名:
    def __init__(self, 聚合对象):
        self.聚合对象= 聚合对象 
 
    def __next__(self): 
        if 没有元素:
            raise StopIteration()
            return 聚合对象元素

(3) 说明:聚合对象通常是容器对象。

(4) 作用:使用者只需通过一种方式,便可简洁明了的获取聚合对象中各个元素,而又无需了解其内部结构。

...全文
6 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

964

社区成员

发帖
与我相关
我的任务
社区描述
中南民族大学CSDN高校俱乐部聚焦校内IT技术爱好者,通过构建系统化的内容和运营体系,旨在将中南民族大学CSDN社区变成校内最大的技术交流沟通平台。
经验分享 高校 湖北省·武汉市
社区管理员
  • c_university_1575
  • WhiteGlint666
  • wzh_scuec
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

欢迎各位加入中南民族大学&&CSDN高校俱乐部社区(官方QQ群:908527260),成为CSDN高校俱乐部的成员具体步骤(必填),填写如下表单,表单链接如下:
人才储备数据库及线上礼品发放表单邀请人吴钟昊:https://ddz.red/CSDN
CSDN高校俱乐部是给大家提供技术分享交流的平台,会不定期的给大家分享CSDN方面的相关比赛以及活动或实习报名链接,希望大家一起努力加油!共同建设中南民族大学良好的技术知识分享社区。

注意:

1.社区成员不得在社区发布违反社会主义核心价值观的言论。

2.社区成员不得在社区内谈及政治敏感话题。

3.该社区为知识分享的平台,可以相互探讨、交流学习经验,尽量不在社区谈论其他无关话题。

试试用AI创作助手写篇文章吧