*args dan **kwargs Pada Python

IbnuAmin 8 Mei 2017

*args dan **kwargs Pada Python

*args, **kwargs, mungkin adalah suatu keyword yang terlihat aneh di suatu kode python. Apa sih sebenarnya maksudnya?. Hmmt, mari kita tour di dalam tulisan ini untuk mencoba memahaminya.

Bukan Suatu Keharusan

Kata args atau kwargs ini bukan merupakan keharusan. Kita dapat menulisnya dengan vars atau kvars atau yang lainnya. Ini hanya konvensi. args berarti arguments, dan kwargs berarti keyword arguments

Kapan Menggunakannya?

Ada dua waktu kita dapat menggunakan keyword ini.

  1. Mendefinisikan suatu fungsi/method
  2. Memanggil suatu fungsi/method

Untuk setiap keadaan ini, mereka memiliki fungsi tersendiri.

Mendefinisikan suatu fungsi

Secara singkat, fungsi dari *args disaat kita memanggil fungsi : jadikan argument list yang kita masukkan ke suatu fungsi yang kita buat dengan args ini menjadi list

Mari kita perhatikan kode berikut:

def berikan_selamat(*args): print("Mari berikan selamat kepada: ") for i, x in enumerate(args): print("%s. %s" % (i+1, x))

output kurang lebih seperti berikut ini

berikan_selamat("ihfazh", "sakinah", "fufu") Mari berikan selamat kepada: 1. ihfazh 2. sakinah 3. fufu

Jadi, "ihfazh", "sakinah", "fufu" merupakan arguments yang kita masukkan ke fungsi berikan_selamat. Fungsi ini, menjadikan arguments ini menjadi list. Dan bisa di iterasi. Atau kamu bisa mengaksesnya menggunakan index.

Adapun **kwargs, maka: jadikan daftar key=val yang kita masukkan menjadi dictionary object, dan kita akses sebagaimana dictionary

Perhatikan lagi kode berikut ini:

def daftar_key_val(**kwargs): for key in kwargs: print("%s : %s" % (key, kwargs[key])) daftar_key_val(nama='ihfazh', usia=22) nama : ihfazh usia : 22

jadi, nama='ihfazh', usia=22 akan di pack menjadi {'nama': 'ihfazh', 'usia': 22} dan kita mengaksesnya di dalam fungsi selayaknya dictionary object.

Sifat *args dan **kwargs ini adalah optional. Maknanya, ketika kamu mengakses fungsi ini dengan berikan_selamat() saja, maka dia tetep akan jalan dan tidak ada protes dari python. Akan tetapi, Syarat dan ketentuan berlaku

Memanggil Suatu Fungsi

Adapun ketika memanggil suatu fungsi menggunakan * atau **, fungsi *args, **kwargs ini adalah kebalikan dari fungsi diatas. *args disini unpack list menjadi arguments sedangkan **kwargs adalah unpack dictionary menjadi keyword argument untuk fungsi tersebut

Sebagai contoh, kita mempunyai fungsi berikut beri_selamat(dari, ke). Dapat kita lihat, argument pada fungsi tersebut adalah dari di index ke 0, dan ke di index ke 1. Sehingga, untuk memanggilnya kita bisa membuat suatu list/tuple (yang penting iterable) dengan urutan yang tadi. Kemudian kita masukkan sebagai argument di fungsi tersebut dengan menambahkan bintang di awal.

Lihat kode berikut.

# definisi fungsi def beri_selamat(dari, ke): print("%s memberikan selamat kepada %s" % (dari, ke)) # memanggil fungsi 1 beri_selamat("ihfazh", "sufyan") ihfazh memberikan selamat kepada sufyan # memanggil fungsi 2 dengan menggunakan list didahului bintang alist = ["ihfazh", "sufyan"] beri_selamat(*alist) ihfazh memberikan selamat kepada sufyan

Nah, kalau dengan dua bintang ?? (**). unpack dict object menjadi keyword argument untuk fungsi tadi. Mari kita kembali ke fungsi beri_selamat

# panggil fungsi dengan keyword argument biasa beri_selamat(ke="sufyan", dari="ihfazh") ihfazh memberikan selamat kepada sufyan

Kelebihan menggunakan keyword argument ini, kita tidak harus berurutan ketika memasukkannya. Nah bagaimana ketika kita menggunakan dictionary object?

adict = {"ke": "sufyan", "dari": "ihfazh"} beri_selamat(**adict) ihfazh memberikan selamat kepada sufyan

Nah, sudah dapat difahami kan?

Kesimpulan

Jadi, tanda * dan ** adalah sebuah ekspresi di didalam bahasa python yang digunakan untuk :

  1. Membuat fungsi
  2. Memanggil fungsi

Dan memiliki fungsi yang bertolak belakang.

  1. Membuat fungsi
    • * berfungsi untuk membungkus semua argument yang ada kedalam list. Aksesnya adalah sebagaimana kita mengakses list
    • ** berfungsi untuk membungkus semua keyword argument (key=val) kedalam dictionary. Aksesnya adalah sebagaimana kita mengakses dictionary
  2. Memanggil fungsi
    • * berfungsi untuk membuka list menjadi argument.
    • ** berfungsi untuk membuka dictionary menjadi keyword argument (key=val)