Modul ini menyediakan kemampuan untuk "mencetak cantik" struktur data Python sewenang-wenang dalam bentuk yang dapat digunakan sebagai input ke juru bahasa. Jika struktur yang diformat menyertakan objek yang bukan merupakan tipe dasar Python, representasinya mungkin tidak dapat dimuat. Ini mungkin terjadi jika objek seperti file, soket, atau kelas disertakan, serta banyak objek lain yang tidak dapat direpresentasikan sebagai literal Python
Representasi yang diformat menyimpan objek pada satu baris jika bisa, dan memecahnya menjadi beberapa baris jika tidak sesuai dengan lebar yang diizinkan. Bangun objek secara eksplisit jika Anda perlu menyesuaikan batasan lebar
Kamus diurutkan berdasarkan kunci sebelum tampilan dihitung
Berubah di versi 3. 9. Menambahkan dukungan untuk pencetakan cantik.
Berubah di versi 3. 10. Menambahkan dukungan untuk pencetakan cantik.
Modul mendefinisikan satu kelas
kelas cetakan. PrettyPrinter(inden=1 , lebar=80 , kedalaman=Tidak ada , aliran=Tidak ada , * , ringkas=Salah , sort_dicts=Benar , underscore_numbers=Salah)Bangun sebuah instance. Konstruktor ini memahami beberapa parameter kata kunci
stream (default >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] _5) adalah output yang akan ditulis dengan memanggil metode >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 6. Jika aliran dan >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 5 adalah >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 8, maka diam-diam kembali
Nilai lain mengonfigurasi cara penyarangan struktur data kompleks ditampilkan
indent (default 1) menentukan jumlah indentasi yang ditambahkan untuk setiap level bersarang
kedalaman mengontrol jumlah tingkat bersarang yang dapat dicetak; . Secara default, tidak ada batasan pada kedalaman objek yang sedang diformat
lebar (default 80) menentukan jumlah karakter maksimum yang diinginkan per baris dalam output. Jika struktur tidak dapat diformat dalam batasan lebar, upaya terbaik akan dilakukan
kompak memengaruhi cara urutan panjang (daftar, tupel, set, dll) diformat. Jika kompak salah (default) maka setiap item urutan akan diformat pada baris terpisah. Jika kompak benar, item sebanyak yang sesuai dengan lebar akan diformat pada setiap baris keluaran
Jika sort_dicts benar (default), kamus akan diformat dengan kuncinya diurutkan, jika tidak, kamus akan ditampilkan dalam urutan penyisipan
Jika underscore_numbers benar, bilangan bulat akan diformat dengan karakter >>> pprint.isreadable(stuff) False 1 untuk pemisah ribuan, jika tidak, garis bawah tidak ditampilkan (default)
Berubah di versi 3. 4. Menambahkan parameter kompak.
Berubah di versi 3. 8. Menambahkan parameter sort_dicts.
Berubah di versi 3. 10. Menambahkan parameter underscore_numbers.
Berubah di versi 3. 11. Tidak lagi mencoba menulis ke >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 5 jika >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 8.
>>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff[:]) >>> pp = pprint.PrettyPrinter(indent=4) >>> pp.pprint(stuff) [ ['spam', 'eggs', 'lumberjack', 'knights', 'ni'], 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> pp = pprint.PrettyPrinter(width=41, compact=True) >>> pp.pprint(stuff) [['spam', 'eggs', 'lumberjack', 'knights', 'ni'], 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', .. ('parrot', ('fresh fruit',)))))))) >>> pp = pprint.PrettyPrinter(depth=6) >>> pp.pprint(tup) ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...))))))) _
cetakan. pformat(objek , inden=1 , lebar=80 , kedalaman=Tidak ada , * , ringkas=Salah , sort_dicts=Benar , underscore_numbers=Salah)Mengembalikan representasi objek yang diformat sebagai string. indent, width, depth, compact, sort_dicts, dan underscore_numbers diteruskan ke konstruktor sebagai parameter pemformatan dan artinya seperti yang dijelaskan dalam dokumentasinya di atas
cetakan. pp(objek , *args , sort_dicts=Salah , **kwargs)Mencetak representasi objek yang diformat diikuti oleh baris baru. Jika sort_dicts salah (default), kamus akan ditampilkan dengan kuncinya dalam urutan penyisipan, jika tidak, kunci dict akan diurutkan. args dan kwargs akan diteruskan sebagai parameter pemformatan
Baru di versi 3. 8
cetakan. pprint(objek , aliran=Tidak ada , inden=1 , lebar=80 , kedalaman=Tidak ada , * , ringkas=Salah , sort_dicts=Benar , underscore_numbers=Salah)Mencetak representasi objek yang diformat pada aliran, diikuti oleh baris baru. Jika aliran adalah >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 8, >>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni'] 5 digunakan. Ini dapat digunakan dalam interpreter interaktif alih-alih fungsi untuk memeriksa nilai (Anda bahkan dapat menetapkan ulang >>> pprint.isreadable(stuff) False 9 untuk digunakan dalam lingkup)
Aliran parameter konfigurasi, indent, width, depth, compact, sort_dicts, dan underscore_numbers diteruskan ke konstruktor dan artinya seperti yang dijelaskan dalam dokumentasinya di atas
>>> import pprint >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] >>> stuff.insert(0, stuff) >>> pprint.pprint(stuff) [<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']
cetakan. dapat dibaca(objek)Tentukan apakah representasi objek yang diformat "dapat dibaca", atau dapat digunakan untuk merekonstruksi nilai menggunakan. Ini selalu mengembalikan >>> pprint.saferepr(stuff) "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']" _2 untuk objek rekursif
>>> pprint.isreadable(stuff) False _
cetakan. berulang(objek)Tentukan apakah objek memerlukan representasi rekursif
Satu lagi fungsi pendukung juga ditentukan
cetakan. saferepr(objek)Mengembalikan representasi string dari objek, terlindung dari struktur data rekursif. Jika representasi objek memaparkan entri rekursif, referensi rekursif akan direpresentasikan sebagai >>> pprint.saferepr(stuff) "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']" 3. Representasi tidak diformat sebaliknya
>>> pprint.saferepr(stuff) "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"
Objek PrettyPrinter
contoh memiliki metode berikut
PrettyPrinter. pformat(objek)Mengembalikan representasi objek yang diformat. Ini memperhitungkan opsi yang diteruskan ke konstruktor
Cetak representasi objek yang diformat pada aliran yang dikonfigurasi, diikuti oleh baris baru
Metode berikut menyediakan implementasi untuk fungsi yang sesuai dengan nama yang sama. Menggunakan metode ini pada instans sedikit lebih efisien karena objek baru tidak perlu dibuat
PrettyPrinter. dapat dibaca(objek)Tentukan apakah representasi objek yang diformat "dapat dibaca", atau dapat digunakan untuk merekonstruksi nilai menggunakan. Perhatikan bahwa ini mengembalikan >>> pprint.saferepr(stuff) "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']" 2 untuk objek rekursif. Jika parameter kedalaman disetel dan objek lebih dalam dari yang diizinkan, ini mengembalikan >>> pprint.saferepr(stuff) "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']" 2
PrettyPrinter. berulang(objek)Tentukan apakah objek memerlukan representasi rekursif
Metode ini disediakan sebagai pengait untuk mengizinkan subkelas memodifikasi cara objek diubah menjadi string. Implementasi default menggunakan internal implementasi
PrettyPrinter. format(objek , konteks, maxlevels, level)Mengembalikan tiga nilai. versi objek yang diformat sebagai string, bendera yang menunjukkan apakah hasilnya dapat dibaca, dan bendera yang menunjukkan apakah rekursi terdeteksi. Argumen pertama adalah objek yang akan disajikan. Yang kedua adalah kamus yang berisi objek yang merupakan bagian dari konteks presentasi saat ini (kontainer langsung dan tidak langsung untuk objek yang mempengaruhi presentasi) sebagai kuncinya; . Panggilan rekursif ke metode harus menambahkan entri tambahan untuk wadah ke kamus ini. Argumen ketiga, maxlevels, memberikan batas yang diminta untuk rekursi; . Argumen ini harus diteruskan tanpa modifikasi ke panggilan rekursif. Argumen keempat, level, memberikan level saat ini;
Contoh
Untuk mendemonstrasikan beberapa penggunaan fungsi dan parameternya, mari ambil informasi tentang proyek dari PyPI
>>> import json >>> import pprint >>> from urllib.request import urlopen >>> with urlopen('//pypi.org/pypi/sampleproject/json') as resp: .. project_info = json.load(resp)['info']
Dalam bentuk dasarnya, menunjukkan keseluruhan objek
>>> pprint.pprint(project_info) {'author': 'The Python Packaging Authority', 'author_email': 'pypa-dev@googlegroups.com', 'bugtrack_url': None, 'classifiers': ['Development Status :: 3 - Alpha', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.6', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Topic :: Software Development :: Build Tools'], 'description': 'A sample Python project\n' '=======================\n' '\n' 'This is the description file for the project.\n' '\n' 'The file should use UTF-8 encoding and be written using ' 'ReStructured Text. It\n' 'will be used to generate the project webpage on PyPI, and ' 'should be written for\n' 'that purpose.\n' '\n' 'Typical contents for this file would include an overview of ' 'the project, basic\n' 'usage examples, etc. Generally, including the project ' 'changelog in here is not\n' 'a good idea, although a simple "What\'s New" section for the ' 'most recent version\n' 'may be appropriate.', 'description_content_type': None, 'docs_url': None, 'download_url': 'UNKNOWN', 'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1}, 'home_page': '//github.com/pypa/sampleproject', 'keywords': 'sample setuptools development', 'license': 'MIT', 'maintainer': None, 'maintainer_email': None, 'name': 'sampleproject', 'package_url': '//pypi.org/project/sampleproject/', 'platform': 'UNKNOWN', 'project_url': '//pypi.org/project/sampleproject/', 'project_urls': {'Download': 'UNKNOWN', 'Homepage': '//github.com/pypa/sampleproject'}, 'release_url': '//pypi.org/project/sampleproject/1.2.0/', 'requires_dist': None, 'requires_python': None, 'summary': 'A sample Python project', 'version': '1.2.0'}
Hasilnya dapat dibatasi hingga kedalaman tertentu (elipsis digunakan untuk konten yang lebih dalam)
>>> pprint.pprint(project_info, depth=1) {'author': 'The Python Packaging Authority', 'author_email': 'pypa-dev@googlegroups.com', 'bugtrack_url': None, 'classifiers': [...], 'description': 'A sample Python project\n' '=======================\n' '\n' 'This is the description file for the project.\n' '\n' 'The file should use UTF-8 encoding and be written using ' 'ReStructured Text. It\n' 'will be used to generate the project webpage on PyPI, and ' 'should be written for\n' 'that purpose.\n' '\n' 'Typical contents for this file would include an overview of ' 'the project, basic\n' 'usage examples, etc. Generally, including the project ' 'changelog in here is not\n' 'a good idea, although a simple "What\'s New" section for the ' 'most recent version\n' 'may be appropriate.', 'description_content_type': None, 'docs_url': None, 'download_url': 'UNKNOWN', 'downloads': {...}, 'home_page': '//github.com/pypa/sampleproject', 'keywords': 'sample setuptools development', 'license': 'MIT', 'maintainer': None, 'maintainer_email': None, 'name': 'sampleproject', 'package_url': '//pypi.org/project/sampleproject/', 'platform': 'UNKNOWN', 'project_url': '//pypi.org/project/sampleproject/', 'project_urls': {...}, 'release_url': '//pypi.org/project/sampleproject/1.2.0/', 'requires_dist': None, 'requires_python': None, 'summary': 'A sample Python project', 'version': '1.2.0'}
Selain itu, lebar karakter maksimum dapat disarankan. Jika objek panjang tidak dapat dipisah, lebar yang ditentukan akan terlampaui