迭代器、生成器、面向过程编程思想
一、迭代器了解迭代器之前要先了解一个概念:什么是可迭代对象? 在python中但凡有__iter__方法的对象都是可迭代对象在我们之前学习的数据类型中除了int类型其余的都是可迭代对象! 可迭代的对象包括:str,list,tuple,dict,set,file1、获取可迭代对象的方式:无须获取,python内置str,list,tuple,dict,set,file都是可迭代对象2、特点: 内置有__iter__方法的都叫可迭代的对象,执行该方法会拿到一个迭代器对象 其中文件数据类型即是可迭代对象也是迭代器对象。1、获取迭代器对象的方式: 执行可迭代对象的__iter__方法,拿到的返回值就是迭代器对象2、特点: 内置有__next__方法,执行该方法会拿到迭代器对象中的一个值 内置有__iter__方法,执行该方法会拿到迭代器本身# dic={'x':1,'y':2,'z':3}# iter_dic=dic.__iter__()# print(iter_dic.__next__())# print(iter_dic.__next__())# print(iter_dic.__next__())# print(iter_dic.__next__())#抛出异常,无值可取。 # s1={'a','b','c'}# iter_s1=s1.__iter__()# print(iter_s1.__next__())# print(iter_s1.__next__())# print(iter_s1.__next__())# print(iter_s1.__next__())#抛出异常,无值可取。 # list1=[1,2,3]# iter_list1=list1.__iter__()# print(iter_list1.__next__())# print(iter_list1.__next__())# print(iter_list1.__next__())迭代器的优缺点分析 迭代器的优点:1、提供了一种可不依赖于索引的取值方式2 、迭代器更加节省内存迭代器的缺点:1、取值麻烦,只能一个一个取,只能往后取,2、并且是一次性的,无法用len获取长度,只有在执行完毕后才知道一共有多少个值。for循环原理分析:1、for 循环称之为迭代器循环,in后跟的必须是可迭代的对象2、for循环会执行in后对象的__iter__方法,拿到迭代器对象3、然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体4、周而复始,直到取值完毕,for循环会检测到异常自动结束循环二、生成器 函数内包含有yield关键字,再调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象def chicken(): print('=====>first') yield 1 print('=====>sencond') yield 2 print('=====>third') yield 3 obj=chicken()print(obj)生成器本质就是迭代器,也就是说生成器的玩法其实就是迭代器的玩法print(obj.__iter__() is obj)res=obj.__next__()print(res) res1=obj.__next__()print(res1) res2=obj.__next__()print(res2) obj.__next__() 1、iter_obj=obj.__iter__(),拿到迭代器2、出发iter_obj.__next__(),拿到该方法的返回值,赋值给item3、周而复始,直到函数内不在有yield,即取值完毕4、for会检测到StopIteration异常,结束循环for item in obj: print(item) 总结yield:1、为我们提供了一种自定义迭代器的方式, 可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器2、yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可返回多次 因为yield可以保存函数执行的状态 def my_range(): print('start........') n=0 while True: yield n n+=1 obj=my_range()print(obj) 三、面向过程的编程思想 核心是'过程'二字,过程即解决问题的步骤,即先干什么,再干什么。。。。 基于面向过程编写程序就好比在设计一条流水线,是一种机械式的思维方式。 总结优缺点: 优点:复杂的问题流程化,进而简单化 缺点:修改一个阶段,其他阶段都有可能需要做出修改,牵一发而动全身,即扩展性极差 应用:用于扩展性要求低的场景 四、生成器yield的表达式形式:通过下面一个例子了解yield的表达式形式:def eat(name): print('%s ready to eat' %name) food_list=[] while True: food=yield food_list # food='骨头' food_list.append(food) #food_list=['泔水','骨头'] print('%s start to eat %s' %(name,food)) dog1=eat('alex') 1、必须初始化一次,让函数停在yield的位置res0=dog1.__next__()print(res0) 2、接下来的事,就是给用send功能。send有两方面的功能1、给yield传值2、同__next__的功能res1=dog1.send('泔水')print(res1)res2=dog1.send('骨头')print(res2)res3=dog1.send('shit')print(res3)
转载于:https://www.cnblogs.com/yangwei666/p/8678841.html
迭代器、生成器、面向过程编程思想相关推荐
- python的装饰器、迭代器、yield_python装饰器,迭代器,生成器,协程
python装饰器[1] 首先先明白以下两点 #嵌套函数 defout1():definner1():print(1234) inner1()#当没有加入inner时out()不会打印输出1234,当 ...
- java面向过程编程怎么写_从面向过程到面向对象,我的编程之路
也许现在新一代的程序员一开始涉足的就是c++,C#,Java这类面向对象的语言,如果这样,这篇文章可能得不到他们的认同. 这里,我只想写写我从面向过程到面向对象开发成长中的一些感想而已. 我最初学习的 ...
- python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05...
迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...
- python:面向过程编程和面向对象编程思想
面向对象编程和面向过程编程(函数式编程)都是程序设计的方法,不过稍有区别. 套路 面向过程编程 1. 导入各种外部库2. 设计各种全局变量3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...
- 迭代器 生成器 面向过程编程
迭代器什么是迭代器(iterator)? 器值得某种工具 迭代,指的是更新换代的过程,例如应用程序的版本更新,从1.0编程1.1在变成1.2 迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复 ...
- python 递归,迭代器,生成器,面向过程编程
一.递归和迭代 1.递归:函数调用自身 2.迭代:一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代print('== ...
- Day9:yield的表达式形式、面向过程编程(grep -rl 'root' /etc)
一.yield的表达式 def foo():print('starting')while True:x=yield None#return 2print('value :',x) g=foo() pr ...
- Day4 - 迭代器生成器、装饰器、Json pickle 数据序列化、软件目录结构规范
---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表 ...
- 关于面向过程编程的一些思考
2019独角兽企业重金招聘Python工程师标准>>> 关于面向过程编程与指针的一些思考 长期以来,虽然有C语言的基础,但对C的使用主要停留在书面例子的基础上,没有复杂的功能和调用关 ...
最新文章
- YOLO之父退出CV界表达抗议,拒绝AI算法用于军事和隐私窥探
- php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
- P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
- MySQL基础---增删改查语法
- nginx mozilla_我发现Mozilla的私人浏览模式存在重大缺陷。
- Java总结:正则表达式
- java反编译软件_安卓强大的逆向软件,媲美MT管理器!
- python线性回归可视化_【Python可视化5】Seaborn之线性回归
- 程序员的修炼之道——从小工到专家
- 阿里云CentOS7.3配置Java Web应用和Tomcat步骤
- 双系统linux安装cetos,电脑安装windows和centOS系统双系统
- /usr/bin/sed: No such file or directory
- Adobe illustrator如何修改默认字体
- android高级面试题(二)
- 紧急疏散(python)
- 神经网络是什么,神经网络具体有什么用?
- 企查查企业详情爬虫(自动模拟登录企业详情页法律风险爬取)
- 每日五题 -202110
- 奇瑞鲍思语:奇瑞新能源产品线将更加丰富
- Android中蓝牙模块的使用
热门文章
- linux 内核调试 booting the kernel.,Uncompressing Linux...done, booting the kernel解决办法
- python线程暂停恢复退出_python中的暂停和恢复线程
- 启动mysql服务是报错找不到pid_mysql报错 The server quit without updating PID file
- mysql压缩配置_MySQL压缩版安装配置
- 处理表格数据时,去除表头两种写法,jquery 删除表头之外的数据
- c语言50行以内有趣的代码,分享一段有趣的小代码
- 测试适合眉形的软件_软件测试的自我修养:正向思维与逆向思维
- 2016江苏计算机二级考试时间,2016年江苏计算机二级考试报名时间_无忧考网.pdf...
- 大一java实训报告1500字_从800字小作文,到3000字小论文你用了多久? | 校媒FM
- 2021年春季学期-信号与系统-第八次作业参考答案-第四小题