python全栈开发-Day11 迭代器、生成器、面向过程编程
一、 迭代器
一 、迭代的概念
迭代器即迭代的工具,那什么是迭代呢?
迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
while True: #只是单纯地重复,因而不是迭代print('===>') l=[1,2,3] count=0 while count < len(l): #迭代print(l[count])count+=1
二、 为何要有迭代器?什么是可迭代对象?什么是迭代器对象?
1、为何要有迭代器?
对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。
但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器。
迭代器:迭代取值工具
2、什么是可迭代对象?
可迭代对象指的是内置有__iter__()方法的对象,即obj.__iter__(),如下:
'hello'.__iter__() (1,2,3).__iter__() [1,2,3].__iter__() {'a':1}.__iter__() {'a','b'}.__iter__() open('a.txt').__iter__()
3、什么是迭代器对象?
可迭代对象执行obj.__iter__()得到的结果就是迭代器对象,而迭代器对象指的是即内置有__iter__()又内置有__next__()方法的对象。
文件类型是迭代器对象 open('a.txt').__iter__() open('a.txt').__next__()
#'hello'.__iter__() #(1,2,3).__iter__() #[1,2,3].__iter__() #{'a':1}.__iter__() #{'a','b'}.__iter__() #open('a.txt').__iter__() open('a.txt').__iter__() open('a.txt').__next__() #我们发现只有文件是迭代器对象
4、注意: 迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
三 、迭代器对象的使用
dic={'a':1,'b':2,'c':3} iter_dic=dic.__iter__() #得到迭代器对象,迭代器对象即有__iter__()又有__next__(),但是:迭代器.__iter__()得到的仍然是迭代器本身 iter_dic.__iter__() is iter_dic #Trueprint(iter_dic.__next__()) #等同于next(iter_dic) print(iter_dic.__next__()) #等同于next(iter_dic) print(iter_dic.__next__()) #等同于next(iter_dic) # print(iter_dic.__next__()) #抛出异常StopIteration,或者说结束标志#有了迭代器,我们就可以不依赖索引迭代取值了 iter_dic=dic.__iter__() while 1: #布尔值不是0,空,None False 别的都是Turetry:k=next(iter_dic)print(dic[k])except StopIteration:break#这么写太low了,还需要我们自己捕捉异常,控制next,python这么牛逼,肯定有简洁模式!请看for循环
四 、for循环
#基于for循环,我们可以完全不再依赖索引去取值了 dic={'a':1,'b':2,'c':3} for line in dic:print(dic[line])# for循环原理分析: #1、for 循环称之为迭代器循环,in后跟的必须是可迭代的对象 #2、for循环会执行in后对象的__iter__方法,拿到迭代器对象 #3、然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体 #4、周而复始,直到取值完毕,for循环会检测到异常自动结束循环
五 、迭代器的优缺点
优点:
1、 提供一种统一的、不依赖于索引的取值方式
2、惰性计算,节省内存
缺点:
1、取值麻烦,只能一个一个取,只能往后走
2、 一次性的,不能往前退无法获取长度(只有在next完毕才知道到底有几个值)
二 、生成器
一 、什么是生成器
#只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码def func():print('====>first')yield 1print('====>second')yield 2print('====>third')yield 3print('====>end')g=func() print(g) #<generator object func at 0x0000000002184360>
二 、生成器就是迭代器
def func():print('====>first')yield 1print('====>second')yield 2print('====>third')yield 3print('====>end')g=func() g.__iter__ g.__next__ #上面所讲的同时有__iter__()和__next()方法,就是迭代器 #所以生成器就是迭代器,因此可以这么取值 res=next(g) print(res) #一次next()执行一次yield
三、 练习
自定义函数模拟range(1,7,2)
def my_range(start,stop,step=1):while start < stop:yield startstart+=step#执行函数得到生成器,本质就是迭代器 obj=my_range(1,7,2) #1 3 5 print(next(obj)) print(next(obj)) print(next(obj)) print(next(obj)) #StopIteration#应用于for循环 for i in my_range(1,7,2):print(i)
四、 yield总结
1、为我们提供了一种自定义迭代器的方式,
可以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器
2、yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可返回多次
因为yield可以保存函数执行的状态
三、面向过程编程
1、首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路、思想,而编程思路是不依赖于具体的语言或语法的。
言外之意是即使我们不依赖于函数,也可以基于面向过程的思想编写程序。
2、定义: 面向过程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么 基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式 。
3、优点:复杂的问题流程化,进而简单化。
4、缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身。
5、应用:扩展性要求不高的场景,典型案例如linux内核,git,httpd。
6、举例 流水线1: 用户输入用户名、密码--->用户验证--->欢迎界面
ps:函数的参数传入,是函数吃进去的食物,而函数return的返回值,是函数拉出来的结果。
面向过程的思路就是,把程序的执行当做一串首尾相连的功能,该功能可以是函数的形式,然后一个函数吃,拉出的东西给另外一个函数吃,如此反复。。。
转载于:https://www.cnblogs.com/ManyQian/p/8681160.html
python全栈开发-Day11 迭代器、生成器、面向过程编程相关推荐
- python 全栈开发,Day32(知识回顾,网络编程基础)
python 全栈开发,Day32(知识回顾,网络编程基础) 一.知识回顾 正则模块 正则表达式 元字符 :. 匹配除了回车以外的所有字符\w 数字字母下划线\d 数字\n \s \t 回车 空格 和 ...
- python 递归,迭代器,生成器,面向过程编程
一.递归和迭代 1.递归:函数调用自身 2.迭代:一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代print('== ...
- 迭代器 生成器 面向过程编程
迭代器什么是迭代器(iterator)? 器值得某种工具 迭代,指的是更新换代的过程,例如应用程序的版本更新,从1.0编程1.1在变成1.2 迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复 ...
- 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...
简介 老男孩&路飞学城Python全栈开发重点班课程,作为Python全栈教学系列的重头戏,投入了全新的课程研发和教学精力,也是Python骑士计划的核心教学,由ALEX老师开班镇守,一线技术 ...
- python 全栈开发,Day43(python全栈11期月考题)
python 全栈开发,Day43(python全栈11期月考题) python全栈11期月考题 1.常用字符串格式化有哪些?并说明他们的区别 2.请手写一个单例模式(面试题) 3.利用 python ...
- python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk)...
python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk) 先下载github代码,下面的操作,都是基于这个版本来的! ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进 ...
- python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...
2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...
- python全栈开发之正则表达式和python的re模块
正则表达式和python的re模块 python全栈开发,正则表达式,re模块 一 正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的 ...
最新文章
- 微软停止与华为合作:Windows暂停供应新订单
- spingmvc的一些简单理解和记录
- join操作-内联,左外联,右外联,交叉联,全联
- osg-3D世界到屏幕
- 用 Python 爬虫框架 Scrapy 爬取心目中的女神
- PyCharm的structure自动定位到相应的函数位置
- bootstraptable设置行高度_【短柱专题】窗台板为什么要通长设置
- 95-10-160-启动-KafkaApis
- MySql查询某列是否包含汉字
- 最贵服务器多少钱_十次方分享:租服务器一般花费多少钱一年?
- RocketMQ消息消费之长轮询
- 系统视频教学视频教程_Amesim综合液压系统视频教程专题更新通知
- 罗技G29方向盘linux下的开发
- python几岁开始学比较好_少儿编程到底几岁开始学合适?
- 实现 Google 第三方授权登录
- sql server编程之 T-SQL函数
- matlab鱼眼镜头,普通镜头,单目双目相机标定校正(四)
- 中国基因工程药物产业应用市场需求及投融资动态分析报告2021-2027年
- 为什么都开始搞研发效能?
- FPGA系统设计三大黄金法则
热门文章
- lesson1 ODE的几何解法:方向场,积分曲线
- cdn厂商 同兴万点_CDN牌照哪家强?阿里、腾讯牌照差异竟如此之大
- ncl批量处理多个nc文件_Python办公自动化批量处理文件,一学就会
- 可能是史上最详细-Faster RCNN Pytorch 复现全纪录
- 对话短文本语义匹配-冠军代码
- PaddlePaddle迁移学习做图像分类,数十种高精度模型任意切换
- 深度学习 目标检测 算法大全列表
- linux下 卸载qt_Ubuntu14.04安装、配置与卸载QT5的步骤详解
- linux mysql恢复数据_Mysql数据恢复和备份
- IMDB情感分析数据集