mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 02:54:25 +01:00
Translate Loop variables leaking out example
This commit is contained in:
parent
3df9d0e4e3
commit
473e4229f2
65
translations/README-ru.md
vendored
65
translations/README-ru.md
vendored
@ -2230,3 +2230,68 @@ for idx, item in enumerate(list_4):
|
|||||||
Первый аргумент сжатия должен иметь наименьшее число элементов
|
Первый аргумент сжатия должен иметь наименьшее число элементов
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
### ▶ Утечка переменных внутри цикла
|
||||||
|
<!-- Example ID: ccec7bf6-7679-4963-907a-1cd8587be9ea --->
|
||||||
|
1\.
|
||||||
|
```py
|
||||||
|
for x in range(7):
|
||||||
|
if x == 6:
|
||||||
|
print(x, ': for x inside loop')
|
||||||
|
print(x, ': x in global')
|
||||||
|
```
|
||||||
|
|
||||||
|
**Вывод:**
|
||||||
|
```py
|
||||||
|
6 : for x inside loop
|
||||||
|
6 : x in global
|
||||||
|
```
|
||||||
|
|
||||||
|
Но `x` не была определена за пределами цикла `for`...
|
||||||
|
|
||||||
|
2\.
|
||||||
|
```py
|
||||||
|
# В этот раз определим x до цикла
|
||||||
|
x = -1
|
||||||
|
for x in range(7):
|
||||||
|
if x == 6:
|
||||||
|
print(x, ': for x inside loop')
|
||||||
|
print(x, ': x in global')
|
||||||
|
```
|
||||||
|
|
||||||
|
**Вывод:**
|
||||||
|
```py
|
||||||
|
6 : for x inside loop
|
||||||
|
6 : x in global
|
||||||
|
```
|
||||||
|
|
||||||
|
3\.
|
||||||
|
|
||||||
|
**Вывод (Python 2.x):**
|
||||||
|
```py
|
||||||
|
>>> x = 1
|
||||||
|
>>> print([x for x in range(5)])
|
||||||
|
[0, 1, 2, 3, 4]
|
||||||
|
>>> print(x)
|
||||||
|
4
|
||||||
|
```
|
||||||
|
|
||||||
|
**Вывод (Python 3.x):**
|
||||||
|
```py
|
||||||
|
>>> x = 1
|
||||||
|
>>> print([x for x in range(5)])
|
||||||
|
[0, 1, 2, 3, 4]
|
||||||
|
>>> print(x)
|
||||||
|
1
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 Объяснение:
|
||||||
|
|
||||||
|
- В Python циклы for используют область видимости, в которой они существуют, и оставляют свою определенную переменную цикла после завершения. Это также относится к случаям, когда мы явно определили переменную цикла for в глобальном пространстве имен. В этом случае будет произведена перепривязка существующей переменной.
|
||||||
|
|
||||||
|
- Различия в выводе интерпретаторов Python 2.x и Python 3.x для примера с пониманием списков можно объяснить следующим изменением, задокументированным в журнале изменений [What's New In Python 3.0](https://docs.python.org/3/whatsnew/3.0.html):
|
||||||
|
|
||||||
|
> "Генераторы списков ("list comprehensions") больше не поддерживает синтаксическую форму `[... for var in item1, item2, ...]`. Вместо этого используйте `[... for var in (item1, item2, ...)]`. Кроме того, обратите внимание, что генераторы списков имеют другую семантику: они ближе к синтаксическому сахару для генераторного выражения внутри конструктора `list()`, и, в частности, управляющие переменные цикла больше не просачиваются в окружающую область видимости."
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user