mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 19:14:24 +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
|
pip install wtfpython -U
|
||||||
wtfpython
|
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…
Reference in New Issue
Block a user