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

Posted Leslie-x

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器生成器面向过程编程相关的知识,希望对你有一定的参考价值。

一:迭代器

1.2.迭代的概念

  迭代器即迭代的工具,那么迭代是什么概念呢?

  迭代是一个重复的过程,每重复一次即迭代,并且每一次迭代的结果都是下一次的初始值

简易的迭代器
l =["a","b","c","d"]
i = 0
while i < len(l):
    print(l[i])
    i +=1

1.2.为什么要有迭代器?什么是可迭代对象?迭代器对象是什么 

1、为何要有迭代器?
对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取
出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器
2、什么是可迭代对象? 可迭代对象指的是内置有__iter__方法的对象,即obj.__iter__,如下3、什么是迭代器对象? 可迭代对象执行obj.__iter__()得到的结果就是迭代器对象 而迭代器对象指的是即内置有__iter__又内置有__next__方法的对象 文件类型是迭代器对象 open(a.txt).__iter__() open(a.txt).__next__() 4、注意: 迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
5、
#迭代器对象:迭代器运作的对象
dic = {"x":1,"y":2,"z":3}
iter_dic = dic.__iter__()#字典的迭代器对象
print(iter_dic.__next__())#迭代器对象使用内置方法迭代取值
print(iter_dic.__next__())
print(iter_dic.__next__())
 

1.3.for循环原理分析

for循环称之为迭代器循环,in后跟的必须是可迭代对象
1:for循环称之为迭代器循环,in的后面跟的必须是可迭代的对象
2:for循环会执行in后的对象的__iter__方法,拿到迭代器对象
3:然后调用迭代器对象的__next__方法,拿到一个返回值赋值给line,执行一次循环体
4:周而复始,直到取值完毕,for循环会监测到异常,自动结束循环

1.4.迭代器的优缺点

迭代器的优点
1:提供了一种可以不依赖于索引取值的方式
2:迭代器每次只取一个值,__next__方法调用一次去一个,省内存
缺点
1:取值麻烦一次只能取一个值
2:只能往后取,并且是一次性的
3:无法用len获取长度

二:生成器

1.1.什么是生成器

  只要函数体带有yield关键字的函数就是生成器

def foo():
    print("sdsadas")
    yield 1 #出产,产生
    print("sdsadas")
    yield 2
    print("sdsadas")
    yield 3
    print("sdsadas")
    yield 3
res = foo()
调用带有yield关键字的函数,返回的结果就是生成器,且不会执行函数代码

1.2.生成器就是迭代器

  当我们获得生成器函数调用的返回值后,赋值拿到,可以看到其内置有__iter__方法和__iter__方法

  根据迭代器的定义,可以知道生成器就是迭代器

  所以我们可以使按照迭代器的使用方法来使用 

  #res.__next__()#执行生成器,执行到yield结束,yield返回的值抛弃

  # print(res.__next__())#执行生成器,并把yiled返回结果打印出来

  # next(res)#和res.__next__()执行结果一致

1.3.yield总结

  1、把函数做成迭代器

  2、对比return,可以返回多次值,可以挂起/保存函数的运行状态

三:面向过程编程

  1、首先强调:面向过程编程绝对不是用函数编程这么简单,面向过程是一种编程思路、思想,而编程思路是不依赖于具体的语言或语法的。言外之意是即使我们不依赖于函数,也可以基于面向

过程的思想编写程序

  2、定义:面向过程的核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么

    基于面向过程设计程序就好比在设计一条流水线,是一种机械式的思维方式

  3、优点:复杂的问题流程化,进而简单化

  4、缺点:可扩展性差,修改流水线的任意一个阶段,都会牵一发而动全身

  5、应用:扩展性要求不高的场景,典型案例如linux内核,git,httpd

    流水线1:用户输入用户名、密码--->用户验证--->欢迎界面

    流水线2:用户输入sql--->sql解析--->执行功能

  

以上是关于迭代器生成器面向过程编程的主要内容,如果未能解决你的问题,请参考以下文章

python--迭代器生成器面向过程编程

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

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

函数--迭代器生成器面向过程编程

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

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