mirror of
https://github.com/satwikkansal/wtfpython
synced 2024-11-22 11:04:25 +01:00
Translate Needles in a haystack example
This commit is contained in:
parent
0d28d47f08
commit
2043112a9d
176
translations/README-ru.md
vendored
176
translations/README-ru.md
vendored
@ -2569,3 +2569,179 @@ def get_middle(some_list):
|
|||||||
- Дополнительную информацию можно найти в [документации](https://docs.python.org/3/library/functions.html#round) функции `round` или на [StackOverflow](https://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior).
|
- Дополнительную информацию можно найти в [документации](https://docs.python.org/3/library/functions.html#round) функции `round` или на [StackOverflow](https://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
### ▶ Иголки в стоге сена *
|
||||||
|
|
||||||
|
<!-- Example ID: 52a199b1-989a-4b28-8910-dff562cebba9 --->
|
||||||
|
|
||||||
|
Я не встречал ни одного питониста на данный момент, который не встречался с одним из следующих сценариев,
|
||||||
|
|
||||||
|
1\.
|
||||||
|
|
||||||
|
```py
|
||||||
|
x, y = (0, 1) if True else None, None
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> x, y # ожидается (0, 1)
|
||||||
|
((0, 1), None)
|
||||||
|
```
|
||||||
|
|
||||||
|
2\.
|
||||||
|
|
||||||
|
```py
|
||||||
|
t = ('one', 'two')
|
||||||
|
for i in t:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
t = ('one')
|
||||||
|
for i in t:
|
||||||
|
print(i)
|
||||||
|
|
||||||
|
t = ()
|
||||||
|
print(t)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
|
||||||
|
```py
|
||||||
|
one
|
||||||
|
two
|
||||||
|
o
|
||||||
|
n
|
||||||
|
e
|
||||||
|
tuple()
|
||||||
|
```
|
||||||
|
|
||||||
|
3\.
|
||||||
|
|
||||||
|
```py
|
||||||
|
ten_words_list = [
|
||||||
|
"some",
|
||||||
|
"very",
|
||||||
|
"big",
|
||||||
|
"list",
|
||||||
|
"that"
|
||||||
|
"consists",
|
||||||
|
"of",
|
||||||
|
"exactly",
|
||||||
|
"ten",
|
||||||
|
"words"
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат**
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> len(ten_words_list)
|
||||||
|
9
|
||||||
|
```
|
||||||
|
|
||||||
|
4\. Недостаточно твердое утверждение
|
||||||
|
|
||||||
|
```py
|
||||||
|
a = "python"
|
||||||
|
b = "javascript"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
|
||||||
|
```py
|
||||||
|
# assert выражение с сообщением об ошиб
|
||||||
|
>>> assert(a == b, "Both languages are different")
|
||||||
|
# Исключение AssertionError не возникло
|
||||||
|
```
|
||||||
|
|
||||||
|
5\.
|
||||||
|
|
||||||
|
```py
|
||||||
|
some_list = [1, 2, 3]
|
||||||
|
some_dict = {
|
||||||
|
"key_1": 1,
|
||||||
|
"key_2": 2,
|
||||||
|
"key_3": 3
|
||||||
|
}
|
||||||
|
|
||||||
|
some_list = some_list.append(4)
|
||||||
|
some_dict = some_dict.update({"key_4": 4})
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> print(some_list)
|
||||||
|
None
|
||||||
|
>>> print(some_dict)
|
||||||
|
None
|
||||||
|
```
|
||||||
|
|
||||||
|
6\.
|
||||||
|
|
||||||
|
```py
|
||||||
|
def some_recursive_func(a):
|
||||||
|
if a[0] == 0:
|
||||||
|
return
|
||||||
|
a[0] -= 1
|
||||||
|
some_recursive_func(a)
|
||||||
|
return a
|
||||||
|
|
||||||
|
def similar_recursive_func(a):
|
||||||
|
if a == 0:
|
||||||
|
return a
|
||||||
|
a -= 1
|
||||||
|
similar_recursive_func(a)
|
||||||
|
return a
|
||||||
|
```
|
||||||
|
|
||||||
|
**Результат:**
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> some_recursive_func([5, 0])
|
||||||
|
[0, 0]
|
||||||
|
>>> similar_recursive_func(5)
|
||||||
|
4
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 Объяснение:
|
||||||
|
|
||||||
|
* Для 1 примера правильным выражением для ожидаемого поведения является `x, y = (0, 1) if True else (None, None)`.
|
||||||
|
|
||||||
|
* Для 2 примера правильным выражением для ожидаемого поведения будет `t = ('one',)` или `t = 'one',` (пропущена запятая), иначе интерпретатор рассматривает `t` как `str` и перебирает его символ за символом.
|
||||||
|
|
||||||
|
* `()` - специальное выражение, обозначающая пустой `tuple`.
|
||||||
|
|
||||||
|
* В 3 примере, как вы, возможно, уже поняли, пропущена запятая после 5-го элемента (`"that"`) в списке. Таким образом, неявная конкатенация строковых литералов,
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> ten_words_list
|
||||||
|
['some', 'very', 'big', 'list', 'thatconsists', 'of', 'exactly', 'ten', 'words']
|
||||||
|
```
|
||||||
|
|
||||||
|
* В 4-ом фрагменте не возникло `AssertionError`, потому что вместо "проверки" отдельного выражения `a == b`, мы "проверяем" весь кортеж. Следующий фрагмент прояснит ситуацию,
|
||||||
|
|
||||||
|
```py
|
||||||
|
>>> a = "python"
|
||||||
|
>>> b = "javascript"
|
||||||
|
>>> assert a == b
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
AssertionError
|
||||||
|
|
||||||
|
>>> assert (a == b, "Values are not equal")
|
||||||
|
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?
|
||||||
|
|
||||||
|
>>> assert a == b, "Values are not equal"
|
||||||
|
Traceback (most recent call last):
|
||||||
|
File "<stdin>", line 1, in <module>
|
||||||
|
AssertionError: Values are not equal
|
||||||
|
```
|
||||||
|
* Что касается пятого фрагмента, то большинство методов, изменяющих элементы последовательности/маппингов, такие как `list.append`, `dict.update`, `list.sort` и т. д., изменяют объекты на месте и возвращают `None`. Это делается для того, чтобы повысить производительность, избегая создания копии объекта, если операция может быть выполнена на месте (подробнее в [документации](https://docs.python.org/3/faq/design.html#why-doesn-t-list-sort-return-the-sorted-list)).
|
||||||
|
|
||||||
|
* Последнее должно быть достаточно очевидным, изменяемый объект (например, `list`) может быть изменен в функции, а переназначение неизменяемого (`a -= 1`) не является изменением значения.
|
||||||
|
|
||||||
|
* Знание этих тонкостей может сэкономить вам часы отладки в долгосрочной перспективе.
|
||||||
|
|
||||||
|
---
|
||||||
|
Loading…
Reference in New Issue
Block a user