Книга: Как устроен Python. Гид для разработчиков, программистов и интересующихся
Назад: 9. Строки
Дальше: 11. Строки и методы

10. dir, help и pdb

Наше знакомство со строками было в лучшем случае поверхностным, но сейчас нужно ненадолго прерваться для обсуждения двух важных функций и одной библиотеки, включенных в поставку Python. Первая функция — dir — показывает, каким мощным и полезным инструментом является REPL. Функция dir возвращает атрибуты объекта. Если у вас открыт интерпретатор Python и вы хотите узнать атрибуты строки, эта функция выдает следующий результат:

>>> dir('Matt')

 

['__add__', '__class__', '__contains__',

'__delattr__', '__dir__', '__doc__', '__eq__',

'__format__', '__ge__', '__getattribute__',

'__getitem__', '__getnewargs__', '__gt__',

'__hash__', '__init__', '__iter__', '__le__',

'__len__', '__lt__', '__mod__', '__mul__', '__ne__',

'__new__', '__reduce__', '__reduce_ex__', '__repr__',

'__rmod__', '__rmul__', '__setattr__', '__sizeof__',

'__str__', '__subclasshook__', 'capitalize',

'casefold', 'center', 'count', 'encode', 'endswith',

'expandtabs', 'find', 'format', 'format_map',

'index', 'isalnum', 'isalpha', 'isdecimal',

'isdigit', 'isidentifier', 'islower', 'isnumeric',

'isprintable', 'isspace', 'istitle', 'isupper',

'join', 'ljust', 'lower', 'lstrip', 'maketrans',

'partition', 'replace', 'rfind', 'rindex', 'rjust',

'rpartition', 'rsplit', 'rstrip', 'split',

'splitlines', 'startswith', 'strip', 'swapcase',

'title', 'translate', 'upper', 'zfill']

dir выводит все атрибуты переданного объекта. Так как функции dir была передана строка 'Matt', функция выводит атрибуты строки. Эта удобная возможность языка Python демонстрирует его философию по принципу «батарейки прилагаются»: Python предоставляет простой механизм для получения атрибутов любого объекта. В других языках для получения доступа к такой функциональности могут потребоваться специальные сайты, документация или IDE, но в Python благодаря наличию REPL эту информацию можно получить быстро и легко.

Список атрибутов упорядочен по алфавиту; на первую пару атрибутов, начинающихся с __, обычно можно не обращать внимания. Позднее вам встретятся такие атрибуты, как capitalize (запись строки с прописной буквы), format (форматирование строк, продемонстрированное выше) или lower (преобразование строки к нижнему регистру). Эти атрибуты являются методами — функциями, связанными с объектами. Чтобы вызвать функцию, поставьте точку после объекта, укажите имя метода и поставьте круглые скобки.

Три примера вызова методов:

>>> print('matt'.capitalize())

Matt

 

>>> print('Hi {}'.format('there'))

Hi there

 

>>> print('YIKES'.lower())

yikes

10.1. Специальные методы

Возможно, вас интересуют атрибуты, начинающиеся с __. Как было сказано выше, эти атрибуты соответствуют методам; люди называют их специальными, волшебными или дандер-методами (dunder methods). Специальные методы определяют, что происходит во внутренней реализации при выполнении операций с объектами. Например, при применении оператора + или % к строке будет вызван метод .__add__ или .__mod__ соответственно. Неопытные программисты Python обычно забывают о специальных методах. Но когда вы начнете реализовывать собственные классы и захотите, чтобы они реагировали на такие операции, как + или %, вы можете определить их.

СОВЕТ

В документации help() имеется тема SPECIALMETHODS с описаниями этих методов.

Также описания доступны на сайте Python. Откройте раздел Documentation, Language Reference, Data Model — они находятся здесь.

10.2. help

Help — другая встроенная функция, используемая в сочетании с REPL. В книге ранее уже упоминался вызов help() без аргументов для вызова справочной документации.

Функция help также выводит документацию для метода, модуля, класса или функции, переданной в аргументе. Например, если вас интересует, что делает атрибут upper у строк, информация может быть получена следующим вызовом:

>>> help('some string'.upper)

Help on built-in function upper:

 

upper(...) method of builtins.str instance

S.upper() -> str

 

Return a copy of S converted to uppercase.

Функция help в сочетании с REPL позволяет читать документацию, не открывая браузера, и даже без доступа к интернету. Даже если вы попали на необитаемый остров, все равно сможете изучать Python — для этого понадобится лишь компьютер с установленной версией Python и источник питания.

10.3. pdb

В Python также включен отладчик для пошагового выполнения кода. Он находится в модуле с именем pdb. Эта библиотека построена по образцу библиотеки gdb языка C. Чтобы выйти в отладчик в любой точке программы Python, вставьте в нее следующий код:

import pdb; pdb.set_trace()

На самом деле здесь две команды, но я обычно размещаю их в одной строке, разделив точкой с запятой (;) — так после завершения отладки обе команды можно будет удалить одним нажатием клавиши в редакторе. Пожалуй, это единственная ситуация, в которой я использую точку с запятой в коде Python (две команды в одной строке).

При выполнении в этой строке открывается приглашение (pdb), напоминающее приглашение REPL. В нем также можно выполнять код, просматривать объекты и переменные. Кроме того, вы сможете установить точки прерывания для последующего анализа.

Ниже приведена таблица со списком полезных команд pdb:

Команда

Описание

h, help

Вывести список доступных команд

n, next

Выполнить следующую строку

c, cont, continue

Продолжать выполнение до следующей точки прерывания

w, where, bt

Вывести трассировку стека с информацией о текущей позиции выполнения

u, up

Подняться на уровень вверх в стеке

d, down

Опуститься на уровень вниз в стеке

l, list

Вывести исходный код текущей строки

ПРИМЕЧАНИЕ

В книге «Programming Pearls» Джон Бентли (Jon Bentley) пишет:

«Когда мне приходится отлаживать маленький алгоритм где-то в недрах большой программы, я иногда использую средства отладки… хотя команды отладочного вывода обычно быстрее реализуются и работают эффективнее хитроумных отладчиков».

Я слышал, как Гвидо ван Россум, создатель Python, высказывает то же мнение: он предпочитает отладочный вывод. Принцип отладочного вывода прост: вы вставляете функции print, которые поясняют, что происходит в программе. Часто этого оказывается достаточно для выявления проблемы. Не забудьте удалить команды отладки или преобразовать их в команды записи в журнал перед выпуском кода.

Если потребуется более серьезный анализ, вы всегда можете воспользоваться модулем pdb.

10.4. Итоги

Python предоставляет много вспомогательных инструментов, упрощающих жизнь разработчика. Если вы научились работать с REPL, то сможете пользоваться ими. Функция dir выводит информацию о том, какими атрибутами обладает объект. Функция help поможет проанализировать эти атрибуты для документации.

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

10.5. Упражнения

1. Откройте REPL и создайте переменную name со своим именем. Выведите атрибуты строки. Выведите справочную документацию для методов .find и .title.

2. Откройте REPL и создайте переменную age со своим возрастом. Выведите атрибуты целого числа. Выведите справочную документацию для метода .numerator.

Назад: 9. Строки
Дальше: 11. Строки и методы