欢迎回来｡
我想让大家都明白引擎盖下的工作原理｡
我将向你们展示两个例子, 实现我们自己的for循环, 然后实现我们自己的range函数｡
第一个是for循环｡
所以我要用特殊的for循环｡
在引擎盖下面, 它所做的一切就是接收一个可迭代的｡
然后我们会说迭代器｡
等于一个可迭代的, 现在我们有一个可迭代的｡
我们称之为内部函数｡
它接受我们刚刚传递的可迭代对象｡
现在这个干预将允许我们在这个可迭代对象上使用下一个函数｡
所以坚持住｡
我要说的虽然真实｡
我想试试｡
在这个部落块中我们称之为迭代器｡
如果我们愿意, 我们可以在这里进行某种运算｡
或者我们可以直接调用下一个迭代器｡
你知道吗？
让我们在这里打印一些东西, 这样我们就可以看到迭代器是什么｡
最后, 我希望我们在出现停止迭代异常时停止｡
还记得我们在Iterable中看到的没有更多项的情况吗？
在这里, 我们可以简单地打破｡
去确认一下｡
我把科林的设定正确了｡
现在如果我做一个特殊的for循环, 给予它一个1, 2, 3的列表, 然后我点击运行｡
你看
我使用next循环访问一些可迭代对象｡
你可以看到这个对象存在于同一个内存空间中, 即使我们不断地从1到3循环访问它｡
这就是四个循环在引擎盖下的工作方式, 比如说NUM, 然后给予它一个列表｡
它会穿透一切｡
它会把它变成一个可迭代的, 它会一直运行, 一直调用下一个迭代器, 一遍又一遍,
直到我们完成了这一行, 然后跳出循环｡
我们如何检查迭代器的实际值？
记住, 下一个函数将输出下一个项.
所以如果我在这里打印｡
然后单击“Run（运行）”｡
我明白了｡
一, 二, 三, 一, 二, 三
如果我想单击“运行”, 只需执行2次即可｡
就这样｡
我们的特别为循环刚刚乘以我们的名单二｡
就这样了｡
这就是for循环真正的工作原理｡
但是范围呢？
我们可以创建自己的范围函数吗？
我们绝对可以｡
这是一个有趣的故事｡
让我们创建一个类, 因为在一天结束的时候, 我们只需要创建一个对象.
我们可以采取行动｡
我会说我的发电机的发电机, 这将模拟我们的系列的功能｡
所以我有一个类, 这个类有一个初始化函数.
我们会有一个自我, 第一个和最后一个｡
所以这就是我们可以说的范围, 从这个开始, 到这个结束｡
在这里我们先做典型的self点｡
等于第一个｡
然后赛尔多特的最后一个就等于最后一个｡
我在这里用了一个类, 因为记住我们只是在创建自己的数据类型, 我们在Python中的特殊范围｡
现在我们有了样本生成器, 理想情况下, 我们希望能够说gen等于, 并实例化我的gen,
让我们说0到100, 就像我们处理范围一样｡
理想情况下, 我们可以说是人工智能和基因｡
和打印｡
因为我是说, 这就是我们使用范围的方法, 对吧？
那我该怎么做呢？
好吧, 我们可以用我们的邓德方法｡
所以记住我们是怎么得到以太的｡
以获取迭代器并对其使用next｡
我们有一个定义的dunder, 它是发射器, 发射器允许我们创建｡
一个可耕地｡
所以在我们的例子中, 我会说self, 这里我只返回实际的类｡
最后, 我们希望能够在Jen上运行下一个函数, 因为我们看到了四个循环是如何工作的｡
我们需要能够使用编辑器, 然后下一个M& M｡
所以我们可以再一次使用一个dunder方法, 这个方法很方便｡
下一个
这是Python内置的｡
所以如果我在这里做自我｡
我们要做的就是让它知道我们下一步要怎么做｡
好吧, 我会说如果｡
我们需要某种状态或数据来跟踪我们所处的位置｡
请记住发电机的工作原理｡
记住他们在哪里｡
我们可以创建一个类对象属性｡
所以我可以说电流等于零｡
这是我们目前迭代的地方, 我的gen.current.
只要那个小于self点的最后一个, 它就会是这里的100｡
如果是这样的话｡
我想要一个等于我的发电机电流的数字｡
我想把生成点电流增加1, 因为我们想说, 嘿, 我们要向前移动到下一个位置,
然后返回｡
的号码｡
因为这就是下一步的工作原理, 对吧？
我们把当前位置加1, 然后返回一个数字, 在我们的例子中, 它是零.
我们想继续前进, 继续前进, 继续前进｡
直到电流不再比上次大｡
在这种情况下, 我们只需要引发一个停止迭代, 因为没有更多的东西要迭代了｡
让我们看看这是否有效｡
我来做这个｡
看起来一切都很顺利｡
我能够循环通过我的生成器并打印I从0一直到99｡
再一次, 如果我们回到我们的例子｡
我知道一开始有点难以接受｡
但我所做的只是说我希望一个IT功能可以选择第一个和最后一个｡
我希望能够遍历我将要创建的这个对象｡
我还希望能够使用下一个which for循环, 如果你还记得我们之前的例子, 需要｡
所以我会说四个项目在仁｡
循环即可｡
我可以循环遍历它,
因为它现在是一个迭代器, 我可以使用它的下一个值, 因为我允许我们循环并不断地增加1｡
直到我们不断地回号码｡
继续返回数字, 直到我的生成电流变成10100不小于100, 这是自我少｡
所以它会引发一个停止迭代｡
for循环会自动捕获我们, 所以它不会出错, 也不会停止循环｡
这就是炉灶背后的工作原理｡
现在, 你不需要知道这些｡
你不会被要求在你的日常实施这一点｡
但我想告诉你事情就是这样的｡
我觉得这很重要｡