Применить функцию для объектов из "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))