For AI agents: use /llms.txt for the Nakafa content index.
Pemformatan string mengubah nilai menjadi keluaran teks yang terencana. Kamu dapat meratakan kolom tabel, memilih notasi angka, mengatur presisi, dan menyusun pesan yang mudah dibaca. Python menyediakan metode str.format() dan f-string untuk pekerjaan ini.
Replacement field dasar berbentuk {field_name:format_spec}. Nilai lebar di dalam spesifikasi format menetapkan lebar minimum, bukan maksimum. Jika nilai yang diformat memerlukan ruang lebih besar, Python tetap menampilkan nilai lengkap tanpa memotongnya.
| Tipe format | Simbol | Contoh input | Output | Kegunaan |
|---|---|---|---|---|
| Desimal | d | 45 | 45 | Bilangan bulat desimal |
| Biner | b | 45 | 101101 | Representasi bit |
| Oktal | o | 45 | 55 | Representasi basis delapan |
| Heksadesimal | x/X | 45 | 2d/2D | Basis enam belas dengan huruf kecil atau besar |
# Width control dengan berbagai format
print('|{0:15}|'.format('xxx')) # Output: |xxx |
print('a = {0:6d}'.format(45)) # Output: a = 45
print('a = {0:10b}'.format(45)) # Output: a = 101101
print('a = {0:6x}'.format(45)) # Output: a = 2d
# Width lebih kecil dari string - tidak dipotong
print('|{0:1}|'.format('xxx')) # Output: |xxx|| Simbol | Nama | Perilaku | Default untuk |
|---|---|---|---|
< | Rata kiri | Teks di kiri, padding di kanan | String |
> | Rata kanan | Teks di kanan, padding di kiri | Angka |
^ | Tengah | Teks di tengah, padding merata | - |
Karakter pengisi menempati ruang yang tidak terpakai di dalam bidang. Nilai bawaannya adalah spasi dan penulisannya tepat sebelum simbol perataan. Pada str.format() dan f-string, karakter literal { atau } tidak dapat dipakai sebagai pengisi.
# Basic alignment
print('|{0:<15}|'.format('xxx')) # Output: |xxx |
print('|{0:>15}|'.format('xxx')) # Output: | xxx|
print('|{0:^15}|'.format('xxx')) # Output: | xxx |
# Custom fill characters
print('|{0:-<15}|'.format('xxx')) # Output: |xxx------------|
print('|{0:*>15}|'.format('xxx')) # Output: |************xxx|
print('|{0:^^15}|'.format('xxx')) # Output: |^^^^^^xxx^^^^^^|
# Decimal formatting
x = 123.98
print('x = {0:12f}'.format(x)) # Output: x = 123.980000
print('x = {0:12e}'.format(x)) # Output: x = 1.239800e+02Replacement field dapat memilih argumen posisi berdasarkan indeks, argumen kata kunci berdasarkan nama, atau argumen posisi melalui penomoran otomatis.
| Metode | Sintaks | Kelebihan | Batasan |
|---|---|---|---|
| Numbered | {0}, {1} | Kontrol eksplisit, bisa diulang | Setiap indeks yang dirujuk harus tersedia |
| Keyword | {name}, {age} | Mudah dibaca, fleksibel | Nama harus cocok |
| Automatic | {}, {} | Sintaks sederhana | Tidak bisa dicampur dengan numbered |
# Numbered fields - kontrol eksplisit
print('{2} - {0} - {1}'.format('first', 'second', 'third'))
# Output: third - first - second
# Keyword fields - menggunakan nama
print('{name} is {age} years old'.format(name='Alice', age=25))
# Output: Alice is 25 years old
# Automatic numbering - urutan berurutan
print('{} + {} = {}'.format(5, 3, 8))
# Output: 5 + 3 = 8
# Error handling
try:
print('{a} - {b}'.format(a='xxx')) # Akan error
except KeyError as e:
print(f"KeyError: {e}") # Output: KeyError: 'b'
try:
print('{0} - {1}'.format('xxx')) # Akan error
except IndexError as e:
print(f"IndexError: {e}") # Output: IndexError: Replacement index 1 out of range for positional args tupleArti presisi bergantung pada tipe penyajian. Untuk f dan e, presisi menentukan jumlah digit setelah tanda desimal. Untuk g, presisi menentukan jumlah digit signifikan.
| 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 |
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 control
print('x = {0:.3f}'.format(123.98765)) # Output: x = 123.988
print('x = {0:12.2e}'.format(1.987e-10)) # Output: x = 1.99e-10
print('x = {0:.3g}'.format(1.123456)) # Output: x = 1.12
# Sign specification
numbers = [-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('Spasi untuk bilangan positif:', ['{: d}'.format(n) for n in numbers])
# Output: Spasi untuk bilangan positif: ['-100', ' 200', '-300']
# Rounding behavior
print('Tiny number f: {0:12f}'.format(1.1e-10)) # Output: Tiny number f: 0.000000
print('Tiny number g: {0:12g}'.format(1.1e-10)) # Output: Tiny number g: 1.1e-10F-string tersedia sejak Python 3.6. Ekspresi dievaluasi langsung di dalam replacement field, sehingga pemformatan lokal sering lebih mudah dibaca daripada daftar argumen format() yang terpisah.
Replacement field bertingkat dapat memasok bagian spesifikasi format, seperti lebar, pengisi, atau perataan. Cara ini berguna ketika pilihan tersebut baru diketahui saat program berjalan.
# F-strings - sintaks sederhana
name, age = 'Alice', 25
print(f'{name} is {age} years old') # Output: Alice is 25 years old
print(f'Next year: {name} will be {age + 1}') # Output: Next year: Alice will be 26
# Dynamic format templates
value, 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 methods
x = 123.456
print('Old style: %8.2f' % x) # Output: Old style: 123.46
print('Format method: {0:8.2f}'.format(x)) # Output: Format method: 123.46
print(f'F-string: {x:8.2f}') # Output: F-string: 123.46
# Complex f-string with format spec
import math
radius = 5.7
print(f'Area: {math.pi * radius**2:.2f} cm²') # Output: Area: 102.07 cm²Untuk subset yang dibahas di sini, baca {nilai:*^+10.2f} sebagai nama bidang nilai, pengisi *, perataan tengah ^, tanda eksplisit +, lebar minimum 10, presisi 2, dan tipe titik tetap f. Mini-language pemformatan Python yang lengkap juga mendukung opsi seperti pengelompokan digit dan bentuk alternatif, jadi rujuk dokumentasinya ketika kebutuhanmu melampaui pola inti ini.