Применить функцию для объектов из "yield from" в python

# currently I have

def some_func():
    for match in re.finditer(regex, string):
        yield other_func(match)

Мне было интересно, есть ли способ синтаксически раздавить его в одну строку

# looking for something like

def some_func():
    yield from other_func(re.finditer(regex, string))

2 ответа

Решение

Ты можешь использовать map, map принимает два параметра: функцию и итерацию. Он повторяет итерируемое и применяет функцию и возвращает итератор (который возвращает сопоставленные значения - функция (первый элемент), функция (элемент seoncd),...)

def some_func():
    yield from map(other_func, re.finditer(regex, string))

yield from здесь не обязательно, потому что map возвращает итератор (в Python 3.x):

def some_func():
    return map(other_func, re.finditer(regex, string))

Пример:

>>> import re
>>>
>>> def other_func(match):
...     return match.group()
...
>>> def some_func():
...     return map(other_func, re.finditer(regex, string))
...
>>> regex = '.'
>>> string = 'abc'
>>> list(some_func())
['a', 'b', 'c']

Для чего-то простого и короткого вы можете вернуть выражение генератора, которое в основном совпадает с yield,

def some_func():
    return (other_func(match) for match in re.finditer(regex, string))
Другие вопросы по тегам