سطح مقدماتی (Beginner Level)
زمانی که با دادههای پیچیده مثل دیکشنریهای بزرگ، لیستهای تودرتو یا فایلهای JSON کار میکنید، استفاده از تابع معمولی print() خروجی را در یک خط و بسیار ناخوانا نمایش میدهد. ماژول استاندارد pprint (مخفف Pretty Print) ابزاری است که مفسر پایتون برای حل این مشکل در اختیار ما قرار داده است.
این ماژول دادهها را به صورتی فرمتدهی میکند که ساختار آنها برای انسان قابل درک باشد (با رعایت تورفتگی و شکستن خطوط).
۱. مشکل print و حل آن با pprint
تفاوت اصلی زمانی مشخص میشود که یک ساختار داده عمیق (Nested) داشته باشیم.
در مثال بالا، خروجی در یک خط طولانی چاپ میشود. حال همان داده را با pprint چاپ میکنیم:
۲. تابع pp() در پایتونهای جدید
در نسخههای جدیدتر پایتون (۳.۸ به بعد)، یک نام کوتاهتر به اسم pp نیز معرفی شده است که دقیقاً همان کار را انجام میدهد اما تایپ آن راحتتر است.
# Example 2: Comparison snippet (Static)
import pprint
# Old way
pprint.pprint({"key": "value"})
# New way (Python 3.8+)
pprint.pp({"key": "value"})
سطح پیشرفته (Professional Level)
ماژول pprint فقط برای چاپ ساده نیست؛ این ماژول پارامترهای قدرتمندی برای کنترل دقیق نحوه نمایش خروجی (عرض خط، عمق دادهها، و نحوه مرتبسازی) دارد. همچنین میتوان خروجی فرمتدهی شده را به جای چاپ کردن، در یک متغیر ذخیره کرد.
۱. کنترل عرض (width) و تورفتگی (indent)
شما میتوانید مشخص کنید که هر خط حداکثر چند کاراکتر باشد (width) و تورفتگی خطوط (indent) چقدر باشد.
۲. محدود کردن عمق (depth)
اگر با دادههای بسیار عمیق و تودرتو کار میکنید و فقط میخواهید ساختار کلی را ببینید، پارامتر depth حیاتی است. این پارامتر لایههای عمیقتر را با ... جایگزین میکند.
# Example 2: Static logic explanation
# If depth is None (default), it prints everything regardless of nesting.
# depth=1 shows only the top-level keys/items.
۳. ذخیره خروجی در رشته با pformat
گاهی اوقات نمیخواهید داده را در کنسول چاپ کنید، بلکه میخواهید رشتهی فرمتدهی شده را برای لاگگیری (Logging) یا ارسال به دیتابیس دریافت کنید. برای این کار از pformat استفاده میشود.
۴. مدیریت دیکشنریها (sort_dicts)
به صورت پیشفرض، pprint کلیدهای دیکشنری را الفبایی مرتب میکند تا خروجی قابل پیشبینی باشد. اما در پایتون ۳.۸ به بعد میتوانید با sort_dicts=False این رفتار را غیرفعال کنید تا ترتیب اصلی حفظ شود.
۵. فشردهسازی (compact)
پارامتر compact=True سعی میکند تا جای ممکن عناصر را در یک خط جا دهد تا زمانی که از width تجاوز کند. این برای لیستهای طولانی اعداد بسیار مفید است.
# Example 2: Static View
# compact=True makes the output look more like a paragraph of text
# rather than a tall list, saving vertical screen space.