*args
dan **kwargs
sebenarnya adalah sebuah variabel. Kadang juga
disebut dengan magic variable, karena kemampuannya yang anehKalau tidak ada itu…
…maka akan menjadi variabel yang biasa-biasa saja.
Lalu bagaimana cara menggunakan dalam program?
Kapan waktu yang tepat menggunakannya?
Apa bedanya
*args
dan **kwargs
?Mari kita bahas.
Kapan *args dan **kwargs digunakan?
Jika kita mencoba membuat variabel dengan nama *args
dan **kwargs
, maka
akan terjadi error.
Kenapa bisa begitu?
Karena ada simbol bintang (
*
) di depannya. Sedangkan pada aturan penulisan variabel di Python,
kita tidak dibolehkan menggunakan simbol di depan, kecuali underscore (_
).Lalu di mana penggunaanya?
Variabel
*args
dan **kwargs
digunakan sebagai parameter pada fungsi.Contoh:
# Pembuatan fungsi
def panggil(*nama):
print "daftar orang yang dipanggil:"
for orang in nama:
print orang
# pemanggilan fungsi
panggil("dian", "deni", "agus")
Catatan: nama *args
dan **kwargs
bukanlah sesuatu yang baku. Kita juga bisa membuatnya sesuka hati seperti *nama
, **nama
, *pensil
, dsb.Hasil outputnya:
daftar orang yang dipanggil:
dian
deni
agus
Pada contoh di atas, kita memberikan tiga paramter ke dalam fungsi
panggil()
.panggil("dian", "deni", "agus")
Sedangkan pada pembuatanya kita hanya menggunakan satu parameter, yaitu: *nama
.Kok bisa?
Inilah ajaibnya.
Saat kita menambahkan tanda bintang (
*
) di depan parameter,
kita bisa memberikan parameter berapapun yang kita inginkan saat pemanggilan.panggil("dian", "deni", "agus")
panggil("toni", "amir", "dian", "deni", "agus")
panggil("dion", "beni", "heri", "hadi")
Jadi, kapan waktu yang tepat menggunakan *args
dan **kwargs
?Waktu yang tepat menggunakan
*args
dan **kwargs
adalah saat kita membuat fungsi
dan jumlah parameternya tidak jelas alias tidak pasti (not fixed).Biasanya kan kita membuat seperti ini:
def colek(nama1, nama2, nama2):
pass
Fungsi tersebut hanya mampu menerima tiga parameter saja.colek("eko", "rian", "dwi")
# coba berikan 1 parameter pasti akan error
colek("anto")
Lalu bagaimana kalau ingin lebih dari tiga, kadang juga kita ingin satu saja?di sanalah kita harus menggunakan
*args
dan **kwargs
.Apa Perbedaan dari *args dan **kwargs?
Perbedaan yang paling terlihat adalah dari jumlah tanda bintangnya.*args
menggunakan satu tanda bintang, sedangkan **kwargs
menggunakan dua tanda bintang.Antara tanda bintang satu dan dua, itu memiliki perbedaan:
*
artinya akan membuat parameter menjadi tuple.**
artinya akan membuat parameter menjadi dictionary.
Silahkan baca:
- Mengenal Struktur data Tuple di Python (coming soon)
- Mengenal Struktur data Dictionary di Python (coming soon)
*args
dan **kwargs
, cocoknya dipakai di mana?Sebenarnya tergantung dari kasusnya.
Saat kita menggunakan
**kwargs
kita diharuskan membuat keyword atau
kata kunci ke dalam parameternya.Seperti ini:
panggil(nama="petanikode")
Untuk lebih jelasnya, silahkan perhatikan contoh program berikut:# membuat fungsi dengan parameter *args
def kirim_sms(*nomer):
print nomer
# membuat fungsi dengan parameter **kwargs
def tulis_sms(**isi):
print isi
# Pemanggilan fungsi *args
kirim_sms(123, 888, 4444)
# pemanggilan fungsi **kwargs
tulis_sms(tujuan=123, pesan="apa kabar")
Hasil outputnya:(123, 888, 4444)
{'tujuan': 123, 'pesan': 'apa kabar'}
Kita juga bisa memanggil fungsinya seperti ini:# siapkan parameternya
list_nomer = [123, 888, 4444]
isi_sms = {'tujuan': 4444, 'pesan': 'mau daftar pak'}
# pemanggilan fungsi
kirim_sms(*list_nomer)
tulis_sms(**isi_sms)
Hasil ouutputnya juga akan sama.Contoh Kasus di Dunia Nyata
Bagaimana contoh penggunaan*args
dan **kwargs
di dunia nyata?Seperti yang telah kita ketahui, dengan
*args
dan **kwargs
kita bisa
membuat parameter fungsi menjadi dinamis.Salah satu contoh kasus penerapannya di dunia nyata: Fungsi untuk menghitung nilai rata-rata.
Karena data yang akan kita hitung nilai rata-ratanya bersifat dinamis, maka kita harus menggunakan
*args
atau **kwargs
.Contoh programnya:
# membuat fungsi rata-rata
def rata_rata(*data):
banyak_data = len(data)
jumlah_data = sum(data)
nilai_rata_rata = float(jumlah_data) / float(banyak_data)
return nilai_rata_rata
print rata_rata(2,4,1,2,4,1,2,3,4,5,1,8,2)
Fungsi len()
adalah fungsi untuk menghitung banyak data yang terdapat dalam tuple atau list. Sedangkan
fungsi sum()
adalah fungsi untuk menjumlahkan semua data-nya.Selanjutnya kita terapkan rumus nilai rata-rata:
rata_rata = jumlah_data / banyak_data
Hasil outputnya:3.0
Akhir Kata…
Itulah sedikit penjelasan tentang*args
dan **kwargs
pada Python.
Semoga dapat dipahami.Kalau masih bingung, silahkan tanyakan melalui komentar.
Sumber: Petanikode.com
0 komentar: