Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โมดูล pprint (เครื่องพิมพ์ข้อมูลสวย)


โมดูล pprint (lib/pprint.py) เป็นส่วนหนึ่งของไลบรารีมาตรฐานของ Python ซึ่งแจกจ่ายไปพร้อมกับการแจกจ่าย Python มาตรฐาน pprint ชื่อย่อมาจากเครื่องพิมพ์สวย ฟังก์ชันการทำงานของโมดูล pprint ช่วยให้โครงสร้างข้อมูล Python ดูสวยงาม โครงสร้างข้อมูลใดๆ ที่สามารถแยกวิเคราะห์อย่างถูกต้องโดยล่าม Python จะได้รับการจัดรูปแบบอย่างหรูหรา นิพจน์ที่จัดรูปแบบจะถูกเก็บไว้ในหนึ่งบรรทัดเท่าที่เป็นไปได้ แต่จะแบ่งออกเป็นหลายบรรทัดหากความยาวเกินพารามิเตอร์ความกว้างของการจัดรูปแบบ คุณลักษณะเฉพาะอย่างหนึ่งของเอาต์พุต pprint คือพจนานุกรมจะถูกจัดเรียงโดยอัตโนมัติก่อนที่จะมีการจัดรูปแบบการแสดงผล

โมดูล pprint มีคำจำกัดความของคลาส PrettyPrinter คอนสตรัคเตอร์ใช้รูปแบบต่อไปนี้ -

pprint.PrettyPrinter(indent, width, depth, stream, compact)

พารามิเตอร์เยื้องกำหนดเยื้องที่เพิ่มในแต่ละระดับแบบเรียกซ้ำ ค่าเริ่มต้นคือ 1.

พารามิเตอร์ width โดยค่าเริ่มต้นคือ 80 เอาต์พุตที่ต้องการถูกจำกัดโดยค่านี้ หากความยาวมากกว่าความกว้าง จะแบ่งเป็นหลายบรรทัด

พารามิเตอร์ความลึกควบคุมจำนวนระดับที่จะพิมพ์

พารามิเตอร์สตรีมเป็นค่าเริ่มต้น std.out – อุปกรณ์ส่งออกเริ่มต้น สามารถรับวัตถุสตรีมใด ๆ เช่นไฟล์ได้

รหัสพารามิเตอร์กระชับถูกตั้งค่าเป็นเท็จโดยค่าเริ่มต้น หากเป็น True จะแสดงเฉพาะข้อมูลที่ปรับได้ภายในความกว้าง

คลาส PrettyPrinter กำหนดวิธีการดังต่อไปนี้ -

พิมพ์() − พิมพ์การแสดงรูปแบบวัตถุ 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 ยังกำหนดฟังก์ชันอำนวยความสะดวก pprint() และ pformat() ที่สอดคล้องกับเมธอด PrettyPrinter ตัวอย่างด้านล่างใช้ฟังก์ชัน 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() ให้ตั้งค่าอ็อบเจ็กต์ PrettyPrinter ก่อน ในทั้งสองกรณี การแสดงรูปแบบจะแสดงโดยใช้ฟังก์ชันพิมพ์ปกติ ()

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}}

เครื่องพิมพ์ Pretty สามารถใช้กับคลาสที่กำหนดเองได้ ภายในคลาส __repr__() ถูกแทนที่ เมธอด __repr__() ถูกเรียกเมื่อใช้ฟังก์ชัน repr() เป็นการแสดงสตริงอย่างเป็นทางการของอ็อบเจกต์ Python เมื่อเราใช้ object เป็นพารามิเตอร์ในฟังก์ชัน print() มันจะพิมพ์ return value ของฟังก์ชัน 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, <Recursion on list with id=1403633698824>]

จำกัดความกว้างของเอาต์พุต

หากพารามิเตอร์ 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}}