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

    #带有__开头__结尾的方法都是内置的特殊方法,会在某个时间自动执行

    迭代器:for循环的实现原理 内部就是在获取迭代器,不断的调用next 帮你取值,知道没有值可取位置
    什么是迭代器(iterator)
    器指的是某种工具
    迭代,指的是更新换代的过程,例如应用程序的版本更新从1.0变成1.1再到1.2
    迭代的目的是要根据上一个结果,产生下一个结果,这是一个重复的过程,但不是单纯的重复
    迭代器就是一种根据上一个结果得到下一个结果的工具,简单的说就是一种获取数据的工具

    可迭代对象
    指的就是可以使用迭代器取出数据的对象,
    如何判断一个对象是否可迭代,就看这个对象是否提供了迭代器,通过对象调用__iter__()来获取迭代器
    可迭代类型:所有的容器类型(包括字符串)都是可迭代的
    文件也是可迭代对象,自身就是一个迭代器

    迭代器的使用:
    1.通过调用对象的__iter__()方法得到迭代器
    2.调用迭代器的__next__()方法来获取每一个值
    如何判断一个对象是不是迭代器?
    迭代是为了取值,取值使用next方法,那么只要对象具备next方法就称之为迭代器
    其中文件类型比较特殊既是可迭代对象,也是迭代器
    对于for而言所有的对象都需要先判断是否是一个可迭代对象

    迭代器总结:
    迭代器是一种通用的取值工具
    只有具备__iter__()方法的对象才能被迭代器取值,称之为可迭代对象
    迭代器是为了取值,只要具备next方法的就是迭代器
    python中迭代器同时具备iter方法和next方法 调用iter将返回迭代器自身
    每一种数据类型内部的迭代实现都各不相同
    为何使用:
    统一取值方式
    如何使用:
    for...
    可迭代对象就是拥有iter的对象

    迭代器一定是可迭代对象
    可迭代对象不一定是迭代器



    生成器 (generator)
    生成数据的工具
    生成是从无到有的过程
    工具可以直接看成是函数,我们可以自己定义一个函数来产生数据,但是每次执行函数都只能产生一次数据
    生成器的目的就是可以多次(不断的)生成数据
    在python中生成器就是一个函数
    但是函数内部具备至少一个yield关键字
    反过来只要函数中出现了yield那么该函数就是一个生成器
    yield关键字
    一旦函数中出现了yield,调用函数时就不会立即执行函数体,并且会返回一个生成器对象
    当调用生成器的next方法时会执行函数体,但是如果执行期间遇到了yield函数就会暂停执行
    每一次调用next 都是从上一次yield的位置继续往下执行,同时会将yield后的数据返回给调用者
    yield与return的区别
    都能返回一个值
    不同之处在于:return 只返回一次值,只要执行return函数就整体结束了
    而yield可以返回多次值,并且会在返回后将函数暂停住
    生成器就是迭代器
    生成器同时具备iter和next函数,足以证明其就是一个迭代器,多以可以直接使用for循环来遍历
    迭代器就是通过生成器实现的
    生成器,迭代器,for之间的关系
    for的原理是使用迭代器取值
    迭代器是通过生成实现的


    了解知识点:
    yield的特殊用法
    当你的生成器中需要外界数据参与时,生成器中如何接受外界数据?
    闭包和参数都能传数据到生成器中,但是都只能接受一次值,如果想要多次传值就要使用send函数了
    send函数用于向生成器发送数据,但是要注意必须先进行初始化,也就是先调用一次__next__()方法

    面向过程编程
    是一种编程思想,同样的在编程界不只有这一种编程思想,还要面向对象编程
    编程思想没有高低之分,只有适合与不适合

    核心在于过程,指的是在编程时时刻想着过程
    面向过程编程思想的优点与缺点
    优点:可以将一个复杂的大问题,拆分为简单的小问题 将复杂的问题简单化,流程化
    缺点:牵一发动全身,扩展性极差,正因如此,才有了新的编程思想,即面向对象
    使用场景:对于一些对扩展性要求不高的应用程序,建议采用面向过程,例如系统内核
    后期我们开发的应用程序大多都是直接面向用户的,需求变化非常频繁,这时就需要使用面向对象了
  • 相关阅读:
    Netty 源码解析(八): 回到 Channel 的 register 操作
    Netty 源码解析(七): NioEventLoop 工作流程
    SVM入门
    Understanding Neural Networks Through Deep Visualization
    如何直观的解释back propagation算法?
    caffe层解读系列-softmax_loss
    深度学习与计算机视觉系列(10)_细说卷积神经网络
    Ubuntu 14.04 Nvidia显卡驱动手动安装及设置
    贾扬清分享_深度学习框架caffe
    caffe卷积输入通道如何到输出通道
  • 原文地址:https://www.cnblogs.com/gengbinjia/p/10276957.html
Copyright © 2011-2022 走看看