mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 11:04:25 +01:00
Translate Yielding None example
This commit is contained in:
parent
972d1334fb
commit
ecaab6dca1
33
translations/README-ru.md
vendored
33
translations/README-ru.md
vendored
@ -1511,3 +1511,36 @@ True
|
|||||||
* Оператор += изменяет объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры и атрибут класса также.
|
* Оператор += изменяет объект на месте, не создавая новый объект. Таким образом, изменение атрибута одного экземпляра влияет на другие экземпляры и атрибут класса также.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
### ▶ Возврат None из генератора
|
||||||
|
<!-- Example ID: 5a40c241-2c30-40d0-8ba9-cf7e097b3b53 --->
|
||||||
|
```py
|
||||||
|
some_iterable = ('a', 'b')
|
||||||
|
|
||||||
|
def some_func(val):
|
||||||
|
return "something"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат (<= 3.7.x):**
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> [x for x in some_iterable]
|
||||||
|
['a', 'b']
|
||||||
|
>>> [(yield x) for x in some_iterable]
|
||||||
|
<generator object <listcomp> at 0x7f70b0a4ad58>
|
||||||
|
>>> list([(yield x) for x in some_iterable])
|
||||||
|
['a', 'b']
|
||||||
|
>>> list((yield x) for x in some_iterable)
|
||||||
|
['a', None, 'b', None]
|
||||||
|
>>> list(some_func((yield x)) for x in some_iterable)
|
||||||
|
['a', 'something', 'b', 'something']
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 Объяснение:
|
||||||
|
- Это баг в обработке yield в генераторах и списочных выражениях CPython.
|
||||||
|
- Исходный код и объяснение можно найти [здесь](https://stackoverflow.com/questions/32139885/yield-in-list-comprehensions-and-generator-expressions)
|
||||||
|
- Связанный [отчет об ошибке](https://bugs.python.org/issue10544)
|
||||||
|
- В Python 3.8+ yield внутри списочных выражений больше не допускается и выдает `SyntaxError`.
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user