Commit efaf64d
committed
Make namespaces a generator by default
90f6fe5 changed
```python
class Store:
def namespaces(self):
""" """
if False:
yield None
```
to
```python
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` and `yield`
- `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.1 parent 4a38e2e commit efaf64d
2 files changed
+23
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
364 | 364 | | |
365 | 365 | | |
366 | 366 | | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
367 | 372 | | |
368 | 373 | | |
369 | 374 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
0 commit comments