Skip to content

Commit

Permalink
Sync changes with English version
Browse files Browse the repository at this point in the history
  • Loading branch information
lancelote committed Nov 20, 2018
1 parent 0674405 commit 9d2d2b9
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 13 deletions.
9 changes: 5 additions & 4 deletions book/classes.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,18 +187,19 @@ class GetTest(object):
def __getitem__(self,i):
return self.info[i]

foo = OldClass()
foo['title']
foo = GetTest()

foo['name']
# Вывод: 'Yasoob'

foo['number']
# Вывод: 36845124
# Вывод: 12345812
```

Без реализации `__getitem__` вы бы получили следующую ошибку:

```
>>> foo['title']
>>> foo['name']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
Expand Down
4 changes: 2 additions & 2 deletions book/function_caching.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,9 @@ def memoize(function):
memo = {}
@wraps(function)
def wrapper(*args):
if args in memo:
try:
return memo[args]
else:
except KeyError:
rv = function(*args)
memo[args] = rv
return rv
Expand Down
42 changes: 35 additions & 7 deletions book/ternary_operators.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@
**Шаблон:**

```python
condition_is_true if condition else condition_is_false
condition_if_true if condition else condition_if_false
```

**Пример:**

```python
is_fat = True
state = "fat" if is_fat else "not fat"
is_nice = True
state = "nice" if is_nice else "not nice"
```

Такой подход позволяет быстро проверить условие, а не писать несколько строчек
Expand All @@ -35,10 +35,10 @@ state = "fat" if is_fat else "not fat"
**Пример:**

```python
fat = True
fitness = ("худой", "толстый")[fat]
print("Али ", fitness)
# Вывод: Али толстый
nice = True
personality = ("вредная", "добрая")[nice]
print("Кошка ", personality)
# Вывод: Кошка добрая
```

Это работает поскольку в Python `True == 1` и `False == 0`. Помимо кортежей
Expand Down Expand Up @@ -68,3 +68,31 @@ print((1/0, 2)[condition])
условного оператора `if`. Таким образом, если один из случаев может вернуть
ошибку или обработка обоих случаев является слишком затратной операцией, то
вариант с кортежами точно не стоит использовать.

**Сокращенный тернарный оператор**

В Python также существует более краткий вариант тернарного оператора.
Этот синтакис был добавлен в Python 2.5 и может быть использован в новых
версиях.

**Пример:**

```python
True or "Some"
# Вывод: True

False or "Some"
# Вывод: 'Some'
```

Первое выражение (`True or "Some"`) возвращает `True` и второе - `Some`.

Это удобно, когда нужно быстро проверить вернувшееся из функции значение и
показать сообщение, если значения не было (вернулся `None`):

```python
func_output = None
msg = func_output or "Не было возвращено данных"
print(msg)
# Вывод: Не было возвращено данных
```

0 comments on commit 9d2d2b9

Please sign in to comment.