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

时间:2019-10-18 20:16:00

标签: python function dictionary return yield

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

2 个答案:

答案 0 :(得分:0)

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

使用return就足够了。

答案 1 :(得分: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