yield关键字,而不是在通过map()调用的函数中返回

问题描述 投票:0回答:1

我正在使用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。

python function dictionary return yield
1个回答
0
投票

Map本身会创建一个生成器,而在函数定义中不需要yield

使用return就足够。


0
投票

您在这里所做的与此相似

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
© www.soinside.com 2019 - 2024. All rights reserved.