我想更改下面的代码
for directory, dirs, files in os.walk(directory_1):
do_something()
for directory, dirs, files in os.walk(directory_2):
do_something()
到此代码:
for directory, dirs, files in os.walk(directory_1) + os.walk(directory_2):
do_something()
我得到了错误:
不支持+:'generator'和'generator'的操作数类型
如何在Python中连接两个生成器?
这里使用了一个带有嵌套for的生成器表达式:
range_a = range(3)
range_b = range(5)
result = (item
for one_range in (range_a, range_b)
for item in one_range)
assert list(result) == [0, 1, 2, 0, 1, 2, 3, 4]
for…在…从左到右求值。for之后的标识符建立一个新变量。而one_range在下面用于…在…,来自第二个的项用于“final”赋值表达式,该表达式只有一个(在最开始)。
假设我们有两个生成器(第1代和第2代),我们想要执行一些额外的计算,需要这两个生成器的结果。
我们可以通过map方法返回这种函数/计算的结果,该方法反过来返回一个生成器,我们可以循环使用它。
在这种情况下,函数/计算需要通过lambda函数实现。
棘手的部分是我们打算在映射及其lambda函数中做什么。
建议解决方案的一般形式:
def function(gen1,gen2):
for item in map(lambda x, y: do_somethin(x,y), gen1, gen2):
yield item