Konsep Dasar dan Kontrol Lebar
Pemformatan string mengatur tampilan data dalam program Python. Bayangkan menyusun data dalam tabel yang rapi, setiap kolom memiliki lebar konsisten. Python menyediakan metode format() dan f-strings untuk mengontrol tampilan output.
Sintaks dasar replacement field adalah {name : width}, dimana name menentukan argumen dan width mengatur lebar minimum output. Ketika width lebih kecil dari panjang string asli, Python tetap menampilkan string lengkap.
Tipe Format untuk Sistem Bilangan
| Tipe format | Simbol | Contoh input | Output | Kegunaan |
|---|---|---|---|---|
| Desimal | d | 45 | 45 | Default untuk integer |
| Biner | b | 45 | 101101 | Representasi bit |
| Oktal | o | 45 | 55 | Sistem Unix |
| Heksadesimal | x/X | 45 | 2d/2D | Pemrograman tingkat rendah |
# Width control dengan berbagai formatprint('|{0:15}|'.format('xxx')) # Output: |xxx |print('a = {0:6d}'.format(45)) # Output: a = 45print('a = {0:10b}'.format(45)) # Output: a = 101101print('a = {0:6x}'.format(45)) # Output: a = 2d# Width lebih kecil dari string - tidak dipotongprint('|{0:1}|'.format('xxx')) # Output: |xxx|Pengaturan Posisi dan Karakter Pengisi
Opsi Perataan
| Simbol | Nama | Perilaku | Default untuk |
|---|---|---|---|
< | Rata kiri | Teks di kiri, padding di kanan | String, objek |
> | Rata kanan | Teks di kanan, padding di kiri | Angka |
^ | Tengah | Teks di tengah, padding merata | - |
Karakter Pengisi dan Format Lanjutan
Karakter pengisi menentukan karakter untuk mengisi ruang kosong. Default-nya adalah spasi, tetapi bisa diganti dengan karakter apa pun kecuali { dan }.
# Basic alignmentprint('|{0:<15}|'.format('xxx')) # Output: |xxx |print('|{0:>15}|'.format('xxx')) # Output: | xxx|print('|{0:^15}|'.format('xxx')) # Output: | xxx |# Custom fill charactersprint('|{0:-<15}|'.format('xxx')) # Output: |xxx------------|print('|{0:*>15}|'.format('xxx')) # Output: |************xxx|print('|{0:^^15}|'.format('xxx')) # Output: |^^^^^^xxx^^^^^^|# Decimal formattingx = 123.98print('x = {0:12f}'.format(x)) # Output: x = 123.980000print('x = {0:12e}'.format(x)) # Output: x = 1.239800e+02Metode Referensi Argumen
Python menyediakan tiga cara mereferensikan argumen dalam replacement fields, masing-masing dengan aturan berbeda.
Perbandingan Metode Referensi
| Metode | Sintaks | Kelebihan | Batasan |
|---|---|---|---|
| Numbered | {0}, {1} | Kontrol eksplisit, bisa diulang | Harus sesuai jumlah argumen |
| Keyword | {name}, {age} | Mudah dibaca, fleksibel | Nama harus cocok |
| Automatic | {}, {} | Sintaks sederhana | Tidak bisa dicampur dengan numbered |
# Numbered fields - kontrol eksplisitprint('{2} - {0} - {1}'.format('first', 'second', 'third'))# Output: third - first - second# Keyword fields - menggunakan namaprint('{name} is {age} years old'.format(name='Alice', age=25))# Output: Alice is 25 years old# Automatic numbering - urutan berurutanprint('{} + {} = {}'.format(5, 3, 8))# Output: 5 + 3 = 8# Error handlingtry: print('{a} - {b}'.format(a='xxx')) # Akan errorexcept KeyError as e: print(f"KeyError: {e}") # Output: KeyError: 'b'try: print('{0} - {1}'.format('xxx')) # Akan errorexcept IndexError as e: print(f"IndexError: {e}") # Output: IndexError: Replacement index 1 out of range for positional args tupleKontrol Presisi dan Spesifikasi Tanda
Presisi untuk Angka Desimal
Presisi mengontrol jumlah digit desimal atau digit signifikan dalam tampilan angka.
| Tipe format | Perilaku presisi | Contoh |
|---|---|---|
f/F | Tempat desimal | {:.2f} → 123.99 |
e/E | Tempat desimal dalam eksponensial | {:.2e} → 1.24e+02 |
g/G | Digit signifikan | {:.3g} → 124 |
Opsi Tanda
Pada baris spasi, simbolnya memang satu karakter kosong di dalam format specifier, seperti pada {: d}. Karena karakter itu tidak terlihat, tabel menamainya sebagai spasi literal.
| Simbol | Perilaku | Contoh |
|---|---|---|
+ | Selalu tampilkan tanda | +100, -200 |
- | Hanya tanda negatif (default) | 100, -200 |
| spasi literal | Menyisakan satu spasi sebelum angka positif | ' 100', '-200' |
# Precision controlprint('x = {0:.3f}'.format(123.98765)) # Output: x = 123.988print('x = {0:12.2e}'.format(1.987e-10)) # Output: x = 1.99e-10print('x = {0:.3g}'.format(1.123456)) # Output: x = 1.12# Sign specificationnumbers = [-100, 200, -300]print('Default:', ['{:d}'.format(n) for n in numbers])# Output: Default: ['-100', '200', '-300']print('Always sign:', ['{:+d}'.format(n) for n in numbers])# Output: Always sign: ['-100', '+200', '-300']print('Space positive:', ['{: d}'.format(n) for n in numbers])# Output: Space positive: ['-100', ' 200', '-300']# Rounding behaviorprint('Tiny number f: {0:12f}'.format(1.1e-10)) # Output: Tiny number f: 0.000000print('Tiny number g: {0:12g}'.format(1.1e-10)) # Output: Tiny number g: 1.1e-10F-Strings dan Template Dinamis
F-Strings dan Versi Python
F-strings tersedia sejak Python 3.6+ dan menyediakan sintaks paling sederhana dengan evaluasi ekspresi langsung. Lebih cepat dan mudah dibaca dibandingkan format().
Template Format Dinamis
Template format dapat menggunakan variabel untuk specification, berguna ketika format ditentukan secara dinamis.
# F-strings - sintaks sederhananame, age = 'Alice', 25print(f'{name} is {age} years old') # Output: Alice is 25 years oldprint(f'Next year: {name} will be {age + 1}') # Output: Next year: Alice will be 26# Dynamic format templatesvalue, width, fill, align = 'data', 12, '-', '^'template = '|{val:{f}{a}{w}}|'result = template.format(val=value, w=width, f=fill, a=align)print(result) # Output: |----data----|# Comparison - same output, different methodsx = 123.456print('Old style: %8.2f' % x) # Output: Old style: 123.46print('Format method: {0:8.2f}'.format(x)) # Output: Format method: 123.46print(f'F-string: {x:8.2f}') # Output: F-string: 123.46# Complex f-string with format specimport mathradius = 5.7print(f'Area: {math.pi * radius**2:.2f} cm²') # Output: Area: 102.07 cm²Pola Lengkap Spesifikasi Format
Format specification mengikuti pola {name:fill align sign width .prec type} dimana setiap komponen opsional dan memiliki fungsi spesifik untuk mengontrol tampilan output.