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 %:
nama = "Budi"
nilai = 87.5
print("Halo %s, nilai kamu %.1f" % (nama, nilai))Output yang Dihasilkan:
Halo Budi, nilai kamu 87.5Interpreter Python membaca placeholder %s dan mengisinya dengan nama, lalu %.1f yang diisi nilai dengan satu angka di belakang koma. Placeholder yang sering dipakai:
| Placeholder | Untuk | Hasil pada nilai 87.5 |
|---|---|---|
%s | string (atau tipe apa pun) | 87.5 |
%d | bilangan bulat | 87 |
%f | bilangan desimal (default 6 angka) | 87.500000 |
%.1f | desimal dengan 1 angka di belakang koma | 87.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:
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:
Halo Siti, kamu punya 95 poin
Halo Siti, selamat 95! Terima kasih Siti.
Halo Budi, poin: 90Mari kita bedah ketiga barisnya:
- Baris 3: setiap
{}kosong diisi argument secara berurutan —{}pertama menerimanama,{}kedua menerimapoin. - Baris 4:
{0}dan{1}memanggil argument berdasarkan nomor; nomor yang sama boleh dipakai berulang seperti{0}yang muncul dua kali. - Baris 5:
{nama}dan{poin}memanggil argument berdasarkan nama yang diberikan kata kunci saat memanggilformat()— 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:
harga = 1500000.5
print("Harga: {:.2f}".format(harga))
print("Rata kanan: [{:>10}]".format("buku"))
print("Ribuan: {:,}".format(2500000))Output yang Dihasilkan:
Harga: 1500000.50
Rata kanan: [ buku]
Ribuan: 2,500,000Spec :.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:
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:
Halo Budi, nilai 87.57
Halo Budi, nilai 87.57
Halo Budi, nilai 87.57Perbandingan ketiganya dirangkum pada tabel berikut:
| Aspek | Operator % | str.format() | f-string |
|---|---|---|---|
| Diperkenalkan | sejak Python awal | Python 2.6 | Python 3.6 |
| Nilai disisipkan | setelah %, dalam tuple | argument format() | ekspresi langsung di {} |
| Keterbacaan | rendah saat placeholder banyak | baik | paling baik |
| Rekomendasi | hanya baca kode lama | kode yang butuh template tersimpan | pilihan 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.