mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-24 20:14:23 +01:00
Translate For what? example
This commit is contained in:
parent
83bdff8e33
commit
654da92e88
54
translations/README-ru.md
vendored
54
translations/README-ru.md
vendored
@ -733,3 +733,57 @@ Iteration 0
|
|||||||
- Предостережение - если в блоке `finally` выполняется оператор `return` или `break`, то временно сохраненное исключение отбрасывается.
|
- Предостережение - если в блоке `finally` выполняется оператор `return` или `break`, то временно сохраненное исключение отбрасывается.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
### ▶ Для чего?
|
||||||
|
<!-- Example ID: 64a9dccf-5083-4bc9-98aa-8aeecde4f210 --->
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user