Pemformatan String (String Formatting) di Python
Ringkasan praktis tiga teknik utama: operator %
, metode .format()
, dan formatted string literals (f-strings). Disertai contoh, catatan penting, dan cheat‑sheet.
Daftar Isi
Pendahuluan & Motivasi
Gagasan inti: pemformatan string memungkinkan kita “menyuntikkan” nilai (variabel/objek) ke dalam template string, bukan menggabungkan string dengan +
atau koma.
player = 'Thomas'
points = 33
# Konkatenasi (kurang rapi jika banyak variabel)
'Last night, ' + player + ' scored ' + str(points) + ' points.'
# f-string (ringkas & jelas)
f'Last night, {player} scored {points} points.'
1) Pemformatan dengan Placeholder %
%s
menyuntikkan string; operator %
disebut string formatting operator.
print("I'm going to inject %s here." % 'something')
# > I'm going to inject something here.
Menyuntikkan Beberapa Item
print("I'm going to inject %s text here, and %s text here." % ('some', 'more'))
# > I'm going to inject some text here, and more text here.
Dengan Variabel
x, y = 'some', 'more'
print("I'm going to inject %s text here, and %s text here." % (x, y))
# > I'm going to inject some text here, and more text here.
%s
vs %r
(Konversi)
%s
memakai str()
(lebih “ramah”), sedangkan %r
memakai repr()
(tampilan resmi/mentah—termasuk kutip & escape).
print('He said his name was %s.' % 'Fred') # He said his name was Fred.
print('He said his name was %r.' % 'Fred') # He said his name was 'Fred'
Contoh karakter escape seperti
(tab):
print('I once caught a fish %s.' % 'this big') # this big
print('I once caught a fish %r.' % 'this big') # 'this big'
%s
vs %d
(Angka)
%s
mencetak apa saja sebagai string (termasuk float). %d
mengubah angka ke integer (truncation, bukan pembulatan).
print('I wrote %s programs today.' % 3.75) # 3.75
print('I wrote %d programs today.' % 3.75) # 3
Lebar & Presisi Float (Padding & Precision)
Format umum: %5.2f
→ 5
adalah lebar minimal total karakter; .2f
= 2 digit desimal.
print('Floating point numbers: %5.2f' % (13.144)) # 13.14
print('Floating point numbers: %1.0f' % (13.144)) # 13
print('Floating point numbers: %1.5f' % (13.144)) # 13.14400
print('Floating point numbers: %10.2f' % (13.144)) # 13.14
print('Floating point numbers: %25.2f' % (13.144)) # 13.14
Beberapa Konversi Sekaligus
print('First: %s, Second: %5.2f, Third: %r' % ('hi!', 3.1415, 'bye!'))
# First: hi!, Second: 3.14, Third: 'bye!'
%
? Terutama untuk membaca/merawat kode lama. Untuk kode baru, pertimbangkan .format()
atau f-strings.
2) Pemformatan dengan Metode .format()
Sintaks dasar:
'String here {} then also {}'.format('something1','something2')
print('This is a string with an {}'.format('insert'))
# > This is a string with an insert
Kelebihan .format()
- Posisi indeks:
print('The {2} {1} {0}'.format('fox','brown','quick'))
# > The quick brown fox
- Keyword:
print('First Object: {a}, Second Object: {b}, Third Object: {c}'.format(a=1,b='Two',c=12.3))
# > First Object: 1, Second Object: Two, Third Object: 12.3
- Mengulang argumen tanpa duplikasi:
print('A %s saved is a %s earned.' % ('penny','penny'))
print('A {p} saved is a {p} earned.'.format(p='penny'))
# > A penny saved is a penny earned.
# > A penny saved is a penny earned.
Perataan, Padding, & Presisi
print('{0:8} | {1:9}'.format('Fruit', 'Quantity'))
print('{0:8} | {1:9}'.format('Apples', 3.))
print('{0:8} | {1:9}'.format('Oranges', 10))
# Fruit | Quantity
# Apples | 3.0
# Oranges | 10
Default: teks rata kiri, angka rata kanan. Gunakan <
, ^
, >
untuk kiri/tengah/kanan:
print('{0:<8} | {1:^8} | {2:>8}'.format('Left','Center','Right'))
print('{0:<8} | {1:^8} | {2:>8}'.format(11,22,33))
# Left | Center | Right
# 11 | 22 | 33
Karakter padding kustom:
print('{0:=<8} | {1:-^8} | {2:.>8}'.format('Left','Center','Right'))
print('{0:=<8} | {1:-^8} | {2:.>8}'.format(11,22,33))
# Left==== | -Center- | ...Right
# 11====== | ---22--- | ......33
Lebar & presisi float mirip dengan %
:
print('This is my ten-character, two-decimal number:%10.2f' % 13.579)
print('This is my ten-character, two-decimal number:{0:10.2f}'.format(13.579))
# > 13.58
# > 13.58
3) F‑Strings (Python ≥ 3.6)
F-strings sangat ringkas: ekspresi/variabel langsung ditempatkan di dalam kurung kurawal.
name = 'Fred'
print(f"He said his name is {name}.")
# > He said his name is Fred
Pakai !r
untuk representasi repr()
:
print(f"He said his name is {name!r}")
# > He said his name is 'Fred'
Format Lebar & Presisi pada F-Strings
Pola umum: {value:{width}.{precision}}
. Jika tanpa tipe (f
/e
/dst), presisi diartikan sebagai digit signifikan (gaya format g
).
num = 23.45678
print("My 10 character, four decimal number is:{0:10.4f}".format(num))
print(f"My 10 character, four decimal number is:{num:{10}.{6}}")
# > 23.4568
# > 23.4568
Contoh perbedaan perilaku presisi:
num = 23.45
print("...:{0:10.4f}".format(num)) # 4 digit desimal tetap
print(f"...:{num:{10}.{6}}") # 6 digit signifikan total
# > 23.4500
# > 23.45
Jika butuh tepat N digit desimal, gunakan tipe f
secara eksplisit (bisa juga di f-string):
num = 23.45
print("...:{0:10.4f}".format(num))
print(f"...:{num:10.4f}")
# > 23.4500
# > 23.4500
Ringkasan & Rekomendasi Praktik
F‑strings
Direkomendasikan untuk Python 3.6+: paling ringkas, jelas, dan cepat.
.format()
Cocok untuk template kompleks, perataan kolom, atau lebar/presisi dinamis.
%
formatting
Utamanya untuk membaca/merawat kode lama. Pahami karena masih sering dijumpai.
Cheat‑Sheet Cepat
Dasar
f"Hello {nama}"
f"{obj!r}" # repr()
Lebar & Presisi
f"{x:10.2f}" # lebar 10, 2 desimal
f"{x:<10}" # rata kiri
f"{x:^10}" # rata tengah
f"{x:>10}" # rata kanan
f"{x:_>10}" # pad '_' di kiri
Digit Signifikan
f"{x:.6}" # 6 digit signifikan (format 'g')
.format()
"{2} {1} {0}".format(a,b,c)
"{x} {y}".format(x=1, y=2)
Kesalahan/Kebingungan Umum
- Menyangka
.{precision}
di f-string (tanpa tipe) berarti “N digit desimal” → keliru. Itu artinya digit signifikan. Untuk N desimal, gunakan:.Nf
. %d
memotong float ke integer (truncation), bukan pembulatan.- Lebar adalah total karakter termasuk spasi, bukan hanya bagian angka.
Referensi Resmi
- Old string formatting (
%
): docs.python.org — printf-style - Format strings (
.format()
): docs.python.org — format strings - F‑strings: docs.python.org — f-strings
Disusun untuk pembelajaran. Contoh kode dapat ditempel langsung ke interpreter atau notebook.
0 Comments
Terima kasih atas komentarnya
Emoji