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

Google Python Style Guide

Panduan gaya internal Google yang menjelaskan alasan di balik tiap keputusan — bukan sekadar aturannya.

Intisari

  • Bedanya dengan PEP 8: setiap aturan disertai Pros, Cons, lalu Decision.
  • Aturannya lebih tegas — banyak hal yang PEP 8 biarkan terbuka, di sini diputuskan.
  • Yang paling berguna dipetik: kapan pakai comprehension, cara menangani exception, aturan import.
  • Format docstring Google (Args:, Returns:) jadi standar de facto di banyak proyek.
  • Ini bacaan “kenapa”, bukan checklist. Baca bagian yang menarik, jangan dari awal ke akhir.

Kenapa membaca ini setelah PEP 8

PEP 8 memberitahu apa. Panduan Google memberitahu kenapa, dan sering menutup pilihan yang PEP 8 biarkan terbuka. Formatnya konsisten sepanjang dokumen:

2.x Nama Aturan
  Definisi:  apa yang sedang dibicarakan
  Pros:      kenapa fitur ini enak
  Cons:      kapan ia jadi masalah
  Decision:  aturan yang harus diikuti di Google

Bagian Cons itu yang paling berharga — di situ kamu belajar kapan sebuah fitur Python jadi jebakan.

Aturan yang paling relevan untuk kodemu

Comprehension: satu for saja

Google mengizinkan comprehension, tapi membatasi: maksimal dua ekspresi for, dan sebaiknya satu. Kalau lebih, tulis loop biasa.

[x.id for x in dokumen if x.skor > 0.7]          # ✅ jelas

[c for d in dokumen for c in d.chunk if c.valid] # ⚠️ batasnya di sini

# ❌ lebih dari ini: tulis loop biasa
[f(x, y) for x in a for y in b if p(x) if q(y) if r(x, y)]

Exception: spesifik, dan jangan telan

# ❌ menangkap semuanya, termasuk KeyboardInterrupt dan bug programmer
try:
    proses()
except:
    pass

# ❌ masih terlalu luas, dan errornya hilang tanpa jejak
try:
    proses()
except Exception:
    return None

# ✅ spesifik, dicatat, dan rantai penyebabnya dijaga
try:
    proses()
except (ValueError, KeyError) as e:
    logger.warning("gagal memproses: %s", e)
    raise ProsesError("input tidak valid") from e

raise ... from e penting. Tanpa from e, traceback hanya menunjukkan error barumu dan menyembunyikan penyebab aslinya. Dengan from e, Python mencetak keduanya: "selama menangani error di atas, terjadi error berikut". Saat debug jam 2 pagi, perbedaannya besar sekali.

Import: hanya modul dan package, bukan objek

from myapp import llm         # ✅ Google: impor modulnya
llm.panggil(...)

from myapp.llm import panggil # ⚠️ Google membatasi ini
panggil(...)

Alasannya: llm.panggil(...) menunjukkan asal fungsi di titik pemanggilan, sehingga mengurangi tabrakan nama dan memudahkan pembacaan. Aturan ini agak ketat untuk proyek kecil — tapi alasannya layak dipahami.

Default mutable — sama seperti PEP 8, lebih tegas

def f(items=[]): ...            # ❌ dilarang
def f(items=None):              # ✅
    items = items if items is not None else []

Properti dan getter/setter

# ❌ jangan bawa kebiasaan Java
class Dokumen:
    def get_judul(self): return self._judul
    def set_judul(self, v): self._judul = v

# ✅ atribut biasa saja
class Dokumen:
    judul: str

# ✅ kalau butuh logika, baru pakai @property
class Dokumen:
    @property
    def ringkasan(self) -> str:
        return self.isi[:200]

Format docstring Google

def ambil(url: str, timeout: float = 30.0) -> dict:
    """Ambil JSON dari sebuah URL.

    Args:
        url: URL lengkap yang akan diambil.
        timeout: Batas waktu dalam detik.

    Returns:
        Isi respons yang sudah di-parse jadi dict.

    Raises:
        httpx.HTTPStatusError: Kalau server membalas status 4xx atau 5xx.
    """

Gaya ini lebih mudah dibaca dibanding format reStructuredText, dan sudah didukung banyak tool dokumentasi. Roadmap ini memakainya di semua contoh.

Yang membedakannya dari PEP 8

TopikPEP 8Google
Panjang baris7980, tapi dengan pengecualian eksplisit
Import objekBolehDibatasi — impor modul saja
DocstringFormat bebasFormat Google, wajib untuk API publik
Type hintOpsionalSangat dianjurkan untuk kode baru
Power feature (metaclass, dsb)Tidak dibahasDilarang kecuali ada alasan kuat

Bagian yang layak dibaca sekarang

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