Pemformatan (Formatting) di Python

 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.


Posting Komentar

Lebih baru Lebih lama

نموذج الاتصال