一、 迭代器

一 、迭代的概念

  迭代器即迭代的工具,那什么是迭代呢?
  迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值

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 迭代器、生成器、面向过程编程相关推荐

  1. python 全栈开发,Day32(知识回顾,网络编程基础)

    python 全栈开发,Day32(知识回顾,网络编程基础) 一.知识回顾 正则模块 正则表达式 元字符 :. 匹配除了回车以外的所有字符\w 数字字母下划线\d 数字\n \s \t 回车 空格 和 ...

  2. python 递归,迭代器,生成器,面向过程编程

    一.递归和迭代 1.递归:函数调用自身 2.迭代:一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 while True: #只是单纯地重复,因而不是迭代print('== ...

  3. 迭代器 生成器 面向过程编程

    迭代器什么是迭代器(iterator)? 器值得某种工具 迭代,指的是更新换代的过程,例如应用程序的版本更新,从1.0编程1.1在变成1.2 迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复 ...

  4. 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...

    简介 老男孩&路飞学城Python全栈开发重点班课程,作为Python全栈教学系列的重头戏,投入了全新的课程研发和教学精力,也是Python骑士计划的核心教学,由ALEX老师开班镇守,一线技术 ...

  5. python 全栈开发,Day43(python全栈11期月考题)

    python 全栈开发,Day43(python全栈11期月考题) python全栈11期月考题 1.常用字符串格式化有哪些?并说明他们的区别 2.请手写一个单例模式(面试题) 3.利用 python ...

  6. python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk)...

    python 全栈开发,Day133(玩具与玩具之间的对话,基于jieba gensim pypinyin实现的自然语言处理,打包apk) 先下载github代码,下面的操作,都是基于这个版本来的! ...

  7. python 全栈开发之路 day1

    python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进 ...

  8. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  9. python全栈开发之正则表达式和python的re模块

    正则表达式和python的re模块 python全栈开发,正则表达式,re模块 一 正则表达式 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的 ...

最新文章

  1. 微软停止与华为合作:Windows暂停供应新订单
  2. spingmvc的一些简单理解和记录
  3. join操作-内联,左外联,右外联,交叉联,全联
  4. osg-3D世界到屏幕
  5. 用 Python 爬虫框架 Scrapy 爬取心目中的女神
  6. PyCharm的structure自动定位到相应的函数位置
  7. bootstraptable设置行高度_【短柱专题】窗台板为什么要通长设置
  8. 95-10-160-启动-KafkaApis
  9. MySql查询某列是否包含汉字
  10. 最贵服务器多少钱_十次方分享:租服务器一般花费多少钱一年?
  11. RocketMQ消息消费之长轮询
  12. 系统视频教学视频教程_Amesim综合液压系统视频教程专题更新通知
  13. 罗技G29方向盘linux下的开发
  14. python几岁开始学比较好_少儿编程到底几岁开始学合适?
  15. 实现 Google 第三方授权登录
  16. sql server编程之 T-SQL函数
  17. matlab鱼眼镜头,普通镜头,单目双目相机标定校正(四)
  18. 中国基因工程药物产业应用市场需求及投融资动态分析报告2021-2027年
  19. 为什么都开始搞研发效能?
  20. FPGA系统设计三大黄金法则

热门文章

  1. lesson1 ODE的几何解法:方向场,积分曲线
  2. cdn厂商 同兴万点_CDN牌照哪家强?阿里、腾讯牌照差异竟如此之大
  3. ncl批量处理多个nc文件_Python办公自动化批量处理文件,一学就会
  4. 可能是史上最详细-Faster RCNN Pytorch 复现全纪录
  5. 对话短文本语义匹配-冠军代码
  6. PaddlePaddle迁移学习做图像分类,数十种高精度模型任意切换
  7. 深度学习 目标检测 算法大全列表
  8. linux下 卸载qt_Ubuntu14.04安装、配置与卸载QT5的步骤详解
  9. linux mysql恢复数据_Mysql数据恢复和备份
  10. IMDB情感分析数据集