← Semua pembelajaran / Python Dasar
Fase 5 · Fungsi

Argumen Fungsi

Cara memasukkan data ke fungsi lebih fleksibel dari yang terlihat — dan ada satu perilaku yang wajib kamu tahu sebelum tergigit olehnya.

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

Intisari

  • Nilai bawaan: def sapa(nama, salam="Halo"). Parameter bernilai bawaan harus ditaruh setelah yang tidak punya.
  • Memanggil dengan nama: sapa(salam="Hai", nama="Budi") — urutan jadi bebas dan kodenya lebih jelas.
  • Kelebihan atau kekurangan argumen langsung TypeError, bukan diam-diam salah.
  • Jangan pakai [] atau {} sebagai nilai bawaan — pakai None lalu buat isinya di dalam.
  • Kalau argumennya sudah lebih dari 3–4, biasanya fungsi itu perlu dipecah.

Nilai bawaan

def sapa(nama, salam="Halo"):
    return f"{salam}, {nama}!"

print(sapa("Budi"))                  # Halo, Budi!
print(sapa("Budi", "Selamat pagi"))  # Selamat pagi, Budi!

Parameter dengan nilai bawaan jadi opsional. Aturannya: yang punya nilai bawaan harus ditulis paling belakang.

def salah(salam="Halo", nama):       # SyntaxError
    ...

Memanggil dengan menyebut nama parameter

def buat_akun(nama, umur, kota, aktif=True):
    ...

# Sulit dibaca — apa arti True di ujung?
buat_akun("Budi", 20, "Bandung", False)

# Jelas
buat_akun(nama="Budi", umur=20, kota="Bandung", aktif=False)

# Campuran juga boleh: posisi dulu, baru yang bernama
buat_akun("Budi", 20, kota="Bandung", aktif=False)

Kebiasaan yang layak diikuti: begitu sebuah argumen berupa True/False atau angka tanpa satuan yang jelas, sebutkan nama parameternya. Kamu sedang menulis untuk dirimu tiga bulan lagi, yang sudah lupa urutan parameternya.

Salah jumlah argumen

def tambah(a, b):
    return a + b

tambah(1)          # TypeError: tambah() missing 1 required positional argument: 'b'
tambah(1, 2, 3)    # TypeError: tambah() takes 2 positional arguments but 3 were given

Python tidak menebak — dan itu bagus. Pesan errornya menyebutkan persis apa yang kurang atau kelebihan.

Jebakan: nilai bawaan yang bisa berubah

def tambah_tugas(tugas, daftar=[]):     # ← JANGAN PERNAH begini
    daftar.append(tugas)
    return daftar

print(tambah_tugas("belajar"))     # ['belajar']
print(tambah_tugas("olahraga"))    # ['belajar', 'olahraga']  ← lho?

Nilai bawaan dievaluasi sekali saja, saat baris def dibaca — bukan setiap kali fungsi dipanggil. Jadi list kosong itu cuma ada satu, dan ia diwariskan terus dari panggilan ke panggilan. Cara yang benar:

def tambah_tugas(tugas, daftar=None):
    if daftar is None:
        daftar = []                    # list baru tiap kali dipanggil
    daftar.append(tugas)
    return daftar

print(tambah_tugas("belajar"))     # ['belajar']
print(tambah_tugas("olahraga"))    # ['olahraga']   ← benar

Hafalkan sebagai aturan buta: nilai bawaan hanya boleh berupa angka, teks, True/False, atau None. Kalau kamu butuh list atau dictionary sebagai bawaan, tulis None lalu buat isinya di baris pertama fungsi.

Fungsi bisa memanggil fungsi lain

def kena_pajak(harga, persen=11):
    return harga * persen / 100

def harga_akhir(harga, diskon=0):
    setelah_diskon = harga - (harga * diskon / 100)
    return setelah_diskon + kena_pajak(setelah_diskon)

print(f"Rp {harga_akhir(100000, diskon=20):,.0f}")   # Rp 88,800

Inilah cara program besar dibangun: fungsi-fungsi kecil yang bisa dipahami sendiri-sendiri, disusun jadi satu.

Terlalu banyak argumen

# Sulit dipakai, gampang tertukar
def kirim(nama, email, subjek, isi, cc, bcc, prioritas, lampiran):
    ...

# Kelompokkan jadi satu dictionary
def kirim(penerima, pesan):
    ...

kirim(
    penerima={"nama": "Budi", "email": "[email protected]"},
    pesan={"subjek": "Halo", "isi": "Apa kabar?"},
)

Latihan: buat fungsi hitung_gaji(gaji_pokok, lembur_jam=0, tarif_lembur=25000, potongan_persen=5) yang mengembalikan gaji bersih. Panggil dengan berbagai kombinasi — hanya gaji pokok, dengan lembur, dan dengan potongan berbeda — untuk merasakan gunanya nilai bawaan.

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