Python Args dan Kwargs

*args dan **kwargs sebenarnya adalah sebuah variabel. Kadang juga disebut dengan magic variable, karena kemampuannya yang aneh. 😄

Variabel ini memiliki kemampuan khusus karena ada tanda bintang (*) di depannya.

Kalau 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.

Error saat membuat variabel args

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, *buku, 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.

Belum tahu tentang apa itu tuple dan dictionary?

Silahkan baca:

  • Mengenal Struktur data Tuple di Python (coming soon)
  • Mengenal Struktur data Dictionary di Python (coming soon)

Antara *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.