Search code examples
pythonpython-3.xsyntaxyieldyield-from

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


# 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))

Solution

  • 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']