标签:衣服 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 打印出来
标签:衣服 png range tuple ext 包括 地方 创建 哪些
原文地址:https://www.cnblogs.com/dalaoban/p/9198741.html