Автостопом по 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 объединит следующие друг за другом строки, если последний символ строки — обратный слэш. В некоторых случаях это может оказаться полезным, но такого подхода следует избегать, потому что знак пробела, добавленный в конце строки, разрушит код и может привести к неожиданным последствиям.