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:
def pindahkan(nama, dari, ke):
print(f"{nama} pindah dari {dari} ke {ke}.")
pindahkan("Budi", "Bandung", "Surabaya")Output yang Dihasilkan:
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:
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:
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:
def pindahkan(nama, dari, ke):
print(f"{nama} pindah dari {dari} ke {ke}.")
pindahkan("Andi", dari="Semarang", ke="Medan")Output yang Dihasilkan:
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:
>>> pindahkan(nama="Budi", "Bandung", "Surabaya")
File "<stdin>", line 1
pindahkan(nama="Budi", "Bandung", "Surabaya")
^
SyntaxError: positional argument follows keyword argumentSatu 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:
>>> 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:
- Positional untuk parameter yang posisinya sudah bermakna — dua angka pada
bagi(10, 2)atau satu nama padasapa("Budi")tidak butuh diberi label. - Keyword saat ada parameter sejenis — dua string berurutan seperti
daridankemudah tertukar tanpa disadari; menuliskandari="Bandung"membasmi kemungkinan itu. - Keyword untuk nilai
True/False— nilai boolean telanjang di posisi ketiga atau keempat hampir selalu membingungkan;aman=Falsemenjelaskan 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 #
| Aturan | Contoh sah | Contoh salah |
|---|---|---|
| Positional sebelum keyword | pindahkan("Andi", dari="Semarang", ke="Medan") | pindahkan(dari="Semarang", "Andi") |
| Satu parameter satu nilai | pindahkan("Budi", dari="Bandung", ke="Solo") | pindahkan("Budi", nama="Budi", ...) |
| Urutan keyword bebas | pindahkan(ke="Solo", dari="Bandung", nama="Budi") | — |
| Nama harus sesuai parameter | pindahkan(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.