Pemformatan (Formatting) di Python
Python mempunyai sistem pemformatan (formatting) yang powerful. Ada dua langkah atau model formatting di Python, yakni dengan model lama dan dengan model baru. Model lama memakai pertanda % %, sedang model baru memakai sistem format(). Di artikel ini, Anda akan menemui formatting string dan bilangan komplet yang meliputi pemakaian pola langkah lama dan baru dibarengi dengan contoh - misalnya.
Formatting Dasar
Formatting status peluang ialah hal yang tersering kita temui. Kita memakainya di saat posisi dari argument tidak mau diganti, dan cuman sedikit ada komponen yang bakal dipadukan. Sistem formatting ini cocoknya untuk memformat komponen yang banyaknya sedikit.
Old '%s %s' % ('one', 'two')
New '{} {}'.format('one', 'two')
Output one two
Old '%d %d' % (1, 2)
New '{} {}'.format(1, 2)
Output 1 2
Dengan model performtan yang baru, kita dapat memakai index untuk mempertukarkan status 2 buah penampung (placeholder). Misalnya ialah sebagai berikut.
Operasi berikut tidak ada pada model formatting lama
New '{1} {0}'.format('one', 'two')
Output two one
Konversi Nilai
Model pemformatan yang baru secara standar panggil sistem __format__() dari object untuk diperlihatkan. Bila kita cuman ingin tampilkan output dari str() atau repr(), kita dapat memakai flag alterasi !s atau !r.
Pada model formatting lama, kita memakai %s untuk sebagai wakil string, dan %r dipakai untuk sistem repr()
Setup
class Data(object):
def __str__(self):
return 'str'
def __repr__(self):
return 'repr'
Old '%s %r' % (Data(), Data())
New '{0!s} {0!r}'.format(Data())
Output str repr
Di Python 3, ada flag alterasi tambahan yang memakai output dari repr() tetapi memakai ascii()
Setting
class Data(object):
def __repr__(self):
return 'repr'
Old '%r %a' % (Data(), Data())
New '{0!r} {0!a}'.format(Data())
Output repr rxe4pr
Padding dan Perataan String
Umumnya, nilai yang diformat ambil lebar sekitar watak yang bakal dicontohkannya. Namun, kita dapat atur sendiri berapakah lebar yang kita harapkan.
Langkah meratakan string berlainan di antara model lama dan yang baru. Model yang lama standarnya ialah rata kanan, sedang model baru standarnya ialah rata kiri.
Rata kanan:
Old '%10s' % ('test' ,)
New '{:>10}'.format('test')
Output test
Rata kiri:
Old '%-10s' % ('test' ,)
New '{:10}'.format('test')
Output test
Model formatting yang baru mempunyai beberapa feature untuk atur bagaimana padding dan perataan dilaksanakan, yakni seperti berikut:
Kita bisa menyesuaikan karakter padding
Operasi berikut tidak ada pada model formatting lama
New '{:_<10}'.format('test')
Output test______
Kita dapat atur rata tengah
Operasi berikut tidak ada pada model formatting lama
New '{:^10}'.format('test')
Output test
Disamping itu, pemakaian rata tengah di mana panjang stringnya tidak pas dipisah dua, karena itu watak extra akan dipertambah di samping kanan.
Operasi berikut tidak ada pada model formatting lama
New '{:^6}'.format('zip')
Output zip
Pemotongan String Panjang
Berlainan dengan padding yang menambah lebar pada string, kita bisa juga lakukan pemangkasan (truncating) untuk menggunting jumlah watak yang ada di string.
Angka yang ada di belakang pertanda. dalam detail pola dipakai untuk atur akurat dari output. Maknanya string itu akan dipotong jadi sejauh angka itu.
Old '%.5s' % ('pythonindo' ,)
New '{:.5}'.format('pythonindo')
Output pytho
Menggabungkan Pemotongan dan Padding
Kita bisa juga menyatukan di antara pemangkasan dengan padding
Old '%-10.5s' % ('pythonindo' ,)
New '{:10.5}'.format('pythonindo')
Output pytho
Bilangan
Kita bisa juga memformat bilangan seperti string.
Integer:
Old '%d' % (42 ,)
New '{:d}'.format(42)
Output 42
Float:
Old '%f' % (3.141592653589793 ,)
New '{:f}'.format(3.141592653589793)
Output 3.141593
Padding Bilangan
Sama seperti dengan string, bilangan bisa juga dibikin dengan panjang tertentu.
Old '%4d' % (42 ,)
New '{:4d}'.format(42)
Output 42
Disamping itu, bilangan bisa juga dipotong dalam jumlah desimal tertentu. Kita bisa juga menyatukan di antara pemangkasan dengan padding. Untuk bilangan float, nilai padding memperlihatkan panjang dari keseluruhan panjang output.
Pada contoh berikut, kita inginkan output terbagi dalam 6 watak dengan 2 angka ada di belakang koma.
Old '%06.2f' % (3.141592653589793 ,)
New '{:06.2f}'.format(3.141592653589793)
Output 003.14
Pada integer, menambah akurat tidak bermanfaat dan tidak disarankan pada model formatting yang baru (bisa mengakibatkan ValueError)
Old '%04d' % (42 ,)
New '{:04d}'.format(42)
Output 0042
Bilangan Bertanda
Umumnya, bilangan negatif dengan diawali pertanda. Sudah pasti ini dapat disamakan sesuai keperluan kita.
Old '%+d' % (42 ,)
New '{:+d}'.format(42)
Output +42
Pemakaian pertanda spasi dalam pola, dan pertanda minus dituruti spasi di muka bilangan, dipakai untuk memperlihatkan jika bilangan itu ialah negatif.Sedang pemakaian pertanda spasi tanpa dituruti pertanda apa saja, memperlihatkan jika bilangan itu ialah positif. Misalnya ialah sebagai berikut.
Old '% d' % ((- 23) ,)
New '{: d}'.format((- 23))
Output -23
Old '% d' % (42 ,)
New '{: d}'.format(42)
Output 42
Model formatting yang baru bisa juga atur status dari pertanda relatif pada padding.
Operasi berikut tidak ada pada model formatting lama
New '{:=5d}'.format((- 23))
Output - 23
New '{:=+5d}'.format(23)
Output + 23
Placeholder Namanya
Baik model formatting yang lama atau yang baru, ke-2 nya memberikan dukungan penampung (placeholder) namanya.
Setting
data = {'firts': 'Hello', 'last': 'Hello!'}
Old '%(first)s %(last)s' % data
New '{first} {last}'.format(**data)
Output Hello Hello!
Metode format() menerima argumen kata kunci.
Operasi berikut tidak ada pada model formatting lama
New '{first} {last}'.format(first='Hello', last='Hello!')
Output Hello Hello!
Getitem dan Getattr
Model formatting yang baru memberinya elastisitas untuk terhubung susunan data bercabang. Model ini memberikan dukungan pengaksesan dictionary atau daftar.
Operasi berikut tidak ada pada model formatting lama
Setting
individu = {'firts': 'Budi', 'last': 'Santoso'}
New '{p[first]} {p[last]}'.format(p=person)
Output Budi Santoso
Setting
data = [4, 8, 15, 17, 20, 45]
New '{d[4]} {d[5]}'.format(d=data)
Output 20 45
Kita bisa juga terhubung object lewat getattr()
Operasi berikut tidak ada pada model formatting lama
Setting
class Plant(object):
tipe = 'tree'
New '{p.tipe}'.format(p=Plant())
Output tree
Operasi berikut tidak ada pada model formatting lama
Setting
class Plant(object):
tipe = 'tree'
kinds = [{'name': 'mahoni'}, {'name': 'apel'}]
New '{p.tipe}: {p.kinds[0][name]}'.format(p=Plant())
Output tree: mahoni
Datetime
Model formatting yang baru bisa juga dipakai untuk memformat object seperti datetime. Datetime ini ialah object Python yang terkait sama waktu dan tanggal.
Operasi berikut tidak tersedia pada style formatting lama
Setting
from datetime impor datetime
New '{:%Y-%m-%d %H:%M}'.format(datetime(2017, 8, 3, 4, 5))
Output 2017-08-03 04:05
Pola Berparameter
Kita bisa juga masukkan detail pola yang kita harapkan dalam sistem format(). Pola berparameter di tempatkan dalam pertanda kurung kurawal sesudah pertanda titik dua.
Model lama memberikan dukungan patokanisasi, tetapi hanya terbatas untuk atur lebar dan akurat dari output.
Operasi berikut tidak ada pada model formatting lama
New '{:{align}{width}}'.format('test', align='^', width='10')
Output test
Memakai patokan akurat
Old '%.*s = %.*f' % (3, 'Eksponen', 3, 2.7182)
New '{:.{prec}} = {:.{prec}f}'.format('Eksponen', 2.7182, prec=3)
Output Eks = 2.718
Memakai patokan lebar dan akurat
Old '%*.*f' % (5, '2', 2.7182)
New '{:.{width}.{prec}f}'.format(2.7182, width=5, prec=3)
Output = 2.72
Pola bersarang dapat dipakai untuk gantikan sembarangan sisi dari detail pola. Oleh karenanya, contoh di atas dapat dicatat ulangi dengan berikut ini:
Operasi berikut tidak ada pada model formatting lama
New '{:{prec}} = {:{prec}}'.format('Eksponen', 2.7182, prec='.3')
Output Eks = 2.72
Elemen - elemen datetime bisa juga dicatat terpisah.
Operasi berikut tidak ada pada model formatting lama
Setting
from datetime impor datetime
dt = datetime(2017, 8, 3, 4, 5)
New '{:{dfmt} {tfmt}}'.format(dt, dfmt='%Y-%m-%d', tfmt='%H:%M')
Output 2017-08-03 04:05
Pola bersarang dapat dipakai sebagai argument status. Status bergantung pada posisi dari pertanda kurung kurawal.
Operasi berikut tidak ada pada model formatting lama
New '{:{}{}{}.{}}'.format(2.7182818284, '>', '+', 10, 3)
Output +2.72
Argument keyword bisa juga digabung ke pola
New '{:{}{sign}{}.{}}'.format(2.7182818284, '>', 10, 3, sign='+')
Output +2.72
Object Kustomasi
Contoh di atas yang memakai sistem magis __format__() pada object di Python. Kita dapat mendeskripsikan sendiri pola untuk tangani object yang kita untuk buat tangani sistem __format__() ini. Dengan demikian, kita dapat atur sintaks yang dipakai.
Setting
class HAL9000(object):
def __format__(self, format):
if (pola == 'open-the-pod-bay-doors'):
return "I'm afraid I can't do that."
return 'HAL9000'
New '{:open-the-pod-bay-doors}'.format(HAL9000())
Output I'm afraid I can't do that.