#带有__开头__结尾的方法都是内置的特殊方法,会在某个时间自动执行迭代器: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__()方法面向过程编程 是一种编程思想,一样的在编程界不仅有这一种编程思想,还要面向对象编程 编程思想没有高低之分,只有适合与不适合 核心在于过程,指的是在编程时时刻想着过程 面向过程编程思想的优势与缺点 优势:能够将一个复杂的大问题,拆分为简单的小问题 将复杂的问题简单化,流程化 缺点:牵一发动全身,扩展性极差,正因如此,才有了新的编程思想,即面向对象 使用场景:对于一些对扩展性要求不高的应用程序,建议采用面向过程,例如系统内核 后期咱们开发的应用程序大多都是直接面向用户的,需求变化很是频繁,这时就须要使用面向对象了