Apply function for objects from "yield from" statement in python

Question:

# currently I have this code

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

I was wondering if there was a way to squash it into one line

# looking for something like

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

||

Answers:

You can use map. The map accepts two parameters: a function and an iterable. It iterates the iterable and apply the function and returns an iterator (which yields mapped values – function(first item), function(seoncd item), …)

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

yield from here is not necessary, because the map returns an iterator (in Python 3.x):

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

Example:

>>> 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']
Answered By: falsetru

For something simple and short you can return a generator expression which basically is the same as yield,

def some_func():
    return (other_func(match) for match in re.finditer(regex, string))
Answered By: Hossain Muctadir