Pemanggilan seperti pindahkan("Budi", "Bandung", "Surabaya") menyimpan teka-teki: apakah "Bandung" itu kota asal atau kota tujuan? Pembaca dipaksa membuka definisi function untuk memastikan maknanya. Python menyediakan cara pemanggilan kedua — keyword argument — yang menuliskan nama parameter secara eksplisit sehingga setiap nilai melapor untuk apa nilainya dikirim. Chapter ini membahas kedua gaya pemanggilan beserta aturan keras saat keduanya dicampur.

Positional Argument: Posisi Menentukan Nilai #

Cara pemanggilan yang telah kita pakai sejauh ini bernama positional argument: nilai dipasangkan ke parameter berdasarkan urutannya. Untuk parameter bertipe sama seperti nama, dari, ke, urutan adalah satu-satunya petunjuk makna:

python
def pindahkan(nama, dari, ke):
    print(f"{nama} pindah dari {dari} ke {ke}.")

pindahkan("Budi", "Bandung", "Surabaya")

Output yang Dihasilkan:

text
Budi pindah dari Bandung ke Surabaya.

Pemanggilan di atas mengirim "Budi" untuk parameter nama, "Bandung" untuk dari, dan "Surabaya" untuk ke. Bentuk ini ringkas dan cocok untuk function dengan satu-dua parameter yang maknanya sudah jelas, seperti bagi(10, 2) pada Chapter Parameter dan Argument.

Keyword Argument: Nama Parameter Ditulis Eksplisit #

Keyword argument menuliskan pasangan nama_parameter=nilai saat pemanggilan. Nilai dipasangkan ke parameter berdasarkan nama, bukan posisi:

python
def pindahkan(nama, dari, ke):
    print(f"{nama} pindah dari {dari} ke {ke}.")

pindahkan(nama="Siti", dari="Denpasar", ke="Yogyakarta")
pindahkan(ke="Malang", dari="Jakarta", nama="Rina")

Output yang Dihasilkan:

text
Siti pindah dari Denpasar ke Yogyakarta.
Rina pindah dari Jakarta ke Malang.

Perhatikan baris terakhir: urutan penulisan keyword argument bebas karena pemasangan mengikuti nama, bukan posisi. Interpreter Python membaca ke="Malang" dan mengirim nilai tersebut ke parameter bernama ke di mana pun parameter tersebut berada.

Mencampur Kedua Gaya #

Kedua gaya boleh dicampur dalam satu pemanggilan dengan satu aturan tegas: semua positional argument wajib ditulis sebelum keyword argument manapun:

python
def pindahkan(nama, dari, ke):
    print(f"{nama} pindah dari {dari} ke {ke}.")

pindahkan("Andi", dari="Semarang", ke="Medan")

Output yang Dihasilkan:

text
Andi pindah dari Semarang ke Medan.

Pemanggilan di atas sah: satu positional argument ("Andi" untuk nama) diikuti dua keyword argument. Urutan terbalik ditolak sudah sejak tahap kompilasi — interpreter Python menandainya sebagai SyntaxError, bahkan sebelum program berjalan:

python
>>> pindahkan(nama="Budi", "Bandung", "Surabaya")
  File "<stdin>", line 1
    pindahkan(nama="Budi", "Bandung", "Surabaya")
                                                ^
SyntaxError: positional argument follows keyword argument

Satu Parameter Tidak Boleh Terisi Dua Kali #

Aturan kedua: satu parameter boleh diisi positional atau keyword, tidak keduanya. Mengirim nilai untuk nama lewat dua jalur sekaligus memicu TypeError:

python
>>> def pindahkan(nama, dari, ke):
...     print(f"{nama} pindah dari {dari} ke {ke}.")
...
>>> pindahkan("Budi", nama="Budi", dari="Bandung", ke="Solo")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: pindahkan() got multiple values for argument 'nama'

Apa yang terjadi: argument positional pertama ("Budi") sudah masuk ke parameter nama, lalu keyword argument nama="Budi" mencoba mengisinya untuk kedua kalinya. Interpreter Python menolak ambigu tersebut.

Memilih Gaya untuk Tiap Pemanggilan #

Kedua gaya sah; kualitas kode ditentukan oleh pemilihan kita. Tiga pedoman praktis:

  1. Positional untuk parameter yang posisinya sudah bermakna — dua angka pada bagi(10, 2) atau satu nama pada sapa("Budi") tidak butuh diberi label.
  2. Keyword saat ada parameter sejenis — dua string berurutan seperti dari dan ke mudah tertukar tanpa disadari; menuliskan dari="Bandung" membasmi kemungkinan itu.
  3. Keyword untuk nilai True/False — nilai boolean telanjang di posisi ketiga atau keempat hampir selalu membingungkan; aman=False menjelaskan dirinya sendiri.

Beberapa tim juga menetapkan konvensi tulis-menulis di pemeriksa kode (linter): parameter tertentu wajib dikirim sebagai keyword. Niat yang sama bisa kita terapkan sendiri lewat signature — topik yang dibahas pada Chapter Positional-Only dan Keyword-Only Parameters.

Ringkasan Aturan Pemanggilan #

AturanContoh sahContoh salah
Positional sebelum keywordpindahkan("Andi", dari="Semarang", ke="Medan")pindahkan(dari="Semarang", "Andi")
Satu parameter satu nilaipindahkan("Budi", dari="Bandung", ke="Solo")pindahkan("Budi", nama="Budi", ...)
Urutan keyword bebaspindahkan(ke="Solo", dari="Bandung", nama="Budi")—
Nama harus sesuai parameterpindahkan(nama="Budi", dari="Bandung", ke="Solo")pindahkan(nam="Budi")

Keyword argument juga berkolaborasi dengan parameter bernilai bawaan: parameter yang tidak dikirim otomatis memakai nilai bawaannya. Mekanisme tersebut dibahas tuntas pada Chapter Default Parameters.