Соглашения
Соглашения важны для всех, но это не единственный способ решения задачи. Соглашения, приведенные в этом разделе, довольно распространены, и мы рекомендуем придерживаться их, чтобы сделать свой код более читаемым.
Если вам не нужно явно сравнивать свое значение со значением True, None или 0, вы можете добавить его к оператору if, как в следующих примерах (см. статью «Проверка значения на правдивость» (http://docs.python.org/library/stdtypes.html#truth-value-testing) — там представлен список значений, которые расцениваются как False).
| Плохой код | Хороший код |
|---|---|
if attr == True: |
# Просто проверяем значение |
····print 'True!' |
if attr: |
····print 'attr is truthy!' |
|
# или проверяем на противоположное значение |
|
if not attr: |
|
····print 'attr is falsey!' |
|
# если вам нужно только значение 'True' |
|
if attr is True: |
|
····print 'attr is True' |
|
if attr == None: |
# или явно проверяем на значение None |
····print 'attr is None!' |
if attr is None: |
····print 'attr is None!' |
Используйте синтаксис x in d вместо метода dict.has_key или передавайте аргумент по умолчанию в метод dict.get().
| Плохой код | Хороший код |
|---|---|
>>> d = {'hello': 'world'} |
>>> d = {'hello': 'world'} |
>>> |
>>> |
>>> if d.has_key('hello'): |
>>> print d.get('hello', 'default_value') |
… ····print(d['hello']) |
world |
# prints 'world' |
>>> print d.get('howdy', 'default_value') |
… else: |
default_value |
… ····print('default_value') |
>>> |
… |
>>> # или: |
world |
… if 'hello' in d: |
… ····print(d['hello']) |
|
… |
|
world |
Списковые включения — мощный способ работы со списками (для получения более подробной информации обратитесь к соответствующей статье в руководстве The Python Tutorial по адресу http://docs.python.org/tutorial/datastructures.html#list-comprehensions). Функции map() и filter() могут выполнять операции со списками с помощью другого, более выразительного синтаксиса.
| Стандартный цикл | Списковое включение |
|---|---|
# Отфильтруем все элементы, |
# Списковое включение выглядит |
# чье значение превышает 4 |
# прозрачнее |
a = [3, 4, 5] |
a = [3, 4, 5] |
b = [] |
b = [i for i in a if i > 4] |
for i in a: |
# Или: |
····if i > 4: |
b = filter(lambda x: x > 4, a) |
········b.append(i) |
|
# Добавим 3 к каждому элементу списка |
# Здесь также прозрачнее |
a = [3, 4, 5] |
a = [3, 4, 5] |
for i in range(len(a)): |
a = [i + 3 for i in a] |
····a[i] += 3 |
# Или: |
a = map(lambda i: i + 3, a) |