AlanSTACK
AlanSTACK

Reputation: 6055

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

Upvotes: 2

Views: 2534

Answers (2)

falsetru
falsetru

Reputation: 368924

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

Upvotes: 4

Hossain Muctadir
Hossain Muctadir

Reputation: 3626

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

Upvotes: 3

Related Questions