ключевое слово yield вместо возврата внутри функции, вызываемой через map () - PullRequest
1 голос
/ 18 октября 2019

Я использую 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']

Код работает, и у меня нет ошибок. Тем не менее, я думаю, что это перебор, так как я «даю» результат два раза.

Мне любопытно узнать, стоит ли вместо этого менять функцию x с помощью ключевого слова return.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

То, что вы делаете здесь, похоже на это

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
0 голосов
/ 18 октября 2019

Map создает сам генератор без необходимости yield в определении функции.

Использование return будет достаточно.

...