Parameter & Return Value
Positional vs Keyword Arguments
def buat_profil(nama, umur, kota="Jakarta"):
return {"nama": nama, "umur": umur, "kota": kota}
# Positional
buat_profil("Budi", 25)
# Keyword
buat_profil(umur=25, nama="Budi", kota="Bandung")
Multiple Return Values (Tuple Unpacking)
def statistik(angka):
return min(angka), max(angka), sum(angka) / len(angka)
minimum, maksimum, rata_rata = statistik([10, 20, 30, 40, 50])
print(f"Min: {minimum}, Max: {maksimum}, Avg: {rata_rata}")
Guard Clauses
def bagi(a, b):
if b == 0:
return None # early return
return a / b
*args — Variadic Positional Arguments
Kalau kamu tidak tahu berapa banyak argumen yang akan diterima fungsi, gunakan *args. Semua argumen positional ekstra akan dikemas jadi tuple.
def total(*args):
# args adalah tuple berisi semua argumen
return sum(args)
print(total(1, 2, 3)) # 6
print(total(1, 2, 3, 4, 5)) # 15
print(total()) # 0
Nama args hanyalah konvensi — yang penting tanda * di depannya.
**kwargs — Variadic Keyword Arguments
Mirip *args, tapi menangkap argumen keyword (bernama) ke dalam dict.
def buat_user(**kwargs):
# kwargs adalah dict: {"nama": "Budi", "umur": 25, ...}
for key, value in kwargs.items():
print(f"{key}: {value}")
buat_user(nama="Budi", umur=25, kota="Jakarta")
# nama: Budi
# umur: 25
# kota: Jakarta
Menggabungkan Semuanya
Urutan resmi parameter: posisi biasa → *args → parameter dengan default → **kwargs.
def proses(nama, *args, kategori="umum", **kwargs):
print(f"Nama: {nama}")
print(f"Args: {args}")
print(f"Kategori: {kategori}")
print(f"Kwargs: {kwargs}")
proses("Budi", 10, 20, 30, kategori="vip", kota="Bandung", umur=25)
# Nama: Budi
# Args: (10, 20, 30)
# Kategori: vip
# Kwargs: {"kota": "Bandung", "umur": 25}
Unpacking di Call Site
Tanda * dan ** juga bekerja sebaliknya — untuk membongkar iterable/dict jadi argumen saat memanggil fungsi.
def jumlah(a, b, c):
return a + b + c
angka = [1, 2, 3]
print(jumlah(*angka)) # 6 — setara jumlah(1, 2, 3)
params = {"a": 10, "b": 20, "c": 30}
print(jumlah(**params)) # 60 — setara jumlah(a=10, b=20, c=30)
Pola ini sangat berguna saat meneruskan argumen dari satu fungsi ke fungsi lain (misalnya wrapper atau decorator).