pprint मॉड्यूल (lib/pprint.py) पायथन की स्टैंडर्ड लाइब्रेरी का हिस्सा है जो स्टैंडर्ड पायथन डिस्ट्रीब्यूशन के साथ वितरित होता है। pprint का नाम प्रिटी प्रिंटर के लिए है। pprint मॉड्यूल की कार्यक्षमता पायथन डेटा संरचनाओं की सौंदर्यपूर्ण रूप से अच्छी दिखने वाली उपस्थिति को सक्षम करती है। कोई भी डेटा संरचना जिसे पायथन इंटरप्रेटर द्वारा सही ढंग से पार्स किया जा सकता है, उसे सुंदरता से फॉर्मेट किया जाता है। फॉर्मेटेड एक्सप्रेशन जहां तक संभव हो एक लाइन में रखा जाता है, लेकिन यदि लंबाई फॉर्मेटिंग के चौड़ाई पैरामीटर से अधिक हो जाती है तो कई लाइनों में टूट जाती है। pprint आउटपुट की एक अनूठी विशेषता यह है कि डिक्शनरीज़ डिस्प्ले रिप्रेजेंटेशन फॉर्मेट होने से पहले स्वचालित रूप से सॉर्ट हो जाती हैं।
pprint मॉड्यूल में PrettyPrinter क्लास की परिभाषा होती है। इसका कंस्ट्रक्टर निम्न फॉर्मेट लेता है:
pprint.PrettyPrinter(indent, width, depth, stream, compact)
indent पैरामीटर प्रत्येक रिकर्सिव लेवल पर जोड़े गए इंडेंटेशन को परिभाषित करता है। डिफ़ॉल्ट 1 है।
width पैरामीटर डिफ़ॉल्ट रूप से 80 है। वांछित आउटपुट इस मान द्वारा प्रतिबंधित होता है। यदि लंबाई width से अधिक है, तो यह कई लाइनों में टूट जाती है।
depth पैरामीटर प्रिंट किए जाने वाले लेवल्स की संख्या को नियंत्रित करता है।
stream पैरामीटर डिफ़ॉल्ट रूप से std.out है - डिफ़ॉल्ट आउटपुट डिवाइस। यह किसी भी स्ट्रीम ऑब्जेक्ट जैसे फ़ाइल ले सकता है।
compact पैरामीटर डिफ़ॉल्ट रूप से False पर सेट होता है। यदि True, तो केवल width के भीतर एडजस्ट होने वाला डेटा प्रदर्शित किया जाएगा।
PrettyPrinter क्लास निम्न मेथड्स को परिभाषित करती है:
pprint() - PrettyPrinter ऑब्जेक्ट के फॉर्मेटेड रिप्रेजेंटेशन को प्रिंट करता है
pformat() - कंस्ट्रक्टर के पैरामीटर्स के आधार पर ऑब्जेक्ट के फॉर्मेटेड रिप्रेजेंटेशन को लौटाता है।
सरल उदाहरण
निम्न उदाहरण PrettyPrinter क्लास के सरल उपयोग को प्रदर्शित करता है।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
pp = pprint.PrettyPrinter()
print("normal print output")
print(students)
print("----")
print("pprint output")
pp.pprint(students)
आउटपुट सामान्य और प्रिटी प्रिंट डिस्प्ले दोनों दिखाता है।
normal print output
{'Dilip': ['English', 'Maths', 'Science'], 'Raju': {'English': 50, 'Maths': 60, 'Science': 70}, 'Kalpana': (50, 60, 70)}
----
pprint output
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
pprint मॉड्यूल PrettyPrinter मेथड्स से संबंधित सुविधाजनक फ़ंक्शन्स pprint() और pformat() भी परिभाषित करता है। नीचे दिया गया उदाहरण pprint() फ़ंक्शन का उपयोग करता है।
from pprint import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
print("normal print output")
print(students)
print("----")
print("pprint output")
pprint(students)
pformat() मेथड और फ़ंक्शन
अगला उदाहरण pformat() मेथड के साथ-साथ pformat() फ़ंक्शन का उपयोग करता है। pformat() मेथड का उपयोग करने के लिए, PrettyPrinter ऑब्जेक्ट पहले सेट अप किया जाता है। दोनों मामलों में, फॉर्मेटेड रिप्रेजेंटेशन को सामान्य print() फ़ंक्शन का उपयोग करके प्रदर्शित किया जाता है।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
print("using pformat method")
pp = pprint.PrettyPrinter()
string = pp.pformat(students)
print(string)
print('------')
print("using pformat function")
string = pprint.pformat(students)
print(string)
उपरोक्त कोड का आउटपुट यहां है:
using pformat method
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
------
using pformat function
{'Dilip': ['English', 'Maths', 'Science'],
'Kalpana': (50, 60, 70),
'Raju': {'English': 50, 'Maths': 60, 'Science': 70}}
कस्टम क्लासेस के साथ प्रिटी प्रिंटर
प्रिटी प्रिंटर का उपयोग कस्टम क्लासेस के साथ भी किया जा सकता है। क्लास के अंदर __repr__() मेथड को ओवरराइड किया जाता है। __repr__() मेथड तब कॉल होता है जब repr() फ़ंक्शन उपयोग किया जाता है। यह पायथन ऑब्जेक्ट का आधिकारिक स्ट्रिंग रिप्रेजेंटेशन है। जब हम ऑब्जेक्ट को print() फ़ंक्शन के पैरामीटर के रूप में उपयोग करते हैं तो यह repr() फ़ंक्शन के रिटर्न मान को प्रिंट करता है।
निम्न उदाहरण में, __repr__() मेथड प्लेयर ऑब्जेक्ट का स्ट्रिंग रिप्रेजेंटेशन लौटाता है:
import pprint
class player:
def __init__(self, name, formats=[], runs=[]):
self.name = name
self.formats = formats
self.runs = runs
def __repr__(self):
dct = {}
dct[self.name] = dict(zip(self.formats, self.runs))
return (repr(dct))
l1 = ['Tests', 'ODI', 'T20']
l2 = [[140, 45, 39], [15, 122, 36, 67, 100, 49], [78, 44, 12, 0, 23, 75]]
p1 = player("virat", l1, l2)
pp = pprint.PrettyPrinter()
pp.pprint(p1)
उपरोक्त कोड का आउटपुट है:
{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}
pprint के साथ रिकर्सिव डेटा संरचना
जब हम pprint के साथ रिकर्सिव ऑब्जेक्ट प्रिंट करने का प्रयास करते हैं, तो केवल पहला रिप्रेजेंटेशन प्रदर्शित होता है और बाद की रिकर्सन के लिए केवल इसका रेफरेंस प्रिंट होता है।
>>> import pprint >>> numbers = list(range(1, 6)) >>> numbers.append(numbers) >>> print(numbers) [1, 2, 3, 4, 5, [...]] >>> pprint.pprint(numbers) [1, 2, 3, 4, 5,]
आउटपुट चौड़ाई प्रतिबंधित करना
यदि width पैरामीटर को डिफ़ॉल्ट 80 से अन्य मान पर बदला जाता है, तो आउटपुट इस तरह फॉर्मेट किया जाता है कि सिंटैक्स का उल्लंघन किए बिना कई लाइनें प्रदर्शित होती हैं।
import pprint
students = {
"Dilip": ["English", "Maths", "Science"],
"Raju": {"English": 50, "Maths": 60, "Science": 70},
"Kalpana": (50, 60, 70)
}
pp = pprint.PrettyPrinter(width=20)
pp.pprint(students)
कोड इस लेख के पहले उदाहरण के समान है। हालांकि, PrettyPrinter ऑब्जेक्ट को width पैरामीटर 20 के साथ बनाया गया है। इसलिए pprint आउटपुट तदनुसार फॉर्मेट होता है।
{'Dilip': [
'English',
'Maths',
'Science'],
'Kalpana': (50,
60,
70),
'Raju': {'English': 50,
'Maths': 60,
'Science': 70}}