Python全栈day18(迭代器协议和for循环工作机制)

一,什么是迭代和递归

  递归和迭代都是循环的一种。

  简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。

二,什么是迭代器协议

  1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)

  2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)

  3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

  PS:(字符串,列表,元祖,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环,调用了他们内部的__iter__方法,把他们变成了可迭代对象6

  列子 day18-2.py

x=‘hello‘
iter_test=x.__iter__()
print(iter_test)
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())

<str_iterator object at 0x000002E0DA335978>
h
e
l
l
o

  如果取完了还继续迭代会报错StopIteration

  文件也是使用这种方法转换成可迭代对象

f=open(‘test.txt‘,‘r+‘)
iter_f=f.__iter__()
print(iter_f.__next__())
print(iter_f.__next__())

  使用while取模拟for循环做的事情

l=[1,2,3]
diedai_l=l.__iter__()
while True:
    try:
        print(diedai_l.__next__())
    except StopIteration:
        print(‘迭代完毕,循环终止‘)
        break

1
2
3
迭代完毕,循环终止

  以上可以使用内置函数next进行操作day18-4.py

l = [1,2,3,4]
iter_l=l.__iter__()
print(next(iter_l))

1

  

原文地址:https://www.cnblogs.com/minseo/p/8288854.html

时间: 2024-08-27 12:22:40

Python全栈day18(迭代器协议和for循环工作机制)的相关文章

*迭代器协议和for循环工作机制

迭代定义:每次迭代都依赖于上一次迭代 原文地址:https://www.cnblogs.com/newt/p/9005111.html

Python全栈day18(三元运算,列表解析,生成器表达式)

一,什么是生成器 可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他数据类型需要调用自己内置的__iter__方法),所以生成器是可迭代对象. 二,生成器分类在python中的表现形式 1,生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果.yield语句一次返回一个结果,在每个结果中间,挂起函数状态,以便下次从它离开的地方继续执行day18-5.py def test(): yield 1 yield 2 g=test() print(g) print

Python基础-----迭代器协议和For循环机制

迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往后走,不能往前退) 可迭代对象:遵循迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法) for循环的本质:循环所有对象,全都是使用迭代器协议. 字符串.列表.元组.字典.集合.文件对象都不是可迭代对象,可以利用for循环,因为调用了他们的__iter__()方法,将他们变成可迭代对象. 例如:l = [1,2,3] for i in l:

python全栈开发目录

python全栈开发目录 linux命令 初识python python基础数据类型 函数编程.set.深浅拷贝 内置函数 文件操作 装饰器 迭代器和生成器 常用模块 初识类和对象 类和对象(进阶) 反射 异常处理 socket.IO多路复用 线程.进程.协程 HTML CSS JavaScript DOM文档操作 jQuery实例 web框架本质 Tornado mysql基础 mysql进阶 ..... 基本算法 递归--二分法查找 冒泡排序 更多 线程池

Python全栈【进程、线程】

Python全栈[进程.线程] 本节内容: 进程 线程 协程 I/O多路复用 进程 线程

python 全栈开发,Day30(第一次面向对象考试)

月考题: python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成器(generator)与函数的不同,并实现且使用简单generator(3分) 4.如何理解lambda函数/表达式(2分) 5.a=10 b=20 def test(a,b): print(a,b) c = test(b,a) print(c) 上述代码中,打印出来的值a,b,c分别是什么

Python 全栈开发【第一篇】:目录

Python 全栈开发[第0篇]:目录 第一阶段:Python 开发入门 Python 全栈开发[第一篇]:计算机原理&Linux系统入门 Python 全栈开发[第二篇]:Python基础语法入门 Python 全栈开发[第三篇]:数据类型.字符编码.文件操作 第二阶段:函数编程&常用标准库 Python 全栈开发[第四篇]:函数.递归.生成器.迭代器 Pyhton 全栈开发[第五篇]:常用模块学习 第三阶段:面向对象编程&网络编程基础 Python 全栈开发[第六篇]:面向对象

python全栈和python自动化课程的区别在哪?

老男孩算是国内组早的做python培训的机构了,下面小编对于python自动化课程及全栈课程做了一个总结,希望能帮到你们: python全栈开发: 适合人群:应届本科生,专科,及零基础学员学习基础:0基础上课形式:脱产5个月,周一至周五上课课程内容:linux基础知识,python基础知识,网络编程,数据库应用,web开发,算法设计模式项目实战:博客系统开发,CRM系统开发,CMDB开发,主机开发管理,爬虫开发,金融量化交易项目开发未来发展方向:python全栈开发工程师就业方向:python爬

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护