diff --git a/translations/README-ru.md b/translations/README-ru.md index d4928fe..b78689d 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -2230,3 +2230,68 @@ for idx, item in enumerate(list_4): Первый аргумент сжатия должен иметь наименьшее число элементов --- + + +### ▶ Утечка переменных внутри цикла + +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()`, и, в частности, управляющие переменные цикла больше не просачиваются в окружающую область видимости." + +---