今天,小编给大家带来的是Python教程的yield。 我不知道很多新人会和编辑有反应。 另外,互联网上还没有找到足够简单的教程。 我觉得编辑在给大家回复后,有必要说yield。
在说yield之前,我们必须明确两个概念:什么是迭代器,什么是生成器。 那么,先熟悉这两个概念,然后去看yield吧。
迭代器(迭代器)。
关于迭代这个概念我们应该不知道。 以前在for周期里说过。 那么,现在回顾一下吧:
对于skills这样的列表集合,需要输出中的所有元素。 可以在for循环中重复skills。 换句话说,skills是一个迭代对象(循环对象)。 什么是迭代器呢?
迭代器是一种容器,它可以创建可以循环使用任何数据结构(如列表、元组、字符串或词典)的容器,其中的所有元素都可以使用for语句按顺序循环检索每个元素。
(仔细掂量这句话,在脑子里好好转! )
生成器(generator )
我刚说迭代器,让我来谈谈生成器。 有三种方法可以创建迭代器。 (这里不讨论。 感兴趣的学生请看前两个。 分别是__iter__ ()和__next__ () ) )方法中函数iter ) )的内置)。 这第三种方法是生成器。
生成器如何生成迭代器?
很简单。 关于今天要说的主题yield这个关键词,让我们来看看代码吧。
小编在这里做了一个制作kwdbl数列的函数。 这里采用了关键词“yield”。 让我们看看yield到底TM是何方神圣。
让我们先看看另一个函数:
让我们看看这两个函数有什么不同。 大家抠着眼睛仔细观察后,发现一个是yield b,一个是print(b ),其他没有什么区别。
OK,那我们进入下一步,取出这两个函数,看看他们有什么不同!
(在此为type ) )引入函数。 是专门用于判定某个数据类型的东西。 把应该判定的数据放在type后面的括号里就可以了)
那么,我们来运行这两个函数的类型。 那么,实行一下看看结果吧。
输出:
很明显看出了区别。 fab2函数仅在作为一个自定义函数运行结果时为NoneType,仅在type(fab2)时输出。
这时,有yield的函数呢。 其执行结果类型为generator。 也就是说,他成了生成器!
仅仅因为一个单词的不同,他们的根本属性就变了! 由于yield的存在,fab这个函数永远成为了生成器!
这就是发电机。
Yield
那么,就谈谈yield本身吧! 既然有这么大的本领,就应该知道怎么控制它吧。
首先,让我们看一下简单的函数:
这是一个很棒的函数。 里面除了yield以外什么都没有。 那么,把里面的要素都拿出来看看吧。 那么,现在直接执行这个函数:
输出:
如果直接执行此函数,则发现在generator object中无法输出。 因为是生成器,所以要反复输出哦。
输出:
OK,结果顺利输出了!
那么,回到fab函数吧。 对于这样的函数,我们应该如何执行输出?
请…。
考虑…。
对…进行试验。
电影……
刻上…。
输出:
正确输出kwdbl的前6次结果!
到此为止,我们知道yield是什么样的,函数将成为迭代器,以及如何使用它(需要反复输出)。
下一期见!
听说有气质的人会关注这个公众号!