Spec-Zone.ru › Python 2.7

pprint — Печать данных в красивом формате

Исходный код: Lib/pprint.py

Модуль pprint предоставляет возможность «красивой печати» произвольных Python-структур данных в формате, который может быть использован в качестве входных данных для интерпретатора. Если отформатированные структуры включают объекты, которые не являются фундаментальными типами Python, представление может быть не загружаемым. Это может быть случай, если включены объекты, такие как файлы, сокеты, классы или экземпляры, а также многие другие встроенные объекты, которые не могут быть представлены в виде Python-констант.

Отформатированное представление сохраняет объекты на одной строке, если это возможно, и разбивает их на несколько строк, если они не помещаются в разрешенную ширину. Явно создавайте объекты PrettyPrinter, если вам нужно настроить ограничение ширины.

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

Изменено в версии 2.6: Добавлена поддержка set и frozenset.

Модуль pprint определяет один класс:

class pprint.PrettyPrinter(indent=1, width=80, depth=None, stream=None)

Создайте экземпляр PrettyPrinter. Этот конструктор понимает несколько ключевых параметров. Поток вывода можно установить с помощью ключевого параметра stream; единственный метод, используемый для объекта потока, — это метод write() протокола файла. Если не указано, PrettyPrinter использует sys.stdout. Три дополнительных параметра могут быть использованы для управления форматированным представлением. Ключевые слова — indent, depth и width. Величина отступа, добавляемого для каждого рекурсивного уровня, задаётся параметром indent; по умолчанию она равна единице. Другие значения могут привести к несколько необычному виду вывода, но могут упростить распознавание вложенности. Количество уровней, которые могут быть напечатаны, контролируется параметром depth; если структура данных, которая печатается, слишком глубокая, следующий вложенный уровень заменяется на .... По умолчанию нет ограничений на глубину форматируемых объектов. Желаемая ширина вывода ограничивается параметром width; значение по умолчанию — 80 символов. Если структура не может быть отформатирована в пределах заданной ширины, будет сделана попытка оптимизировать отображение.

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff[:])
>>> pp = pprint.PrettyPrinter(indent=4)
>>> pp.pprint(stuff)
[   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
    'spam',
    'eggs',
    'lumberjack',
    'knights',
    'ni']
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> pp = pprint.PrettyPrinter(depth=6)
>>> pp.pprint(tup)
('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))

Класс PrettyPrinter поддерживает несколько производных функций:

pprint.pformat(object, indent=1, width=80, depth=None)

Возвращает отформатированное представление объекта object в виде строки. indent, width и depth будут переданы конструктору PrettyPrinter в качестве параметров форматирования.

Изменено в версии 2.4: Были добавлены параметры indent, width и depth.

pprint.pprint(object, stream=None, indent=1, width=80, depth=None)

Печатает отформатированное представление объекта object в потоке stream, после чего переходит на новую строку. Если stream является None, используется sys.stdout. Это может быть использовано в интерактивном интерпретаторе вместо оператора print для проверки значений. indent, width и depth будут переданы конструктору PrettyPrinter в качестве параметров форматирования.

>>> import pprint
>>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
>>> stuff.insert(0, stuff)
>>> pprint.pprint(stuff)
[<Recursion on list with id=...>,
 'spam',
 'eggs',
 'lumberjack',
 'knights',
 'ni']

Изменено в версии 2.4: Были добавлены параметры indent, width и depth.

pprint.isreadable(object)

Определяет, является ли отформатированное представление объекта object «читаемым», или его можно использовать для восстановления значения с помощью eval(). Для рекурсивных объектов всегда возвращает False.

>>> pprint.isreadable(stuff)
False
pprint.isrecursive(object)

Определяет, требует ли объект object рекурсивного представления.

Определена ещё одна вспомогательная функция:

pprint.saferepr(object)

Возвращает строковое представление объекта object, защищенное от рекурсивных структур данных. Если представление объекта object выявляет рекурсивную ссылку, рекурсивная ссылка будет представлена как <Recursion on typename with id=number>. Представление не форматируется иначе.

>>> pprint.saferepr(stuff)
"[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"

1. Объекты PrettyPrinter

PrettyPrinter экземпляры имеют следующие методы:

PrettyPrinter.pformat(object)

Возвращает отформатированное представление объекта object. Это учитывает параметры, переданные конструктору PrettyPrinter.

PrettyPrinter.pprint(object)

Печатает отформатированное представление объекта object в настроенном потоке, после чего переходит на новую строку.

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

PrettyPrinter.isreadable(object)

Определяет, является ли отформатированное представление объекта «читаемым», или его можно использовать для восстановления значения с помощью eval(). Обратите внимание, что для рекурсивных объектов возвращается False. Если параметр depth объекта PrettyPrinter установлен и объект глубже, чем разрешено, это возвращает False.

PrettyPrinter.isrecursive(object)

Определяет, требует ли объект рекурсивного представления.

Этот метод предоставляется в качестве интерфейса, позволяющего подклассам изменять способ преобразования объектов в строки. По умолчанию используется внутренняя реализация saferepr().

PrettyPrinter.format(object, context, maxlevels, level)

Возвращает три значения: отформатированную версию объекта object в виде строки, флаг, указывающий, является ли результат читаемым, и флаг, указывающий, была ли обнаружена рекурсия. Первый аргумент — объект, который нужно представить. Второй — словарь, содержащий id() объектов, которые являются частью текущего контекста представления (прямые и косвенные контейнеры для object, которые влияют на представление), в качестве ключей. Если нужно представить объект, который уже представлен в context, третье возвращаемое значение должно быть True. Рекурсивные вызовы метода format() должны добавлять дополнительные записи для контейнеров в этот словарь. Третий аргумент, maxlevels, задаёт требуемый предел рекурсии; это будет 0 если нет запрошенного предела. Этот аргумент должен передаваться неизменным в рекурсивные вызовы. Четвёртый аргумент, level, представляет текущий уровень; рекурсивные вызовы должны получать значение, меньшее, чем текущий вызов.

Введено в версии 2.3.

2. Пример pprint

Этот пример демонстрирует несколько способов использования функции pprint() и её параметров.

>>> import pprint
>>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
... ('parrot', ('fresh fruit',))))))))
>>> stuff = ['a' * 10, tup, ['a' * 30, 'b' * 30], ['c' * 20, 'd' * 20]]
>>> pprint.pprint(stuff)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights', ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, depth=3)
['aaaaaaaaaa',
 ('spam', ('eggs', (...))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]
>>> pprint.pprint(stuff, width=60)
['aaaaaaaaaa',
 ('spam',
  ('eggs',
   ('lumberjack',
    ('knights',
     ('ni', ('dead', ('parrot', ('fresh fruit',)))))))),
 ['aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'],
 ['cccccccccccccccccccc', 'dddddddddddddddddddd']]

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/pprint.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API