一 迭代器1 什么是迭代器    #迭代器即迭代的工具,那什么是迭代呢?    #迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值    while True: #只是单纯地重复,因而不是迭代        print('===>')

    l=[1,2,3]    count=0    while count < len(l): #迭代        print(l[count])        count+=1

2 为何要用迭代器?    1.可以不依赖索引取值    2.同一时刻在内存中只有一个值,不会过多地占用内存

3 如何用迭代器?    可迭代的对象:但凡内置有__iter__方法的对象都是可迭代的对象,例如str,list,dict,tuple,set,文件

    迭代器的对象:既内置有__iter__方法又内置有__next__方法的对象称之为迭代器对象,例如 文件

    可迭代对象.__iter__() - ------》迭代器对象

    迭代器对象.__iter__() - ------》迭代器本身    迭代器对象.__next__() - ------》迭代器的下一个值

    for i in obj:        pass

4 for准确地说应该是迭代器循环,for循环的原理如下:    1. 先调用in后面那个值的__iter__方法,得到迭代器对象    2. 执行迭代器.__next__()方法得到一个返回值,然后赋值给一个变量k,运行循环体代码    3, 循环往复,直到迭代器取值完毕抛出异常然后捕捉异常自动结束循环

5 总结迭代器:    迭代器的优缺点        优点:            1.可以不依赖索引取值            2.同一时刻在内存中只有一个值,不会过多地占用内存(惰性计算,节省内存)        缺点:            1.不如按照索引或者key取值的方式灵活            2.无法预测迭代器所包含值的长度(只有在next完毕才知道到底有几个值)

    可迭代的对象=====》迭代器对象:调用可迭代对象内置的__iter__方法会有一个返回值,                            该返回值就是对应的迭代器对象        dic={'x':1,'y':2,'z':3}        迭代器对象 = 调用可迭代的对象        iter_dic=dic.__iter__()        # print(iter_dic)        res1=iter_dic.__next__()        print(res1)

        三个不同的迭代器        iter_dic1=dic.__iter__()        iter_dic2=dic.__iter__()        iter_dic3=dic.__iter__()

二 生成器1 什么是生成器        #只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码

    def func():        print('====>first')        yield 1        print('====>second')        yield 2        print('====>third')        yield 3        print('====>end')

    g=func()    print(g) #<generator object func at 0x0000000002184360>

2 生成器就是迭代器    g.__iter__    g.__next__    #2、所以生成器就是迭代器,因此可以这么取值    res=next(g)    print(res)

3 yield关键字:只能用在函数内 **    在函数内但凡包含有yield关键字,再去执行函数,就不会立刻运行函数体代码了    会得到一个返回值,该返回值成之为生成器对象,生成器本质就是迭代器

4 总结yield:    1. 提供一种自定义迭代器的解决方案    2. yield可用于返回值

    yield VS return       相同点:都可以用于返回值       不同点:yield可以暂停函数,yield可以返回多次值,而return只能返回值一次值函数就立刻终止

三,三元表达式、列表推导式、生成器表达式1 三元表达式    res = 条件成立情况下的返回值 if 条件 else 条件不成立情况下的返回值        name=input('姓名>>: ')        res='SB' if name == 'alex' else 'NB'        print(res)

2 列表生成式    [i    for i in range(10)]    [i for i in range(10) if i > 3]

3 生成器表达式 {}()    #1、把列表推导式的[]换成()就是生成器表达式

    #2、示例:生一筐鸡蛋变成给你一只老母鸡,用的时候就下蛋,这也是生成器的特性        >>> chicken=('鸡蛋%s' %i for i in range(5))        >>> chicken        <generator object <genexpr> at 0x10143f200>        >>> next(chicken)        '鸡蛋0'        >>> list(chicken) #因chicken可迭代,因而可以转成列表        ['鸡蛋1', '鸡蛋2', '鸡蛋3', '鸡蛋4',]

    #3、优点:省内存,一次只产生一个值在内存中

    生成字典    {i:i for i in range(10) if i > 3}    生成集合    {i for i in range(10) if i > 3}

转载于:https://www.cnblogs.com/du-jun/p/9767735.html

