Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to call the function that yields (python 2.7)

Tags:

python

yield

I have two functions func1 and func2 that are specific implementations of func0 that YIELDS its result:

def func0(parameter, **kwargs):
    #do sth with kwargs and parameter
    yield result # result is html

how should I refer to func0 inside the "specific" functions to make them yield their results? Is return ok?

def func1(**kwargs):
    return func0(parameter=1, **kwargs)

def func2(**kwargs):
    return func0(parameter=2, **kwargs)
like image 739
fanny Avatar asked Feb 22 '26 23:02

fanny


1 Answers

In Python 3.3+, the normal way would be to use yield from. From the documentation:

PEP 380 adds the yield from expression, allowing a generator to delegate part of its operations to another generator. This allows a section of code containing yield to be factored out and placed in another generator. Additionally, the subgenerator is allowed to return with a value, and the value is made available to the delegating generator.

For Python 2.7 that's not possible, however. Here's an alternative that works instead:

def base_squared_generator(parameter):
    yield parameter ** 2


def two_squared_generator():
    yield next(base_squared_generator(parameter=2))


def three_squared_generator():
    yield next(base_squared_generator(parameter=3))


print(next(two_squared_generator()))
print(next(three_squared_generator()))

Output

4
9
like image 129
Tagc Avatar answered Feb 25 '26 04:02

Tagc



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!