Всіх вітаю! Сьогодні ми поговоримо про те, як зробити вивід програми гарним та зручним завдяки бібліотеці pprint у Python. Крім цього ми розберемо кожний параметр функції pprint() та подивомося на нього у дії.
Встановлення
Windows:
pip install pprintMacOS:
pip3 install pprintLinux:
pip install pprintВідмінності між виведенням з print() та pprint()
Виведення з print()
Для початку давайте створимо словник і виведемо його через звичайну функцію print(), а потім порівняємо результат з виводом за допомогою pprint().
Отже, ось приклад виведення з print():
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science"]}
print(sciences){'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'], 'Specific': ['Electrotechnics', 'Robotics', 'Theory of probability', 'Computer Science']}Отже, як ми бачимо це простий вивід, який виглядає не дуже гарно. Також слід розуміти, що даних у словнику може бути значно більше і тоді вивід буде виглядати менш зрозумілим.
Виведення з pprint()
Тепер спробуємо вивести ці ж дані через функцію pprint():
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science"]}
pprint.pprint(sciences){'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
'Specific': ['Electrotechnics',
'Robotics',
'Theory of probability',
'Computer Science']}Одразу бачимо різницю, бо такий вивід набато краще прочитати. Також він банально є зручнішим та гарнішим. Пропоную оновити словник, щоб там було більше вмісту і побачити результат ще раз:
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
"Machine Learning"],
"Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
"Embedded Systems"]}
pprint.pprint(sciences){'Additional': ['Hardware Programming',
'Operating Systems',
'Quantium Computing',
'Data Science',
'Embedded Systems'],
'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
'Specific': ['Electrotechnics',
'Robotics',
'Theory of probability',
'Computer Science',
'Machine Learning']}Ось такий вигляд має наш вивід.
Параметри функції pprint()
Настав час розібратися з параметрами функцї pprint(), кожен з яких має свої особливості і своє призначення.
Параметр sort_dicts
Давайте ще раз поглянемо на результат останнього прикладу, коли ми збільшили вміст словника:
{'Additional': ['Hardware Programming',
'Operating Systems',
'Quantium Computing',
'Data Science',
'Embedded Systems'],
'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
'Specific': ['Electrotechnics',
'Robotics',
'Theory of probability',
'Computer Science',
'Machine Learning']}Після отримання результату можна зробити цікаве спостереження — ключ Additional та його значення у вигляді списку виводиться на початку. Це відбувається через параметр функції pprint(), який за замовчуванням сортує ключі словника у алфавітному порядку.
Цим параметром є sort_dicts, за замовчуванням його значення True, а тому функція pprint() автоматично сортує ключі словника у алфавітному порядку.
Тепер змінимо значення цього параметру, задавши sort_dicts=False:
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
"Machine Learning"],
"Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
"Embedded Systems"]}
pprint.pprint(sciences, sort_dicts=False){'Basic': ['Chemistry', 'Physics', 'Mathematics', 'Biology', 'Philosophy'],
'Specific': ['Electrotechnics',
'Robotics',
'Theory of probability',
'Computer Science',
'Machine Learning'],
'Additional': ['Hardware Programming',
'Operating Systems',
'Quantium Computing',
'Data Science',
'Embedded Systems']}Ось тепер сортування немає і ми бачимо ключі у такому порядку, в якому ми їх створювали.
Параметр stream
Цей параметр приймає змінну з файлом, у який ми хочемо зберегти наш вивід.
Ось приклад, спочатку створюємо файл, у який все і буде зберігатися:
text_file = open("save.txt", "w")Позначка “w“ означає, що ми відкриваємо файл з наміром записати туди дані. А взагалі-то, фунція open() відкриває файли, але якщо такого файла ще немає, то вона створить його.
Далі передаємо змінну text_file у параметр stream:
pprint.pprint(sciences, stream=text_file)Закриваємо файл (це важливо):
text_file.close()Ось код, який у нас вийшов:
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
"Machine Learning"],
"Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
"Embedded Systems"]}
text_file = open("save.txt", "w")
pprint.pprint(sciences, stream=text_file)
text_file.close()У результаті ми нічого не побачимо у консолі, але будемо мати файл save.txt, де буде збережений вивід словника:

