Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write Python generator function that never yields anything

I want to write a Python generator function that never actually yields anything. Basically it's a "do-nothing" drop-in that can be used by other code which expects to call a generator (but doesn't always need results from it). So far I have this:

def empty_generator():     # ... do some stuff, but don't yield anything     if False:         yield 

Now, this works OK, but I'm wondering if there's a more expressive way to say the same thing, that is, declare a function to be a generator even if it never yields any value. The trick I've employed above is to show Python a yield statement inside my function, even though it is unreachable.

like image 289
John Zwinck Avatar asked Jun 07 '11 14:06

John Zwinck


People also ask

How do you return an empty generator in Python?

You can use return once in a generator; it stops iteration without yielding anything, and thus provides an explicit alternative to letting the function run out of scope. So use yield to turn the function into a generator, but precede it with return to terminate the generator before yielding anything.

How do you yield a generator in Python?

You can assign this generator to a variable in order to use it. When you call special methods on the generator, such as next() , the code within the function is executed up to yield . When the Python yield statement is hit, the program suspends function execution and returns the yielded value to the caller.

How do you create a function generator in Python?

It is fairly simple to create a generator in Python. It is as easy as defining a normal function, but with a yield statement instead of a return statement. If a function contains at least one yield statement (it may contain other yield or return statements), it becomes a generator function.


1 Answers

Another way is

def empty_generator():     return     yield 

Not really "more expressive", but shorter. :)

Note that iter([]) or simply [] will do as well.

like image 78
Sven Marnach Avatar answered Sep 24 '22 04:09

Sven Marnach