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

PEP 8 — Style Guide

Dari seluruh PEP 8, yang perlu kamu hafal hanya konvensi penamaan. Tata letak diurus formatter.

Sumber asli peps.python.org Resmi Rangkuman ~4 menit baca

Intisari

  • Bagian yang benar-benar perlu dihafal: konvensi penamaan. Sisanya otomatis.
  • snake_case untuk fungsi dan variabel, PascalCase untuk class, SCREAMING_CASE untuk konstanta.
  • Satu underscore di depan (_internal) artinya “ini urusan dalam” — konvensi, bukan paksaan bahasa.
  • Bandingkan dengan None pakai is, bukan ==.
  • PEP 8 sendiri bilang: konsistensi dengan kode sekitar lebih penting daripada mematuhi aturan.

Penamaan — hafalkan tabel ini

UntukGayaContoh
Modul / filelowercase pendekllm.py, retrieval.py
Package / folderlowercase, tanpa underscore kalau bisamyapp
ClassPascalCaseDokumenChunk, RetrievalError
Fungsi / methodsnake_casecari_dokumen()
Variabelsnake_casetotal_token
KonstantaSCREAMING_SNAKE_CASEMAX_TOKENS = 4096
Internal (non-publik)Awali __hitung_skor()
Menghindari kata kunciAkhiri _class_, id_
Tidak dipakai_for _ in range(3)

Underscore di depan tidak memaksa apa pun. Python tidak punya private. _nama adalah pesan ke sesama programmer: "ini detail internal, aku boleh mengubahnya kapan saja tanpa memberitahu." Kalau kamu mengakses _nama milik library lain, itu tanggung jawabmu sendiri saat library-nya update.

Urutan import

import json                       # 1. standard library
import os
from pathlib import Path

import httpx                      # 2. pihak ketiga
from pydantic import BaseModel

from myapp.models import Dokumen  # 3. kode sendiri
from myapp.settings import config

Tiga blok, dipisah baris kosong, masing-masing terurut alfabet. Ini ditegakkan otomatis oleh aturan I di Ruff — kamu tidak perlu mengurutkannya sendiri.

Perbandingan

if x is None: ...          # ✅ untuk None gunakan is
if x == None: ...          # ❌

if not items: ...          # ✅ list/dict/str kosong itu falsy
if len(items) == 0: ...    # ❌ bertele-tele

if isinstance(x, Dokumen): ...   # ✅ cek tipe
if type(x) == Dokumen: ...       # ❌ gagal untuk subclass

if selesai: ...            # ✅
if selesai == True: ...    # ❌

Nilai apa saja yang falsy

False, None, 0, 0.0, "", [], {}, set(), ()

Hati-hati: if jumlah: akan bernilai salah kalau jumlah adalah 0 — padahal 0 mungkin nilai yang sah. Kalau yang kamu maksud adalah "belum diisi", tulis if jumlah is None:.

Tata letak — Ruff yang mengurus

Kamu tidak perlu menghafal ini; formatter menerapkannya saat kamu simpan file:

Docstring

def cari(query: str, top_k: int = 5) -> list[Dokumen]:
    """Cari dokumen paling relevan dengan query.

    Args:
        query: Teks pencarian dari pengguna.
        top_k: Jumlah dokumen yang dikembalikan.

    Returns:
        Daftar dokumen terurut dari skor tertinggi.

    Raises:
        RetrievalError: Kalau vector store tidak bisa dihubungi.
    """

Docstring bukan sekadar dokumentasi di Fase 4. SDK Anthropic membaca docstring dan type hint fungsimu untuk membentuk skema tool yang dikirim ke LLM. Deskripsi yang jelas di sini langsung memengaruhi seberapa tepat model memanggil fungsimu.

Bagian PEP 8 yang boleh dilewati

Kalimat penutup PEP 8 sendiri

“A Foolish Consistency is the Hobgoblin of Little Minds” — konsistensi dengan kode di sekitarnya lebih penting daripada mematuhi PEP 8 secara buta. Kalau kamu bergabung ke proyek yang punya gaya berbeda, ikuti gaya proyek itu.

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