生成器

如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题而生的。

如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

生成器表达式: 通列表解析语法,只不过把列表解析的[]换成()

我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?

如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

当然这种获取值的方法很笨,所以我们一般用循环来迭代生成器的对象

迭代器

前面我们已经学过了for循环,我们知道for循环可以遍历list、tuple、dict、set、str和生成器。

这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。

可以使用isinstance()判断一个对象是否是Iterable对象:

>>> from collections import Iterable
>>> isinstance([], Iterable)
> True
>>> isinstance({}, Iterable)
> True
>>> isinstance('abc', Iterable)
> True
>>> isinstance((x for x in range(10)), Iterable)
> True
>>> isinstance(100, Iterable)
> False
复制代码

凡是可作用于for循环的对象都是Iterable类型;

凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

Python的for循环本质上就是通过不断调用next()函数实现的,例如:

人人都能学会的python编程教程15:高级特性2相关推荐

  1. python是人都能学会_人人都能学会的python编程教程15:高级特性2

    生成器 如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在list中是不明智的因为这会浪费较多存储空间,生成器就是为了解决这个问题 ...

  2. 人人都能学会的python编程教程(基础篇)完整版

    人人都能学会的python编程教程1:第一行代码 人人都能学会的python编程教程2:数据类型和变量 人人都能学会的python编程教程3:字符串和编码 人人都能学会的python编程教程4:关系运 ...

  3. 人人都能学会的python编程教程1:第一行代码

    前言 众所周知,现在IT行业很火,行业薪酬也很高,国家在2017年也发布了人工智能教育的推广计划,人人会编程的时代将要到来.不会编程.不懂编程可能有些跟不上时代的节奏,普通人不懂技术也许会觉得这个很难 ...

  4. 人人都能学会的python编程教程3:字符串和编码

    字符串 在python3中已经全面支持中文. 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码.当Python解释器读取源 ...

  5. 人人都能学会的python编程教程11:定义函数

    定义函数 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_ ...

  6. 人人都能学会的python编程教程14:高级特性1

    切片 取一个list或tuple的部分元素是非常常见的操作.比如,一个list如下: L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] 第一个元素的索引 ...

  7. 人人都能学会的SHELL编程

    目 录 1. Shell入门简介 1 2. Shell编程之变量详解 4 3. If条件语句学习 7 4. 使用if条件语句编写MySQL备份脚本 10 5. IF条件综合Shell实战脚本编写 11 ...

  8. 人人都能学会的 Python 多线程指南!

    大家好,我是早起. 在 Python 中,多线程最常见的一个场景就是爬虫,例如这样一个需求,有多个结构一样的页面需要爬取,例如下方的URL(豆瓣阿凡达影评,以10个为例) url_list = ['h ...

  9. 文言文编程可以编译成PHP吗,人人都可以学会编译原理-开篇

    编译技术在我们日常的工作中可以说无处不在,React JSX语法的解析,Typescript转化为Javascript,XML.JSON的解析,Spring字节码生成技术,PHP的模板引擎,还有最近很 ...

最新文章

  1. 谈谈Python那些不为人知的冷知识(二)
  2. 如何在 TensorFlow 中用深度学习修复图像?(附论文)
  3. 微服务架构——不是免费的午餐
  4. 关于软件外包的一些看法(转)
  5. 分析大咖说:做一个转化率提升 2% 的成功官网改版案例
  6. pyqt5讲解9:时间模块timer和网页交互
  7. 不需要SFU实现WebRTC联播实践
  8. 360数科 CTO 王继平:金融 IT 变革浪潮下,360数科的技术破局
  9. mysql set语句_从强网杯随便注浅析mysql存储过程
  10. phpmyadmin安装配置以及相关问题
  11. cad插件_CAD插件燕秀工具箱2.81
  12. labjs 分析转载
  13. pyecharts动态图表嵌入ppt
  14. SpringBoot自动装配的魔力
  15. java 支付宝支付 demo_java开发支付宝支付详细流程_demo的运行
  16. (可)变磁阻式传感器和磁阻式传感器的区别——原理、特点和应用
  17. 【pytest】(六) pytest中fixture的使用
  18. 爬虫取中间文本_【实战No.2】1小时打造你自己的网络爬虫
  19. 弘辽科技:提升销量没流量要继续提升吗?如何提高店铺流量?
  20. win10的0x0000225及0x000007b修复方法

热门文章

  1. 平均月薪 21.8k、中国开发者占比最高,揭晓 Go 语言真实现状!
  2. 揭秘:GitHub Star 5W人追更,这个框架是打工人石锤了!
  3. 90% 的人都会!这项能力已成标配,系统学习才能破局!
  4. 雷林鹏分享:PHP 简介
  5. redis geohash 学习笔记
  6. Oracle weblogic线程Thread status分类和总结
  7. PacificA 一致性协议解读
  8. HighCharts基本使用
  9. 第一次 C语言课程设计
  10. QQ音乐的动效歌词是如何实践的?