zoukankan      html  css  js  c++  java
  • 迭代器和生成器,面向过程编程

    迭代器

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

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

    在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('泔水')

    面向过程编程

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

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

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

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

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

  • 相关阅读:
    linux下创建和删除软、硬链接
    linux教程:[4]配置Tomcat开机启动
    Linux下Tomcat的启动、关闭、杀死进程
    Linux下Tomcat的安装配置
    Linux安装JDK详细步骤
    每天一个linux命令(30): chown命令
    linux系统修改系统时间与时区
    linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结
    linux下解压命令大全
    Scoped CSS规范草案
  • 原文地址:https://www.cnblogs.com/yftzw/p/8678298.html
Copyright © 2011-2022 走看看