<强>前言强>
产量从是Python3.3后新加的语言结构.yield从的主要功能是打开双向通道,把最外层的调用方法与最内层的子生成器连接起来。这两者就可以进行发送值和返回值了,频频出现的结构的本质是简化嵌套的生产器,不理解这个是什么意思的话,下面我将用几个例子来对其使用方法进行讲解。
产量从是Python3.3后新加的语言结构.yield从的主要功能是打开双向通道,把最外层的调用方法与最内层的子生成器连接起来。这两者就可以进行发送值和返回值了,频频出现的结构的本质是简化嵌套的生产器,不理解这个是什么意思的话,下面我将用几个例子来对其使用方法进行讲解。
<强>简化的循环中的频频出现强>
首先看一个
def基因(): 对于c“AB”: 收益率c#遇到频频出现程序返回循环,下次从频频出现后面开始。 因为我在范围(3): 我屈服 if __name__==癬_main__”: 列表(基因())#内部会预激生成器
输出
[' A ', ' B ', ' 0 ', ' 1 ', ' 2 ']
上面的代码可以简写成
def基因(): 产量从“ab” 产量从范围(3) if __name__==癬_main__”: 列表(基因())
通过上面的代码我们可以知道,收益率从可以简化的循环里的收益表达式。当然的频频出现的功能不仅仅是可以简化的循环而已,要是这样的话也就不值得,单独写一篇文章来介绍了。
我们仔细观察,简化后的式子有两个频频出现,同样的也就是说如果有10个循环的频频出现生成式,我们需要写十个频频出现,此时我们要记得在python中如果重复的代码出现了两次以及以上就该考虑优化了。好了接下来我们看一个优化后的例子。
<强>通过收益率从链接可迭代对象强>
def链(* args): 因为我在参数: #米我: #收益率米 屈服于我 p=列表(链(“1234”、“AB”, [1、2、3、4、5))) 打印(p)
输出
[' 1 ',' 2 ',' 3 ',' 4 ',' ',' B ', 1, 2, 3, 4, 5]
这里对之前的例子做了个优化处理,通过* args可变参数,配合后面的为循环进行了多个可迭代对象的链接处理。下面来看一个复杂点的例子:
来自Python食谱3,github源码地址
https://github.com/dabeaz/python-cookbook/blob/master/src/4/how_to_flatten_a_nested_sequence/example.py)
<强>扁平化处理嵌套型的数据强>
#压扁一个嵌套的例子使用subgenerators序列 从进口Iterable集合 def平(商品,ignore_types=(str,字节)): x的项目: 如果isinstance (x, Iterable)而不是isinstance (x, ignore_types): 从平收益率(x) 其他: 产生x 项=[1,2,3,4,(5、6),7],8] #生产1 2 3 4 5 6 7 8 平的x(项目): 打印(x) 项=[“大卫”,“波拉”,[“托马斯”,“路易斯”]] 平的x(项目): 打印(x)
接下来通过说一下开篇提到的子生产器和调用方以及新的词委托生成器。
<>强了解几个概念强>
产量表达式对x对象做的第一件事是,调用iter (x)从中获取一个迭代器。所以x是可迭代对象。上面的例子中x的如果是可迭代对象就会执行,收益率从平(x)。
PEP380的标题是“委托给subgenerator语法”(把指责委托给子生成。器的句法)。由此我们可以知道,收益率从是可以实现嵌套生成器的使用。
产量从在看接下来的代码之前我们必须知道这几个概念:
<强>委派生成器
强>
包含收益率从表达式的生成器函数
<强>子生成器
强>
从收益率从部分获取的生成器,含义产生的。
<强>调用方
强>
调用委派生成器的客户端(调用方)代码,也就是运行入口。
好的,了解了这些我们看接下来的一个例子。
使用频频出现从写一个异步爬虫