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

迭代器

迭代的工具,迭代是一个重复的过程,并且每次重复都是基于上一次结果而来

什么是可迭代的对象和迭代器对象?

在python中,但凡内置有__iter__方法的对象,都是可迭代对象

可迭代对象执行__iter__方法的到的返回值就是迭代器对象

l='hello'

iter_l=l_iter_()

while True:

       try:

           print(iter_l._next_())

       except StopIteration:

           break

迭代器对象:执行可迭代对象的__iter__方法,拿到的返回值就是迭代器

特点:内置有__next__方法,执行该方法会拿到迭代器对象中的一个值,内置__iter__方法,执行该方法会拿到迭代器本身

文件对象本身就是迭代器对象

for循环被称为迭代器循环,in后跟的必须是可迭代的对象

l='hello'

for iter in l:

    print(iter)

迭代器的优点:1.提供了一种可以不依赖索引的取值方式

             2.迭代器更加节省空间(因为它像一个老母鸡 用一个给你下一个蛋)

        缺点:取值麻烦而且只能取一个个值,只能往后取,并且是一次性的无法用len获取长度

生成器

生成器本身就是迭代器

函数内只要包含有yield的关键字,在调用函数,就不会执行函数体代码,拿到的返回值就是一个生成器对象

总结yield:为我们提供了一种自定义迭代器的方式,用以在函数内用yield关键字,调用函数拿到的结果就是一个生成器,生成器就是迭代器yield可以像return一样用于返回值,区别是return只能返回一次值,而yield可返回多次因为yield可以保存函数执行的状态

def eat(name):

    print('%sready to eat'%name)

    while True:

          food=yield

          print('%s start to eat %s'%(name,food))

dog1=eat('alex')

1.必须初始化一次,让函数停在yield的位置

dog.__next__()

2.接下来的事,就是喂狗

send有两方面的功能

(1)给yield传值

(2)同__next__的功能

dog1.send('泔水')

面向过程编程

核心是‘过程’两个字,过程即解决问题的步骤。即先干什么,再干什么~~~

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

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

缺点:修改一个阶段,其他阶段都有可能需要做出修改牵一发而动全身,即扩展性极差应用

应用于扩展性要求低的场景

原文地址:https://www.cnblogs.com/yftzw/p/8678298.html