0
0
0
share
#args-kwargs#args-kwargs#args-kwargs#penjelasan-args-kwargs
0 Komentar
*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.
- Mendefinisikan suatu fungsi/method
- 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 :
- Membuat fungsi
- Memanggil fungsi
Dan memiliki fungsi yang bertolak belakang.
- 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
- Memanggil fungsi
*
berfungsi untuk membuka list menjadi argument.**
berfungsi untuk membuka dictionary menjadi keyword argument (key=val)
0
0
0
share