Tutorial Belajar Python Part 36: Pengertian Arbitrary Keyword Arguments (**kwargs) Python

Materi kita kali ini sangat mirip seperti tutorial sebelumnya tentang Arbitrary Arguments (*args). Sekarang yang dibahas adalah Pengertian Arbitrary Keyword Arguments (**kwargs) dalam bahasa Python.


Pengertian Arbitrary Keyword Arguments (**kwargs) Python

Arbitrary keyword arguments adalah istilah untuk menyebut jumlah named argumen fungsi yang tidak bisa ditentukan atau berubah-ubah.

Perbedaan antara arbitrary arguments (*args) dengan arbitrary keyword arguments (**kwargs) ada di penulisan named argument atau named parameter. Mengenai named parameter ini sudah pernah kita bahas di tutorial Pengertian Named Parameter / Keyword Arguments.

Jika dalam arbitrary arguments (*args) argumen fungsi ditulis langsung dengan nilai saja, maka dalam arbitrary keyword arguments (**kwargs), argumen fungsi tersebut ditulis dalam bentuk pasangan nama dan value. Sesampainya di dalam fungsi, parameter kwargs akan berbentuk tipe data dictionary.

Penjelasan ini akan lebih mudah dipahami dengan contoh kode program berikut:

def sambung_kata(**kwargs):
  print(kwargs)
  print(type(kwargs))

sambung_kata(a="Belajar", b="Python", c="di", d="Duniailkom")

Di baris 1 saya membuat sebuah fungsi sambung_kata() dengan satu parameter. Parameter tersebut menggunakan awalan tanda bintang dua kali, yakni **kwargs, sehingga akan berfungsi untuk menampung arbitrary keyword arguments.

Isi dari fungsi sambung_kata() langsung menampilkan parameter kwargs dengan perintah print(kwargs), serta memeriksa tipe data kwargs dengan perintah print(type(kwargs)).

Di baris 5 saya memanggil fungsi sambung_kata() dengan 4 named argumen. Berikut hasil dari fungsi tersebut:

{'a': 'Belajar', 'b': 'Python', 'c': 'di', 'd': 'Duniailkom'}
<class 'dict'>

Perhatikan bahwa named argumen yang ditulis pada saat memanggil fungsi sambung_kata() semuanya di tampung oleh parameter kwargs. Jika dalam *args tipe data hasilnya berbentuk tuple, maka untuk **kwargs akan berbentuk dictionary karena memiliki pasangan nama dan nilai.

Sama seperti *args, nama parameter untuk **kwargs boleh bebas, tidak harus “kwargs”, namun syaratnya harus diawali dengan tanda bintang dua kali (**). Nama kwargs sendiri merupakan singkatan dari “keyword arguments”.


Menampilkan Nilai **kwargs Fungsi Python

Sesampainya di dalam function, isi parameter **kwargs bisa diakses dengan perulangan for. Ini kurang lebih sama seperti di dalam *args. Namun ada sedikit kendala yang bisa terjadi seperti percobaan berikut:

def sambung_kata(**kata):
  for i in kata:
     print(i)

sambung_kata(a="Belajar", b="Python", c="di", d="Duniailkom")

Hasil kode program:

a
b
c
d

Kali ini fungsi sambung_kata() saya modifikasi dengan mengubah parameter **kwargs menjadi **kata. Tidak ada masalah karena yang terpenting hanya tanda bintang dua kali ** sebagai penanda sebuah arbitrary keyword arguments.

Di dalam fungsi sambung_kata() terdapat perulangan for untuk menampilkan semua nilai argumen yang dikirim. Akan tetapi karena kata adalah sebuah dictionary, maka yang tampil adalah key dari dictionary tersebut.

Jika kita ingin menampilkan value dictionary dalam sebuah perulangan for, bisa menggunakan kode berikut:

def sambung_kata(**kata):
  for i in kata.values():
     print(i)

sambung_kata(a="Belajar", b="Python", c="di", d="Duniailkom")

Hasil kode program:

Belajar
Python
di
Duniailkom

Penambahan ada di baris 2, dimana saya me-looping hasil dari kwargs.values(). Dengan perintah ini, variabel i dalam perulangan for akan berisi value dari setiap element dictionary.

Bagaimana jika kita ingin menyambung setiap kata dalam satu baris panjang?, berikut modifikasi kode programnya:

def sambung_kata(**kata):
  hasil = ""
  for i in kata.values():
     hasil += i
  return hasil;

print( sambung_kata(a="Belajar", b="Python", c="di", d="Duniailkom") )

Hasil kode program:

BelajarPythondiDuniailkom

Sekarang di dalam perulangan nilai variabel i akan disambung dengan perintah hasil += i. Teknik ini sama seperti fungsi jumlah() seperti tutorial sebelumnya. Hanya saja sekarang yang disambung adalah kumpulan string.

Tapi masih ada sedikit masalah, setiap kata saling menempel satu sama lain. Mari tambah satu karakter spasi di dalam perulangan for:

def sambung_kata(**kata):
  hasil = ""
  for i in kata.values():
     hasil += i + " "
  return hasil;

print( sambung_kata(a="Belajar", b="Python", c="di", d="Duniailkom") )

Hasil kode program:

Belajar Python di Duniailkom

Dengan perintah hasil += i + ” “ di baris 4, maka setiap proses penyambungan kata akan ditambah satu spasi pemisah.


Menggabung Argument Biasa + *args + kwargs

Untuk fungsi yang kompleks, kita bisa menggabung penulisan argument atau parameter biasa dengan arbitrary arguments (*args) serta arbitrary keyword arguments (**kwargs).

Jika sebuah fungsi punya ketiga jenis argument ini, maka urutannya harus sebagai berikut:

  1. Argument / parameter biasa
  2. Arbitrary arguments (*args)
  3. Arbitrary keyword arguments (**kwargs)

Berikut contoh kode program yang menggabung ketiganya:

def test(var1, var2, *args,**kwargs):
  print(var1)
  print(var2)
  print(args)
  print(kwargs)

test(10, 20, 30, 40, 50, a = 60, b = 70, c = 80)

Hasil kode program:

10
20
(30, 40, 50)
{'a': 60, 'b': 70, 'c': 80}

Disini saya membuat fungsi test() yang menampung 4 buah parameter, yakni var1, var2, *args, dan **kwargs. Urutan penulisan harus seperti ini. Jika ada yang tidak sesuai, Python akan menampilkan pesan error:

def test(var1, var2, **kwargs, *args):
  print(var1)
  print(var2)
  print(args)
  print(kwargs)

test(10, 20, 30, 40, 50, a = 60, b = 70, c = 80)

Hasil kode program:

Invalid Syntax

Kode diatas error karena posisi arbitrary keyword arguments (**kwargs) ditulis sebelum arbitrary arguments (*args).


Dalam tutorial belajar Python kali ini kita telah membahas tentang pengertian dan cara penggunaan Arbitrary Keyword Arguments atau sering ditulis sebagai **kwargs. Fitur ini termasuk materi advanced yang mungkin tidak terlalu sering kita pakai namun cukup penting dipahami.

Materi kali ini untuk sementara menutup pembahasan tentang tutorial dasar bahasa Python di Duniailkom (procedural Python). Berikutnya akan di sambung ke seri bahasan tentang OOP (Object Oriented Programming) dalam bahasa Python.

3 Comments

  1. sikret
    13 Feb 21
  2. Elliot
    31 Aug 21
    • Andre
      01 Sep 21

Add Comment

Leave a Reply to sikret Cancel reply