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

Alternate repr() Implementation ใน Python (โมดูล reprlib)

โมดูล reprlib ให้ repr() แบบจำกัดขนาด (Size-limited) เหมาะสำหรับ Debug ข้อมูลใหญ่ ไม่ให้ Output กวาดหน้าจอ

import reprlib


ฟังก์ชันหลัก

  • reprlib.repr(obj) - คืน String แบบ Truncated (เหมือน repr แต่มี Limit)
  • reprlib.aRepr - Instance Default Repr Object

Class reprlib.Repr - ปรับแต่ง Limits ได้

AttributeDefaultคำอธิบาย
maxlevel6Recursion Depth Limit
maxdict4Max Dict Items แสดง
maxlist6Max List Items แสดง
maxtuple6Max Tuple Items แสดง
maxset6Max Set Items แสดง
maxfrozenset6Max Frozenset Items แสดง
maxdeque6Max Deque Items แสดง
maxarray5Max Array Items แสดง
maxlong40Max Digits สำหรับ Long Int
maxstring30Max Chars สำหรับ String
maxother256Max Size สำหรับ Type อื่นๆ

โค้ดตัวอย่าง

import reprlib
import math

# List ใหญ่
fact_list = [math.factorial(x) for x in range(50)]

# Default reprlib
print("Default reprlib:")
print(reprlib.repr(fact_list))
# [1, 1, 2, 6, 24, 120, ...]

# Custom Repr
my_repr = reprlib.Repr()
my_repr.maxlist = 10
my_repr.maxlong = 20
my_repr.maxstring = 50

print("\nCustom reprlib:")
print(my_repr.repr(fact_list))

# Object ใหญ่
large_dict = {f'key_{i}': f'value_{i}' * 10 for i in range(100)}
print("\nLarge Dict (default):")
print(reprlib.repr(large_dict))

my_repr.maxdict = 3
print("\nLarge Dict (maxdict=3):")
print(my_repr.repr(large_dict))

ผลลัพธ์

Default reprlib:
[1, 1, 2, 6, 24, 120, ...]

Custom reprlib:
[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880, ...]

Large Dict (default):
{'key_0': 'value_0value_0value_0value_0value_0value_0value_0value_0value_0value_0', 'key_1': 'value_1value_1value_1value_1value_1value_1value_1value_1value_1value_1', 'key_2': 'value_2value_2value_2value_2value_2value_2value_2value_2value_2value_2', 'key_3': 'value_3value_3value_3value_3value_3value_3value_3value_3value_3value_3', ...}

Large Dict (maxdict=3):
{'key_0': 'value_0value_0value_0value_0value_0value_0value_0value_0value_0value_0', 'key_1': 'value_1value_1value_1value_1value_1value_1value_1value_1value_1value_1', 'key_2': 'value_2value_2value_2value_2value_2value_2value_2value_2value_2value_2', ...}

Subclassing Repr สำหรับ Custom Types

class MyRepr(reprlib.Repr):
    def repr_MyClass(self, obj, level):
        return f''

my_repr = MyRepr()
print(my_repr.repr(MyClass(42)))

การประยุกต์ใช้

  • Logging/Debugging ข้อมูลใหญ่ (Large Data Structures)
  • Test Output Comparison
  • REPL Customization
  • Serialization Preview