码迷,mamicode.com
首页 > 编程语言 > 详细

python 基础篇 13 迭代器与生成器

时间:2018-06-19 17:45:15      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:衣服   png   range   tuple   ext   包括   地方   创建   哪些   

13. 前??能-迭代器和?成器
本节主要内容:
1. 迭代器
2. ?成器

?. 迭代器
我们之前?直在?可迭代对象进?迭代操作. 那么到底什么是可迭代对象. 本?节主要讨
论可迭代对象. ?先我们先回顾?下?前我们所熟知的可迭代对象有哪些:
str, list, tuple, dict, set. 那为什么我们可以称他们为可迭代对象呢? 因为他们都遵循了可
迭代协议. 什么是可迭代协议. ?先我们先看?段错误代码:

技术分享图片

 

 

注意看报错信息中有这样?句话. ‘int‘ object is not iterable . 翻译过来就是整数类型对象
是不可迭代的. iterable表?可迭代的. 表?可迭代协议. 那么如何进?验证你的数据类型是否
符合可迭代协议. 我们可以通过dir函数来查看类中定义好的所有?法.

技术分享图片

我们发现在字符串中可以找到__iter__. 继续看?下list, tuple, dict, set

 我们发现这?个可以进?for循环的东?都有__iter__函数, 包括range也有. 可以??试?
.
综上. 我们可以确定. 如果对象中有__iter__函数. 那么我们认为这个对象遵守了可迭代协议.
就可以进?迭代. 这?的__iter__是帮助我们获取到对象的迭代器. 我们使?__next__()来获取
到?个迭代器中的元素. 那么我们之前讲的for的?作原理到底是什么? 继续看代码

 

 技术分享图片

?. ?成器
什么是?成器. ?成器实质就是迭代器.
python中有三种?式来获取?成器:
1. 通过?成器函数
2. 通过各种推导式来实现?成器
3. 通过数据的转换也可以获取?成器
今天, 我们主要使??成器函数来完成?成器的创建和使?.
?先, 我们先看?个很简单的函数:

技术分享图片

技术分享图片

运?的结果和上?不?样. 为什么呢. 由于函数中存在了yield. 那么这个函数就是?个?成器
函数. 这个时候. 我们再执?这个函数的时候. 就不再是函数的执?了. ?是获取这个?成器.
如何使?呢? 想想迭代器. ?成器的本质是迭代器. 所以. 我们可以直接执?__next__()来执?
以下?成器.

技术分享图片

 

 技术分享图片

技术分享图片

示例:

 当程序运?完最后?个yield. 那么后?继续进?__next__()程序会报错.
好了?成器说完了. ?成器有什么作?呢? 我们来看这样?个需求. 公司向JACK JONES
10000套学?服. JACK JONES就比较实在. 直接造出来10000套衣服.

技术分享图片

但是公司现在没那么多人啊,你一下给我一万套我没地方存啊,很尴尬,   

最完美的就是我用一套 你给我一套  

 技术分享图片

区别: 第?种是直接?次性全部拿出来. 会很占?内存. 第?种使??成器. ?次就?个. ?多
少?成多少. ?成器是?个?个的指向下?个. 不会回去, __next__()到哪, 指针就指到哪?.
下?次继续获取指针指向的值.

---->>>> send和__next__区别<<<<<-----

技术分享图片

第一次执行必须用__next__

 

 技术分享图片

这个比较乱,可以自己运行一下看看结果    先打印 然后打印yield返回值  然后send传值进上一个yield  打印出来

 

python 基础篇 13 迭代器与生成器

标签:衣服   png   range   tuple   ext   包括   地方   创建   哪些   

原文地址:https://www.cnblogs.com/dalaoban/p/9198741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!