一、迭代器了解迭代器之前要先了解一个概念:什么是可迭代对象?   在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

迭代器、生成器、面向过程编程思想相关推荐

  1. python的装饰器、迭代器、yield_python装饰器,迭代器,生成器,协程

    python装饰器[1] 首先先明白以下两点 #嵌套函数 defout1():definner1():print(1234) inner1()#当没有加入inner时out()不会打印输出1234,当 ...

  2. java面向过程编程怎么写_从面向过程到面向对象,我的编程之路

    也许现在新一代的程序员一开始涉足的就是c++,C#,Java这类面向对象的语言,如果这样,这篇文章可能得不到他们的认同. 这里,我只想写写我从面向过程到面向对象开发成长中的一些感想而已. 我最初学习的 ...

  3. python迭代器-迭代器取值-for循环-生成器-yield-生成器表达式-常用内置方法-面向过程编程-05...

    迭代器 迭代器 迭代: # 更新换代(其实也是重复)的过程,每一次的迭代都必须基于上一次的结果(上一次与这一次之间必须是有关系的) 迭代器: # 迭代取值的工具 为什么用迭代器: # 迭代器提供了一种 ...

  4. python:面向过程编程和面向对象编程思想

    面向对象编程和面向过程编程(函数式编程)都是程序设计的方法,不过稍有区别. 套路 面向过程编程 1. 导入各种外部库2. 设计各种全局变量3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

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

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

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

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

  7. Day9:yield的表达式形式、面向过程编程(grep -rl 'root' /etc)

    一.yield的表达式 def foo():print('starting')while True:x=yield None#return 2print('value :',x) g=foo() pr ...

  8. Day4 - 迭代器生成器、装饰器、Json pickle 数据序列化、软件目录结构规范

    ---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表 ...

  9. 关于面向过程编程的一些思考

    2019独角兽企业重金招聘Python工程师标准>>> 关于面向过程编程与指针的一些思考 长期以来,虽然有C语言的基础,但对C的使用主要停留在书面例子的基础上,没有复杂的功能和调用关 ...

最新文章

  1. YOLO之父退出CV界表达抗议,拒绝AI算法用于军事和隐私窥探
  2. php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
  3. P5283-[十二省联考2019]异或粽子【可持久化Trie,堆】
  4. MySQL基础---增删改查语法
  5. nginx mozilla_我发现Mozilla的私人浏览模式存在重大缺陷。
  6. Java总结:正则表达式
  7. java反编译软件_安卓强大的逆向软件,媲美MT管理器!
  8. python线性回归可视化_【Python可视化5】Seaborn之线性回归
  9. 程序员的修炼之道——从小工到专家
  10. 阿里云CentOS7.3配置Java Web应用和Tomcat步骤
  11. 双系统linux安装cetos,电脑安装windows和centOS系统双系统
  12. /usr/bin/sed: No such file or directory
  13. Adobe illustrator如何修改默认字体
  14. android高级面试题(二)
  15. 紧急疏散(python)
  16. 神经网络是什么,神经网络具体有什么用?
  17. 企查查企业详情爬虫(自动模拟登录企业详情页法律风险爬取)
  18. 每日五题 -202110
  19. 奇瑞鲍思语:奇瑞新能源产品线将更加丰富
  20. Android中蓝牙模块的使用

热门文章

  1. linux 内核调试 booting the kernel.,Uncompressing Linux...done, booting the kernel解决办法
  2. python线程暂停恢复退出_python中的暂停和恢复线程
  3. 启动mysql服务是报错找不到pid_mysql报错 The server quit without updating PID file
  4. mysql压缩配置_MySQL压缩版安装配置
  5. 处理表格数据时,去除表头两种写法,jquery 删除表头之外的数据
  6. c语言50行以内有趣的代码,分享一段有趣的小代码
  7. 测试适合眉形的软件_软件测试的自我修养:正向思维与逆向思维
  8. 2016江苏计算机二级考试时间,2016年江苏计算机二级考试报名时间_无忧考网.pdf...
  9. 大一java实训报告1500字_从800字小作文,到3000字小论文你用了多久? | 校媒FM
  10. 2021年春季学期-信号与系统-第八次作业参考答案-第四小题