← Semua pembelajaran / Python untuk AI Engineer
Fase 1 · Sintaks & Idiom Python

Input and Output — Fancier Output Formatting

f-string adalah cara memformat teks di Python modern. Ini spesifikasi formatnya yang benar-benar dipakai.

Sumber asli docs.python.org Resmi Rangkuman ~5 menit baca

Intisari

  • f-string (f"...") menggantikan % dan .format(). Pakai itu saja.
  • Format spec setelah titik dua: f"{nilai:<spec>}" — mengatur lebar, presisi, dan pemisah ribuan.
  • f"{x=}" mencetak x=42 — trik debug tercepat yang ada.
  • Ubah cara tampil dengan !r (repr) — penting saat mencatat string ke log.
  • Untuk logging, jangan pakai f-string. Pakai %s + argumen.

Tiga cara memformat — pakai yang pertama

nama, umur = "Budi", 30

f"Halo {nama}, umur {umur}"                # ✅ f-string, Python 3.6+
"Halo {}, umur {}".format(nama, umur)      # cara lama
"Halo %s, umur %d" % (nama, umur)          # cara paling lama

Format spec

Semua pengaturan ditulis setelah titik dua di dalam kurung kurawal:

{nilai:[isi][rata][tanda][#][0][lebar][,][.presisi][tipe]}

Angka

harga = 1234567.891

f"{harga:.2f}"       # '1234567.89'    dua desimal
f"{harga:,.2f}"      # '1,234,567.89'  pemisah ribuan
f"{harga:_.2f}"      # '1_234_567.89'  pemisah underscore
f"{harga:.0f}"       # '1234568'       dibulatkan
f"{harga:e}"         # '1.234568e+06'  notasi ilmiah

f"{0.8734:.1%}"      # '87.3%'         persentase
f"{255:b}"           # '11111111'      biner
f"{255:x}"           # 'ff'            heksadesimal
f"{42:+d}"           # '+42'           selalu tampilkan tanda

Perataan dan lebar

f"{'kiri':<10}|"     # 'kiri      |'
f"{'kanan':>10}|"    # '     kanan|'
f"{'tengah':^10}|"   # '  tengah  |'
f"{'isi':*^10}|"     # '***isi****|'   karakter pengisi
f"{7:03d}"           # '007'           padding nol

Sangat berguna untuk membuat tabel di terminal:

for m in model:
    print(f"{m.nama:<24} {m.input_token:>10,} {m.biaya:>9.4f}")

Tanggal

from datetime import datetime
now = datetime.now()

f"{now:%Y-%m-%d}"           # '2026-08-07'
f"{now:%d %B %Y}"           # '07 August 2026'
f"{now:%H:%M:%S}"           # '14:32:07'
f"{now:%Y-%m-%dT%H:%M:%SZ}" # format ISO-8601

Trik debug =

nilai = 42
skor = 0.87654

f"{nilai=}"          # 'nilai=42'
f"{skor=:.2f}"       # 'skor=0.88'
f"{len(items)=}"     # 'len(items)=17'  ← ekspresi apa pun boleh

Ini menggantikan print("nilai:", nilai) selamanya. Kamu tidak perlu lagi mengetik nama variabel dua kali, dan tidak ada risiko labelnya jadi salah setelah rename. Pakai ini untuk debugging cepat — untuk aplikasi sungguhan, pakai logging.

!r — tampilkan bentuk repr

teks = "halo  "

f"nilai: {teks}"     # 'nilai: halo  '     ← spasi di akhir tak terlihat
f"nilai: {teks!r}"   # "nilai: 'halo  '"   ← jelas ada spasinya

Aturan praktis: pakai !r setiap kali kamu mencatat string ke log. Ia menampilkan tanda kutip dan meng-escape karakter tersembunyi, sehingga masalah seperti spasi berlebih, newline, atau string kosong langsung kelihatan.

f-string multibaris

prompt = f"""Kamu adalah asisten.

Konteks:
{konteks}

Pertanyaan: {pertanyaan}
"""

Pola ini akan sering kamu pakai untuk menyusun prompt LLM di Fase 4 dan 7.

Kurung kurawal literal

f"{{ini kurung literal}}"    # '{ini kurung literal}'

# Penting saat membuat contoh JSON di dalam prompt:
f'Balas dengan JSON: {{"nama": "...", "skor": {ambang}}}'

Satu pengecualian penting: logging

import logging
logger = logging.getLogger(__name__)

logger.info(f"memproses {len(docs)} dokumen")   # ❌
logger.info("memproses %s dokumen", len(docs))  # ✅

Kenapa: f-string dievaluasi sebelum fungsi dipanggil. Kalau level log-mu WARNING, string itu tetap dirakit lalu dibuang — pemborosan yang nyata di loop panas. Bentuk %s menunda perakitan sampai pesannya benar-benar akan ditulis. Ruff aturan G menangkap ini.

Menulis dan membaca file (ringkas)

from pathlib import Path

Path("out.txt").write_text(isi, encoding="utf-8")
isi = Path("in.txt").read_text(encoding="utf-8")

import json
Path("data.json").write_text(
    json.dumps(data, indent=2, ensure_ascii=False, sort_keys=True),
    encoding="utf-8",
)

Ingat sort_keys=True untuk Fase 4. Prompt caching pada LLM bekerja dengan mencocokkan awalan prompt byte per byte. JSON dengan urutan key yang berubah-ubah akan membatalkan cache secara diam-diam — dan itu berarti tagihan yang lebih mahal tanpa kamu sadari.

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.