mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-12-22 21:00:09 +01:00
Translate First things first! example to russian
This commit is contained in:
parent
b5b8b83c0a
commit
86140390ad
127
translations/README-ru.md
vendored
127
translations/README-ru.md
vendored
@ -21,6 +21,10 @@ PS: Если вы уже читали **wtfpython** раньше, с измен
|
||||
- [Содержание](#содержание)
|
||||
- [Структура примера](#структура-примера)
|
||||
- [Применение](#применение)
|
||||
- [👀 Примеры](#-примеры)
|
||||
- [Секция: Напряги мозги!](#секция-напряги-мозги)
|
||||
- [▶ Первым делом!](#-первым-делом)
|
||||
- [💡 Обьяснение](#-обьяснение)
|
||||
|
||||
# Структура примера
|
||||
|
||||
@ -78,3 +82,126 @@ PS: Вы также можете читать WTFPython в командной с
|
||||
pip install wtfpython -U
|
||||
wtfpython
|
||||
```
|
||||
|
||||
# 👀 Примеры
|
||||
|
||||
## Секция: Напряги мозги!
|
||||
|
||||
### ▶ Первым делом!
|
||||
|
||||
<!-- Example ID: d3d73936-3cf1-4632-b5ab-817981338863 -->
|
||||
<!-- read-only -->
|
||||
|
||||
По какой-то причине "моржовый оператор" (англ. walrus) `:=` в Python 3.8 стал довольно популярным. Давайте проверим его,
|
||||
|
||||
1\.
|
||||
|
||||
```py
|
||||
# Python version 3.8+
|
||||
|
||||
>>> a = "wtf_walrus"
|
||||
>>> a
|
||||
'wtf_walrus'
|
||||
|
||||
>>> a := "wtf_walrus"
|
||||
File "<stdin>", line 1
|
||||
a := "wtf_walrus"
|
||||
^
|
||||
SyntaxError: invalid syntax
|
||||
|
||||
>>> (a := "wtf_walrus") # А этот код работает
|
||||
'wtf_walrus'
|
||||
>>> a
|
||||
'wtf_walrus'
|
||||
```
|
||||
|
||||
2 \.
|
||||
|
||||
```py
|
||||
# Python version 3.8+
|
||||
|
||||
>>> a = 6, 9
|
||||
>>> a
|
||||
(6, 9)
|
||||
|
||||
>>> (a := 6, 9)
|
||||
(6, 9)
|
||||
>>> a
|
||||
6
|
||||
|
||||
>>> a, b = 6, 9 # Типичная распаковка
|
||||
>>> a, b
|
||||
(6, 9)
|
||||
>>> (a, b = 16, 19) # Упс
|
||||
File "<stdin>", line 1
|
||||
(a, b = 16, 19)
|
||||
^
|
||||
SyntaxError: invalid syntax
|
||||
|
||||
>>> (a, b := 16, 19) # На выводе получаем странный кортеж из 3 элементов
|
||||
(6, 16, 19)
|
||||
|
||||
>>> a # Значение переменной остается неизменной?
|
||||
6
|
||||
|
||||
>>> b
|
||||
16
|
||||
```
|
||||
|
||||
#### 💡 Обьяснение
|
||||
|
||||
**Быстрый разбор что такое "моржовый оператор"**
|
||||
|
||||
"Моржовый оператор" (`:=`) был представлен в Python 3.8, может быть полезен в ситуациях, когда вы хотите присвоить значения переменным в выражении.
|
||||
|
||||
```py
|
||||
def some_func():
|
||||
# Предположим, что здесь выполняются требовательные к ресурсам вычисления
|
||||
# time.sleep(1000)
|
||||
return 5
|
||||
|
||||
# Поэтому вместо,
|
||||
if some_func():
|
||||
print(some_func()) # Плохая практика, поскольку вычисления происходят дважды.
|
||||
|
||||
# Или
|
||||
a = some_func()
|
||||
if a:
|
||||
print(a)
|
||||
|
||||
# Можно лаконично написать
|
||||
if a := some_func():
|
||||
print(a)
|
||||
```
|
||||
|
||||
**Вывод (> 3.8):**
|
||||
|
||||
```py
|
||||
5
|
||||
5
|
||||
5
|
||||
```
|
||||
|
||||
Использование `:=` сэкономило одну строку кода и неявно предотвратило вызов `some_func` дважды.
|
||||
|
||||
- "выражение присваивания", не обернутое в скобки, иначе говоря использование моржового оператора, ограничено на верхнем уровне, отсюда `SyntaxError` в выражении `a := "wtf_walrus"` в первом фрагменте. После оборачивания в скобки, `a` было присвоено значение, как и ожидалось.
|
||||
|
||||
- В то же время оборачивание скобками выражения, содержащего оператор `=`, не допускается. Отсюда синтаксическая ошибка в `(a, b = 6, 9)`.
|
||||
|
||||
- Синтаксис моржового оператора имеет вид `NAME:= expr`, где `NAME` - допустимый идентификатор, а `expr` - допустимое выражение. Следовательно, упаковка и распаковка итерируемых объектов не поддерживается, что означает,
|
||||
|
||||
- `(a := 6, 9)` эквивалентно `((a := 6), 9)` и в конечном итоге `(a, 9)` (где значение `a` равно `6`)
|
||||
|
||||
```py
|
||||
>>> (a := 6, 9) == ((a := 6), 9)
|
||||
True
|
||||
>>> x = (a := 696, 9)
|
||||
>>> x
|
||||
(696, 9)
|
||||
>>> x[0] is a # Оба ссылаются на одну и ту же ячейку памяти
|
||||
True
|
||||
```
|
||||
|
||||
- Аналогично, `(a, b := 16, 19)` эквивалентно `(a, (b := 16), 19)`, которое есть не что иное, как кортеж из 3 элементов.
|
||||
|
||||
---
|
||||
|
Loading…
x
Reference in New Issue
Block a user