在通过 map() 调用的函数中使用 yield 关键字而不是 return

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


繁花不似锦
浏览 141回答 2
2回答

天涯尽头无女友

Map无需yield在函数定义中创建生成器本身。使用return就足够了。

慕的地10843

您在这里所做的与此类似values = [5 , 9]iters = map(range, values)当您申请x时,您values正在创建一个(actually a generator because map return a generator in 3.x).generatorsfor it in iters:    for value in it:        # do somthing
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python