mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-12-22 12:50:23 +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…
x
Reference in New Issue
Block a user