Автостопом по Python | страница 43
Плохой код | Хороший код |
---|---|
>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) |
Используйте функцию enumerate(), чтобы определить свою позицию в списке. Этот вариант выглядит более читаемым, чем создание счетчика, и лучше оптимизирован для итераторов:
>>>> a = ["icky", "icky", "icky", "p-tang"]
>>>> for i, item in enumerate(a):
>… ····print("{i}: {item}".format(i=i, item=item))
>…
>0: icky
>1: icky
>2: icky
>3: p-tang
Когда логическая строка кода длиннее принятого значения[38], нужно разбить строку на несколько физических строк. Интерпретатор Python объединит следующие друг за другом строки, если последний символ строки — обратный слэш. В некоторых случаях это может оказаться полезным, но такого подхода следует избегать, потому что знак пробела, добавленный в конце строки, разрушит код и может привести к неожиданным последствиям.