Parameter Lanjutan: default, *args & **kwargs
Parameter bawaan, argumen kata kunci, serta menerima jumlah argumen bebas.
Parameter dengan nilai bawaan
def sapa(nama, sapaan="Halo"):
return f"{sapaan}, {nama}!"
sapa("Dina") # "Halo, Dina!"
sapa("Dina", "Selamat pagi") # "Selamat pagi, Dina!"
Parameter ber-default harus ditulis setelah parameter wajib.
> Jebakan klasik: jangan memakai list/dict sebagai default (def f(x, daftar=[])). Default dibuat sekali saat function didefinisikan sehingga dibagi antar pemanggilan. Pakai None:
> ```
> def f(x, daftar=None):
> if daftar is None:
> daftar = []
> ```
Argumen posisi vs kata kunci
def profil(nama, umur, kota):
return f"{nama}, {umur}, {kota}"
profil("Ani", 20, "Bandung") # posisi
profil(kota="Bandung", nama="Ani", umur=20) # kata kunci: urutan bebas
profil("Ani", kota="Bandung", umur=20) # campuran (posisi dulu)
Argumen kata kunci membuat pemanggilan lebih mudah dibaca.
*args: jumlah argumen bebas
def jumlah(*angka):
total = 0
for n in angka:
total += n
return total
jumlah(1, 2, 3) # 6
jumlah() # 0
Di dalam function, angka adalah tuple berisi semua argumen posisi tambahan.
**kwargs: argumen kata kunci bebas
def tampilkan(**data):
for k, v in data.items():
print(f"{k} = {v}")
tampilkan(nama="Ani", umur=20)
Di dalam function, data adalah dict.
Urutan parameter
def f(wajib, default=1, *args, **kwargs) — wajib, bawaan, *args, lalu **kwargs.
Membuka list/dict saat memanggil
angka = [1, 2, 3]
jumlah(*angka) # sama dengan jumlah(1, 2, 3)
data = {"nama": "Ani", "umur": 20}
tampilkan(**data) # sama dengan tampilkan(nama="Ani", umur=20)
Parameter khusus posisi / kata kunci (lanjutan)
def f(a, b, /, c, *, d): a dan b hanya boleh posisi; d hanya boleh kata kunci. Berguna untuk merancang API yang jelas.
Type hint pada parameter (preview)
def sapa(nama: str, sapaan: str = "Halo") -> str:
return f"{sapaan}, {nama}!"
Dibahas lebih lengkap di bab dataclass dan type hint.