Make Store.namespaces an empty generator by aucampia · Pull Request #1432 · RDFLib/rdflib (original) (raw)
90f6fe5 changed
class Store: def namespaces(self): """ """ if False: yield None
to
class Store: def namespaces(self): """ """
This resulted in Store.namespaces
no longer being an emtpy generator
by default (see https://stackoverflow.com/q/13243766).
The reason it was removed is because it is unreachable code, however I
did not consider that it would make the function an empty generator.
The reason why if False: yield None
made it an empty generator is
because the presence of the yield keyword informs CPython that a
function is a generator:
https://www.python.org/dev/peps/pep-0255/#why-a-new-keyword-for-yield-why-not-a-builtin-function-instead
There are several ways of making an empty generator:
if False: yield
return
andyield
yield from ()
- ... more
Both if False: yield
and return
; yield
results in same bytecode
however, which is that of an empty function, and they are both equally
confusing I would say.
yield from ()
is somewhat clearer, but the bytecode of the funciton
looks very different from an empty function (see https://stackoverflow.com/a/61496399)
So the best option I see is to just put back what was there and add a
comment and a test to prevent the issue from re-occuring.
Fixes #1431