我正在使用map()将函数x应用于元素列表。map()返回产生结果的迭代器。但是,函数X已经产生该值,而不返回。我只需要使用一次yield。
def x(line):
columns = line.strip().split('\t')
yield columns
values = [ 'a\tb\tc\td\n',
'g\tc\tq\tm\n',
's\tp\to\td\n'
]
iters = map(x, values)
for i in iters:
print(next(i))
输出
['a', 'b', 'c', 'd']
['g', 'c', 'q', 'm']
['s', 'p', 'o', 'd']
代码运行,我没有任何错误。但是,我认为这太过分了,因为我两次“提高”了输出。
我很好奇,我是否应该用return关键字更改函数x。
Map
本身会创建一个生成器,而在函数定义中不需要yield
。
使用return
就足够。
您在这里所做的与此相似
values = [5 , 9]
iters = map(range, values)
[在x
上应用values
时,您正在创建(actually a generator because map return a generator in 3.x)
的列表generators
。
for it in iters:
for value in it:
# do somthing