博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
人人都能学会的python编程教程15:高级特性2
阅读量:5842 次
发布时间:2019-06-18

本文共 974 字,大约阅读时间需要 3 分钟。

生成器

如果你想要一百万个数,而这些数里只有一百个数是你经常要用的,剩下的都几乎不怎么会用到,那么如果直接把这一百万个数全部放在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()函数实现的,例如:

转载于:https://juejin.im/post/5af3f89451882567382f9e0f

你可能感兴趣的文章
Linux crontab定时执行任务
查看>>
自己遇到的,曾未知道的知识点
查看>>
docker 基础
查看>>
我的友情链接
查看>>
写Use Case的一种方式,从oracle的tutorial抄来的
查看>>
【C#】protected 变量类型
查看>>
Ubuntu解压
查看>>
爬虫_房多多(设置随机数反爬)
查看>>
爬虫去重(只是讲了去重的策略,没有具体讲实现过程,反正就是云里雾里)...
查看>>
react中将px转化为rem或者vw
查看>>
avcodec_open2()分析
查看>>
何如获取单选框中某一个选中的值
查看>>
QQ悬浮返回顶部
查看>>
MySQL建表语句的一些特殊字段
查看>>
腾讯前端二面题目详解
查看>>
mascara-1
查看>>
Jquery Form表单取值
查看>>
Android API level 与version对应关系
查看>>
Team Name
查看>>
String类
查看>>