Konsep Dasar dan Width Control
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.
Format Types untuk Sistem Bilangan
| Format Type | 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 Alignment
| Simbol | Nama | Behavior | Default untuk |
|---|---|---|---|
< | Left | Teks di kiri, padding di kanan | String, objek |
> | Right | Teks di kanan, padding di kiri | Angka |
^ | Center | Teks di tengah, padding merata | - |
Karakter Pengisi dan Format Lanjutan
Fill character menentukan karakter pengisi ruang kosong. Default menggunakan spasi, tapi bisa diganti dengan karakter apapun 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
Precision mengontrol jumlah digit desimal atau digit signifikan dalam tampilan angka.
| Format Type | Precision Behavior | 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
| Simbol | Behavior | Contoh |
|---|---|---|
+ | Selalu tampilkan tanda | +100, -200 |
- | Hanya tanda negatif (default) | 100, -200 |
(spasi) | Spasi untuk 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 (Python 3.6+)
F-strings 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 Format Specification
Format specification mengikuti pola {name:fill align sign width .prec type} dimana setiap komponen opsional dan memiliki fungsi spesifik untuk mengontrol tampilan output.