Menggabungkan teks dengan operator + dan str() bekerja, tetapi cepat atau lambat kode menjadi berisik: "Halo, " + nama + "! Stok kamu: " + str(stok). Python menyediakan cara yang jauh lebih rapi bernama string formatting: kita menulis satu template berisi lubang, lalu nilai-nilai diisi ke dalam lubang tersebut. Sejarah Python menyisakan tiga generasi teknik ini — operator %, method str.format(), dan f-string — dan ketiganya masih kita temui di kode nyata, jadi kita pelajari semuanya secara berurutan.

Format Gaya % (Warisan Generasi Pertama) #

Teknik tertua meniru fungsi printf bahasa C: template memakai placeholder seperti %s dan %f, lalu nilai ditempel setelah operator %:

python
nama = "Budi"
nilai = 87.5

print("Halo %s, nilai kamu %.1f" % (nama, nilai))

Output yang Dihasilkan:

text
Halo Budi, nilai kamu 87.5

Interpreter Python membaca placeholder %s dan mengisinya dengan nama, lalu %.1f yang diisi nilai dengan satu angka di belakang koma. Placeholder yang sering dipakai:

PlaceholderUntukHasil pada nilai 87.5
%sstring (atau tipe apa pun)87.5
%dbilangan bulat87
%fbilangan desimal (default 6 angka)87.500000
%.1fdesimal dengan 1 angka di belakang koma87.5

Menggunakan str.format() #

Generasi kedua, diperkenalkan di Python 2.6, memindahkan template ke dalam string murni berisi kurung kurawal, dan pengisian nilai dilakukan oleh method format(). Kurung kosong {} diisi secara berurutan, {0} dan {1} merujuk nomor argument, sedangkan {nama} merujuk argument bernama:

python
nama = "Siti"
poin = 95

print("Halo {}, kamu punya {} poin".format(nama, poin))
print("Halo {0}, selamat {1}! Terima kasih {0}.".format(nama, poin))
print("Halo {nama}, poin: {poin}".format(nama="Budi", poin=90))

Output yang Dihasilkan:

text
Halo Siti, kamu punya 95 poin
Halo Siti, selamat 95! Terima kasih Siti.
Halo Budi, poin: 90

Mari kita bedah ketiga barisnya:

  1. Baris 3: setiap {} kosong diisi argument secara berurutan — {} pertama menerima nama, {} kedua menerima poin.
  2. Baris 4: {0} dan {1} memanggil argument berdasarkan nomor; nomor yang sama boleh dipakai berulang seperti {0} yang muncul dua kali.
  3. Baris 5: {nama} dan {poin} memanggil argument berdasarkan nama yang diberikan kata kunci saat memanggil format() — paling mudah dibaca saat nilai yang disisipkan lebih dari dua.

Method str.format() juga menerima format spec di dalam kurung kurawal untuk mengatur tampilan angka dan perataan:

python
harga = 1500000.5

print("Harga: {:.2f}".format(harga))
print("Rata kanan: [{:>10}]".format("buku"))
print("Ribuan: {:,}".format(2500000))

Output yang Dihasilkan:

text
Harga: 1500000.50
Rata kanan: [      buku]
Ribuan: 2,500,000

Spec :.2f membulatkan ke dua desimal, :>10 meratakan teks ke kanan pada lebar 10 karakter, dan :, menambahkan pemisah ribuan.

Perbandingan Tiga Gaya #

Generasi ketiga, f-string, dibahas tuntas pada Chapter f-strings berikutnya. Sebagai gambaran, ketiga gaya menghasilkan output yang persis sama untuk kasus yang sama:

python
nama = "Budi"
nilai = 87.5678

print("Halo %s, nilai %.2f" % (nama, nilai))
print("Halo {}, nilai {:.2f}".format(nama, nilai))
print(f"Halo {nama}, nilai {nilai:.2f}")

Output yang Dihasilkan:

text
Halo Budi, nilai 87.57
Halo Budi, nilai 87.57
Halo Budi, nilai 87.57

Perbandingan ketiganya dirangkum pada tabel berikut:

AspekOperator %str.format()f-string
Diperkenalkansejak Python awalPython 2.6Python 3.6
Nilai disisipkansetelah %, dalam tupleargument format()ekspresi langsung di {}
Keterbacaanrendah saat placeholder banyakbaikpaling baik
Rekomendasihanya baca kode lamakode yang butuh template tersimpanpilihan utama kode baru

Perbedaan praktis terbesar ada pada jarak antara template dan nilainya: pada gaya % dan format(), variabel berada jauh di kanan string sehingga kita perlu menghitung posisi satu per satu. f-string menempatkan variabel tepat di titik kemunculannya di dalam string.

Dengan tiga generasi ini kita bisa membaca semua bentuk kode yang beredar. Bab berikutnya membedah f-string — gaya yang akan kita pakai sepanjang sisa Course Python.