Learn
← Previous Next →

Hari 13: *args, **kwargs & Parameter Lanjutan

60 min Last updated 26 Mar 2026

*args — Argumen Posisi Tak Terbatas

def jumlahkan(*angka):
    print(f"Menerima: {angka}")  # tuple
    return sum(angka)

print(jumlahkan(1, 2, 3))        # 6
print(jumlahkan(10, 20, 30, 40)) # 100
print(jumlahkan())                # 0

def log(level, *pesan):
    prefix = f"[{level.upper()}]"
    print(prefix, " ".join(str(p) for p in pesan))

log("info", "Server", "started", "on port 8000")
log("error", "Connection failed")

**kwargs — Argumen Keyword Tak Terbatas

def buat_profil(**info):
    print(f"Menerima: {info}")  # dict
    for kunci, nilai in info.items():
        print(f"  {kunci}: {nilai}")

buat_profil(nama="Budi", umur=25, kota="Jakarta")
buat_profil(produk="Laptop", harga=15_000_000, stok=10)

# Gabungan parameter
def fungsi_lengkap(wajib, default="A", *args, **kwargs):
    print(f"wajib  : {wajib}")
    print(f"default: {default}")
    print(f"args   : {args}")
    print(f"kwargs : {kwargs}")

fungsi_lengkap("X", "B", 1, 2, 3, nama="Budi", kota="JKT")

Unpacking saat Pemanggilan

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

angka   = [10, 20, 30]
kw_dict = {"a": 1, "b": 2, "c": 3}

print(tambah(*angka))    # unpack list → 60
print(tambah(**kw_dict)) # unpack dict → 6

# Gabung list/dict dengan unpacking
l1 = [1, 2, 3]
l2 = [4, 5, 6]
gabung = [*l1, *l2]  # [1,2,3,4,5,6]

d1 = {"a": 1}
d2 = {"b": 2}
gd = {**d1, **d2}    # {"a":1, "b":2}

Keyword-Only & Positional-Only Parameters

# Parameter setelah * HARUS berupa keyword argument
def bagi(a, b, *, pembulatan=False):
    hasil = a / b
    return round(hasil) if pembulatan else hasil

print(bagi(10, 3))                    # 3.333...
print(bagi(10, 3, pembulatan=True))   # 3
# bagi(10, 3, True)  # TypeError!

# Parameter sebelum / hanya boleh positional (Python 3.8+)
def greet(nama, /, salam="Halo"):
    print(f"{salam}, {nama}!")

greet("Budi")
# greet(nama="Budi")  # TypeError!

Assignment

Buat fungsi buat_tabel(*kolom, **baris) yang mencetak tabel sederhana. Kolom adalah nama-nama kolom, baris adalah pasangan label: list_nilai.

Expected output:

-----------------------------------------------
Matematika | IPA | Bahasa
-----------------------------------------------
Budi | 88 | 92 | 75
Ani | 72 | 85 | 90
Citra | 95 | 88 | 82
-----------------------------------------------
PY main.py
Solution
Output