From 654da92e887babdec7994b64b819e93c33e7859b Mon Sep 17 00:00:00 2001 From: Vadim Nifadev <36514612+nifadyev@users.noreply.github.com> Date: Fri, 19 Apr 2024 12:43:52 +0300 Subject: [PATCH] Translate For what? example --- translations/README-ru.md | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/translations/README-ru.md b/translations/README-ru.md index d164aaf..5b584ed 100644 --- a/translations/README-ru.md +++ b/translations/README-ru.md @@ -733,3 +733,57 @@ Iteration 0 - Предостережение - если в блоке `finally` выполняется оператор `return` или `break`, то временно сохраненное исключение отбрасывается. --- + + +### ▶ Для чего? + +```py +some_string = "wtf" +some_dict = {} +for i, some_dict[i] in enumerate(some_string): + i = 10 +``` + +**Вывод:** +```py +>>> some_dict # Словарь с индексами +{0: 'w', 1: 't', 2: 'f'} +``` + +#### 💡 Объяснение: + +* Оператор `for` определяется в [грамматике Python](https://docs.python.org/3/reference/grammar.html) как: + ``` + for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite] + ``` + Где `exprlist` - цель присваивания. Это означает, что эквивалент `{exprlist} = {next_value}` **выполняется для каждого элемента** в итерируемом объекте. + Интересный пример, иллюстрирующий это: + ```py + for i in range(4): + print(i) + i = 10 + ``` + + **Результат:** + ``` + 0 + 1 + 2 + 3 + ``` + + Не ожидали, что цикл будет запущен только один раз? + + **💡 Объяснение:**. + + - Оператор присваивания `i = 10` никогда не влияет на итерации цикла из-за того, как циклы for работают в Python. Перед началом каждой итерации следующий элемент, предоставляемый итератором (в данном случае `range(4)`), распаковывается и присваивается переменной целевого списка (в данном случае `i`). + +* Функция `enumerate(some_string)` на каждой итерации выдает новое значение `i` (счетчик-инкремент) и символ из `some_string`. Затем она устанавливает (только что присвоенный) ключ `i` словаря `some_dict` на этот символ. Развертывание цикла можно упростить следующим образом: + ```py + >>> i, some_dict[i] = (0, 'w') + >>> i, some_dict[i] = (1, 't') + >>> i, some_dict[i] = (2, 'f') + >>> some_dict + ``` + +---