1
0
mirror of https://github.com/satwikkansal/wtfpython synced 2024-11-25 04:24:23 +01:00

Translate Name resolution ignoring class scope example

This commit is contained in:
Vadim Nifadev 2024-04-23 12:07:47 +03:00
parent 40503d5ac5
commit a25fe26adc

View File

@ -2473,3 +2473,47 @@ a += [5, 6, 7, 8]
* Выражение `a += [5,6,7,8]` фактически отображается на функцию "extend", которая работает со списком так, что `a` и `b` по-прежнему указывают на тот же самый список, который был изменен на месте.
---
### ▶ Разрешение имен игнорирует область видимости класса
<!-- Example ID: 03f73d96-151c-4929-b0a8-f74430788324 --->
1\.
```py
x = 5
class SomeClass:
x = 17
y = (x for i in range(10))
```
**Результат:**
```py
>>> list(SomeClass.y)[0]
5
```
2\.
```py
x = 5
class SomeClass:
x = 17
y = [x for i in range(10)]
```
**Результат (Python 2.x):**
```py
>>> SomeClass.y[0]
17
```
**Результат (Python 3.x):**
```py
>>> SomeClass.y[0]
5
```
#### 💡 Объяснение
- Области видимости, вложенные внутрь определения класса, игнорируют имена, связанные на уровне класса.
- Выражение-генератор имеет свою собственную область видимости.
- Начиная с версии Python 3.X, списковые вычисления также имеют свою собственную область видимости.
---