PYTHON-迭代器,xxx生成式相关推荐

  1. python迭代器生成器 学会再缩短一半开发效率 看看大牛是怎么写的

    一.迭代 什么叫做迭代? 比如在 Java 中,我们通过 List 集合的下标来遍历 List 集合中的元素,在 Python 中,给定一个 list 或 tuple,我们可以通过 for 循环来遍历 ...

  2. python迭代器与生成器答案_史上最全 Python 迭代器与生成器

    原标题:史上最全 Python 迭代器与生成器 作者:浪子燕青 链接:http://www.langzi.fun/迭代器与生成器.html 迭代器与可迭代对象 概念 迭代器:是访问数据集合内元素的一种 ...

  3. Python 迭代器和 C++ 迭代器,最大的不同竟然是......

    作者 | 樱雨楼 责编 | 胡巍巍 前言 迭代器(Iterator)是 Python 以及其他各种编程语言中的一个非常常见且重要,但又充满着神秘感的概念.无论是 Python 的基础内置函数,还是各类 ...

  4. java 迭代器的hasnext,在Python迭代器中具有hasNext?

    Python迭代器是否没有hasNext方法? 相关:我如何知道一开始发电机是否为空? 使用next(iterator, default_value)可以替代StopIteration. 例如: &g ...

  5. python 列表生成器放while_史上最全 Python 迭代器与生成器

    原标题:史上最全 Python 迭代器与生成器 转自:浪子燕青 http://www.langzi.fun/迭代器与生成器.html 概念 迭代器:是访问数据集合内元素的一种方式,一般用来遍历数据,但 ...

  6. 简单介绍python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...

  7. python迭代器使用_python迭代器的使用方法实例

    什么是迭代器?迭代器是带有next方法的简单对象,当然也要实现__iter__函数.迭代器能在一序列的值上进行迭代,当没有可供迭代时,next方法就会引发StopIteration 的异常.pytho ...

  8. python生成器 图片分类_python批量处理图片图片Python迭代器和生成器介绍

    Python迭代器和生成器介绍迭代器 迭代器是一个实现了迭代器协议的对象,Python中的迭代器协议就是有next方法的对象会前进到下一结果,而在一系列结果的末尾是,则会引发StopIteration ...

  9. [转载] python迭代器

    参考链接: Python迭代器 迭代器 迭代器是一个可以记住遍历的位置的对象. 迭代器有两个基本的方法:iter() 和 next(). 使用对象内置的__iter__()方法生成迭代器 it = n ...

  10. python迭代器_Python迭代器

    python迭代器 Good day learners! In our previous tutorial, we learned about Python Operator Overloading. ...

最新文章

  1. 多gpu训练梯度如何计算,求和是否要求平均
  2. 解决Android中No resource found that matches android:TextAppearance.Material.Widget.Button.Inverse问题
  3. python一千行入门代码-用Python三十行代码快速生成1000条随机评教内容
  4. python使用教程cmd啥意思-python中执行cmd的方式
  5. ECharts.js学习(三)
  6. 一晃居然已经停更半年了
  7. 计算机无法搜索本地文件,电脑本地磁盘无法搜索文件。怎么处理?
  8. OpenGL Subdivision Modes细分模式的实例
  9. 制作简单的WIFI干扰器
  10. day6_python之md5加密
  11. 2018(上)C高级第0次作业
  12. BZOJ1016 [JSOI2008]最小生成树计数
  13. Git常用指令——持续补充中
  14. 计算机科学与技术与数学建模,数学建模
  15. Mac OS X新手入门
  16. Spring AOP 之 通知、连接点、切点、切面
  17. 用IO流读取trs文件
  18. [leetcode]剑指offer(C++版题解)
  19. 常用贷款词汇英文名称
  20. xmind怎么导出甘特图_张兵导图:xmind如何绘制甘特图?

热门文章

  1. php300云,概述 · PHP300Framework2.0 · 看云
  2. 在VMware 14中安装Centos7
  3. hihocoder-Week243-hiho字符串
  4. 【学习Koa】原生koa2 静态资源服务器例子
  5. Spring AOP (事务管理)
  6. 基于EasyNVR二次开发实现业务需求:用户、权限、设备管理
  7. Doctype的作用
  8. iOS 根据日期判断星座源代码
  9. (转)《AS3 Expert》动态语言的基石:函数闭包
  10. 我所理解的IRepository