Параметр indent
Цей параметр дозволяє задати кількість відступів у при виведенні. Це відступ буде проявлятися у кожній нашій вкладці, тобто у кожному ключі словника.
Ось як це виглядяє:
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
"Machine Learning"],
"Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
"Embedded Systems"]}
pprint.pprint(sciences, indent=10){ 'Additional': [ 'Hardware Programming',
'Operating Systems',
'Quantium Computing',
'Data Science',
'Embedded Systems'],
'Basic': [ 'Chemistry',
'Physics',
'Mathematics',
'Biology',
'Philosophy'],
'Specific': [ 'Electrotechnics',
'Robotics',
'Theory of probability',
'Computer Science',
'Machine Learning']}Параметр width
Даний параметр дозволяє встановити максимальну кількість символів на кожен рядок. Але, якщо якийсь рядок перевищує зазначену кількість символів і його ніяк не можна розбити на різні рядки, то програма просто залишить цей рядок як є.
Ось приклад роботи цього параметра:
import pprint
sciences = {"Basic": ["Chemistry", "Physics", "Mathematics", "Biology", "Philosophy"],
"Specific": ["Electrotechnics", "Robotics", "Theory of probability", "Computer Science",
"Machine Learning"],
"Additional": ["Hardware Programming", "Operating Systems", "Quantium Computing", "Data Science",
"Embedded Systems"]}
pprint.pprint(sciences, width=10){'Additional': ['Hardware '
'Programming',
'Operating '
'Systems',
'Quantium '
'Computing',
'Data '
'Science',
'Embedded '
'Systems'],
'Basic': ['Chemistry',
'Physics',
'Mathematics',
'Biology',
'Philosophy'],
'Specific': ['Electrotechnics',
'Robotics',
'Theory '
'of '
'probability',
'Computer '
'Science',
'Machine '
'Learning']}Деякі рядки були розбиті на декілька, наприклад, Theory of probability, а такі як Electrotechnics просто залишися як і були.
Параметр depth
Цей параметр визначає, скільки вкладок з нашими даними можна вивести у консоль. Якщо ж структура наших даних занадто глибока для того, щоб вивести її саме з таким числом вкладень, то наступні рівні вкладень будуть позначатися трьома крапками.
Перед робою з цим параметром пропоную видозмінити наш словник, що він краще відображав сенс параметра:
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}Тепер він буде виглядати так, припустимо, що ми додали оцінки з кожного предмету. Таким чином ми зробили наш словник глибшим за структурою.
Далі встановлюємо значення параметра depth і запускаємо код:
import pprint
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}
pprint.pprint(sciences, depth=4){'Additional': [{'Hardware Programming': [9, 9, 9]},
{'Operating Systems': [10, 12, 12]},
{'Quantium Computing': [8, 8, 8]},
{'Data Science': [10, 11, 12]},
{'Embedded Systems': [9, 9, 10]}],
'Basic': [{'Chemistry': [10, 10, 12]},
{'Physics': [11, 9, 10]},
{'Mathematics': [11, 12, 12]},
{'Biology': [9, 9, 8]},
{'Philosophy': [10, 11, 12]}],
'Specific': [{'Electrotechnics': [9, 12, 12]},
{'Robotics': [10, 10, 10]},
{'Theory of probability': [9, 10, 10]},
{'Computer Science': [11, 11, 12]},
{'Machine Learning': [8, 9, 9]}]}Як бачимо, словник відобразився повністю, але тепер змінимо значення depth на 3:
{'Additional': [{'Hardware Programming': [...]},
{'Operating Systems': [...]},
{'Quantium Computing': [...]},
{'Data Science': [...]},
{'Embedded Systems': [...]}],
'Basic': [{'Chemistry': [...]},
{'Physics': [...]},
{'Mathematics': [...]},
{'Biology': [...]},
{'Philosophy': [...]}],
'Specific': [{'Electrotechnics': [...]},
{'Robotics': [...]},
{'Theory of probability': [...]},
{'Computer Science': [...]},
{'Machine Learning': [...]}]}Ось тут бачимо зміни. Наш словник відображається не повністю, бо значення останніх ключів не відображаються. Саме про це я казав на початку знайомства з даним параметром. Якщо він не може вивести структуру всю структуру з тим значенням, яке було йому передано, то він просто відображає настпуну вкладку трьома вкладками.
Наш словник згорнеться ще більше, якщо ми вкажемо depth=2:
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}
pprint.pprint(sciences, depth=2){'Additional': [{...}, {...}, {...}, {...}, {...}],
'Basic': [{...}, {...}, {...}, {...}, {...}],
'Specific': [{...}, {...}, {...}, {...}, {...}]}Якщо ж поставимо depth=1, то структуру слокника взагалі не буде видно:
import pprint
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}
pprint.pprint(sciences, depth=1){'Additional': [...], 'Basic': [...], 'Specific': [...]}Параметр compact
Цей метод намагається компактно відобразити довгі колонки з рядками, якщо йому задано значення True. Якщо ж задано значення False, то він ніяк не змінює відображення переданої структури.
Коли compact=True:
import pprint
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}
pprint.pprint(sciences, compact=True){'Additional': [{'Hardware Programming': [9, 9, 9]},
{'Operating Systems': [10, 12, 12]},
{'Quantium Computing': [8, 8, 8]},
{'Data Science': [10, 11, 12]},
{'Embedded Systems': [9, 9, 10]}],
'Basic': [{'Chemistry': [10, 10, 12]}, {'Physics': [11, 9, 10]},
{'Mathematics': [11, 12, 12]}, {'Biology': [9, 9, 8]},
{'Philosophy': [10, 11, 12]}],
'Specific': [{'Electrotechnics': [9, 12, 12]}, {'Robotics': [10, 10, 10]},
{'Theory of probability': [9, 10, 10]},
{'Computer Science': [11, 11, 12]},
{'Machine Learning': [8, 9, 9]}]}Коли compact=False:
import pprint
sciences = {"Basic": [{"Chemistry": [10, 10, 12]},
{"Physics": [11, 9, 10]},
{"Mathematics": [11, 12, 12]},
{"Biology": [9, 9, 8]},
{"Philosophy": [10, 11, 12]}],
"Specific": [{"Electrotechnics": [9, 12, 12]},
{"Robotics": [10, 10, 10]},
{"Theory of probability": [9, 10, 10]},
{"Computer Science": [11, 11, 12]},
{"Machine Learning": [8, 9, 9]}],
"Additional": [{"Hardware Programming": [9, 9, 9]},
{"Operating Systems": [10, 12, 12]},
{"Quantium Computing": [8, 8, 8]},
{"Data Science": [10, 11, 12]},
{"Embedded Systems": [9, 9, 10]}]}
pprint.pprint(sciences, compact=False){'Additional': [{'Hardware Programming': [9, 9, 9]},
{'Operating Systems': [10, 12, 12]},
{'Quantium Computing': [8, 8, 8]},
{'Data Science': [10, 11, 12]},
{'Embedded Systems': [9, 9, 10]}],
'Basic': [{'Chemistry': [10, 10, 12]},
{'Physics': [11, 9, 10]},
{'Mathematics': [11, 12, 12]},
{'Biology': [9, 9, 8]},
{'Philosophy': [10, 11, 12]}],
'Specific': [{'Electrotechnics': [9, 12, 12]},
{'Robotics': [10, 10, 10]},
{'Theory of probability': [9, 10, 10]},
{'Computer Science': [11, 11, 12]},
{'Machine Learning': [8, 9, 9]}]}Параметр underscore_numbers
Цей параметр розділяє цілі числа у структурі на тисячі за допомогою нижнього підкреслення “_“, якщо задано значення True. Якщо ж параметру було передано значення False, то все залишається як і було. Також перед щодо цього параметра слід зазначити, що він з’явився у версії 3.10, тому у старіших версіях його немає.
Створимо для відображення роботи цього параметра новий словник і вкажемо параметру underscore_numbers значення True:
import pprint
tech_prices = {"Laptop": 30000,
"Smartphone": 250000,
"Headphones": 10000}
pprint.pprint(tech_prices, underscore_numbers=True){'Headphones': 10_000, 'Laptop': 30_000, 'Smartphone': 250_000}Тепер передамо значення False:
{'Headphones': 10000, 'Laptop': 30000, 'Smartphone': 250000}Висновок
У цій статті ми детально розібрали як гарно та зручно виводити дані у консоль за допомогою бібліотеки pprint. У рамках цієї статті ми дослідили функцію pprint() та її параметри. Всім дякую за увагу!