Computer >> Máy Tính >  >> Lập trình >> Python

mô-đun pprint (Máy in dữ liệu đẹp)

Mô-đun pprint (lib / pprint.py) là một phần của thư viện chuẩn của Python được phân phối cùng với bản phân phối chuẩn của Python. Tên pprint là viết tắt của máy in đẹp. Chức năng của mô-đun pprint cho phép cấu trúc dữ liệu Python có giao diện đẹp về mặt thẩm mỹ. Bất kỳ cấu trúc dữ liệu nào có thể được trình thông dịch Python phân tích cú pháp chính xác đều được định dạng trang nhã. Biểu thức đã định dạng được giữ trong một dòng càng xa càng tốt, nhưng ngắt thành nhiều dòng nếu chiều dài vượt quá tham số chiều rộng của định dạng. Một tính năng độc đáo của đầu ra pprint là các từ điển được sắp xếp tự động trước khi định dạng biểu diễn hiển thị.

Mô-đun pprint chứa định nghĩa của lớp PrettyPrinter. Hàm tạo của nó có định dạng sau -

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

Tham số thụt lề xác định thụt lề được thêm vào mỗi mức đệ quy. Mặc định là 1.

Tham số chiều rộng theo mặc định là 80. Đầu ra mong muốn bị giới hạn bởi giá trị này. Nếu chiều dài lớn hơn chiều rộng, nó sẽ được chia thành nhiều dòng.

Thông số độ sâu kiểm soát số lượng cấp độ sẽ được in.

Tham số luồng theo mặc định là std.out - thiết bị đầu ra mặc định. Nó có thể lấy bất kỳ đối tượng luồng nào chẳng hạn như tệp.

Id tham số nhỏ gọn được đặt thành Sai theo mặc định. Nếu đúng, chỉ dữ liệu có thể điều chỉnh trong chiều rộng mới được hiển thị.

Lớp PrettyPrinter định nghĩa các phương thức sau -

pprint () - in biểu diễn được định dạng của đối tượng PrettyPrinter

pformat () - Trả về biểu diễn được định dạng của đối tượng, dựa trên các tham số cho hàm tạo.

Ví dụ sau minh họa cách sử dụng đơn giản của lớp 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)

Đầu ra hiển thị bình thường cũng như hiển thị bản in đẹp.

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

Mô-đun pprint cũng định nghĩa các hàm tiện lợi pprint () và pformat () tương ứng với các phương thức PrettyPrinter. Ví dụ bên dưới sử dụng hàm 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)

Ví dụ tiếp theo sử dụng phương thức pformat () cũng như hàm pformat (). Để sử dụng phương thức pformat (), đối tượng PrettyPrinter được thiết lập đầu tiên. Trong cả hai trường hợp, biểu diễn đã định dạng được hiển thị bằng cách sử dụng hàm print () bình thường.

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)

Đây là kết quả của đoạn mã trên

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

Máy in đẹp cũng có thể được sử dụng với các lớp tùy chỉnh. Bên trong lớp __repr __ () phương thức bị ghi đè. Phương thức __repr __ () được gọi khi hàm repr () được sử dụng. Nó là biểu diễn chuỗi chính thức của đối tượng Python. Khi chúng ta sử dụng đối tượng làm tham số cho hàm print (), nó sẽ in ra giá trị trả về của hàm repr ().

Trong ví dụ sau, phương thức __repr __ () trả về biểu diễn chuỗi của đối tượng trình phát

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)

Đầu ra của đoạn mã trên là -

{'virat': {'Tests': [140, 45, 39], 'ODI': [15, 122, 36, 67, 100, 49], 'T20': [78, 44, 12, 0, 23, 75]}}

Cấu trúc dữ liệu đệ quy với pprint

Khi chúng tôi cố gắng in một đối tượng đệ quy với pprint, chỉ biểu diễn đầu tiên được hiển thị và đối với các lần đệ quy tiếp theo, chỉ tham chiếu của nó được in.

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

Hạn chế chiều rộng đầu ra

Nếu tham số width được thay đổi từ giá trị mặc định 80 thành giá trị khác, đầu ra được định dạng theo cách có nhiều dòng được hiển thị trong khi cẩn thận để không vi phạm cú pháp.

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)

Mã tương tự như ví dụ đầu tiên trong bài viết này. Tuy nhiên, đối tượng PrettyPrinter được xây dựng với tham số chiều rộng là 20. Do đó đầu ra pprint được định dạng tương ứng.

{'Dilip': [ 'English',
   'Maths',
   'Science'],
'Kalpana': (50,
   60,
   70),
'Raju': {'English': 50,
   'Maths': 60,
   'Science': 70}}