Parameter & Return Value — Python

Parameter & Return Value Positional vs Keyword Arguments def buat_profil(nama, umur, kota="Jakarta"): return {"nama": nama, "umur": umur, "kota": kota} # Positi

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).

Yang akan kamu pelajari