Простой Python. Современный стиль программирования (Любанович) - страница 79

>6 fog

>7 hail

Стандартная библиотека Python

Одно из основных преимуществ Python заключается в том, что у него есть собственный «запас мощности» — большая стандартная библиотека модулей, которые выполняют множество полезных задач и располагаются отдельно друг от друга, чтобы избежать разрастания ядра языка. Когда вы собираетесь писать код, зачастую сначала стоит проверить, существует ли стандартный модуль, который уже делает то, что вы хотите. Удивительно, как часто вы будете встречать эти небольшие жемчужины в стандартной библиотеке. Python также предоставляет авторитетную документацию для модулей наряду с руководством для пользователей (http://docs.python.org/3/library). Сайт Дага Хеллмана (Doug Hellmann) Python Module of the Week (http://bit.ly/py-motw) и его книга The Python Standard Library by Example («Стандартная библиотека Python в примерах»), выпущенная издательством Addison-Wesley Professional, также являются очень полезными руководствами.

В следующих главах книги показано множество стандартных модулей, которые предназначены для работы с Сетью, системами, базами данных и т. д. В этом разделе я поговорю о стандартных модулях, которые имеют более общие варианты использования.

Обработка отсутствующих ключей с помощью функций setdefault() и defaultdict()

Вы уже видели, что попытка получить доступ к словарю с помощью несуществующего ключа генерирует исключение. Использование функции словаря get() для того, чтобы вернуть значение по умолчанию, помогает этого избежать.

Функция setdefault() похожа на функцию get(), но она также присваивает элемент словарю, если заданный ключ отсутствует:

>>>> periodic_table = {'Hydrogen': 1, 'Helium': 2}

>>>> print(periodic_table)

>{'Helium': 2, 'Hydrogen': 1}

Если ключа еще нет в словаре, будет использовано новое значение:

>>>> carbon = periodic_table.setdefault('Carbon', 12)

>>>> carbon

>12

>>>> periodic_table

>{'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}

Если мы пытаемся присвоить другое значение по умолчанию уже существующему ключу, будет возвращено оригинальное значение и ничто не изменится:

>>>> helium = periodic_table.setdefault('Helium', 947)

>>>> helium

>2

>>>> periodic_table

>{'Helium': 2, 'Carbon': 12, 'Hydrogen': 1}

Функция defaultdict() похожа на предыдущую, но она определяет значение по умолчанию для новых ключей заранее, при создании словаря. В этом примере мы передаем функцию int, которая будет вызываться как int(), и возвращаем значение 0:

>>>> from collections import defaultdict

>>>> periodic_table = defaultdict(int)

Теперь любое отсутствующее значение будет заменяться целым числом (int) 0: