*args dan **kwargs di Python

*args

Sintaks khusus *args pada fungsi di Python digunakan untuk melewatkan sembarang jumlah argumen ke fungsi. *args ini digunakan untuk melewatkan satu atau beberapa argumen non kata kunci.

Sintaks menggunakan tanda * untuk menerima sembarang jumlah argumen. Nama args bisa saja diganti dengan nama lain, hanya saja yang umum dipakai adalah args.

*args mengizinkan kita untuk memasukkan beberapa argumen yang jumlahnya tidak ditentukan.

Sebagai contoh: kita ingin membuat fungsi yang menerima sejumlah bilangan, dan mengalikannya satu persatu. Ini bisa menggunakan *args.

Dengan menggunakan tanda *, variabel yang diasosiasikan dengan * menjadi iterable, yang artinya bisa kita iterasikan dan jadikan input untuk fungsi orde yang lebih tinggi seperti map, filter, dan lain sebagainya

Contoh penggunaan *args:

# Program python untuk penggunaan *args

def test(arg1, *argv):
    print "argumen pertama :", arg1
    for arg in argv:
        print "Argumen berikutnya lewat *argv :", arg
 
test('Hello', 'Welcome', 'to', 'Pythonindo', 'man')

Output

argumen pertama : Hello
Argumen berikutnya lewat *argv : Welcome
Argumen berikutnya lewat *argv : to
Argumen berikutnya lewat *argv : Pythonindo
Argumen berikutnya lewat *argv : man

**kwargs

Sintaks khusus **kwargs digunakan untuk melewatkan sembarang jumlah argumen yang menggunakan kata kunci ke fungsi. Kita menggunakan dua tanda bintang di sini.

Argumen ber-kata kunci adalah argumen dimana kita melewatkan argumen berpasangan key dan value.

Kita bisa menyamakan kwargs ini dengan dictionary. Kita bisa mengiterasikan kwargs dengan menggunakan kata kuncinya.

 

def hello(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.iteritems():
            print "%s == %s" %(key, value)

Output

>>> hello(name = 'Budi Alam')
name = Budi Alam

 


Menggunakan *args dan **kwargs

Berikut ini adalah contoh penggunaan *args dan **kwargs.

 

test(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3

Output

# dengan *args
>>> args = ("hey", 14, "joey")
>>> test(*args)
arg1: hey
arg2: 14
arg3: joey

# dengan **kwargs:
>>> kwargs = {"arg1" : "hey", "arg2" : 14, "arg3" : "joey"}
>>> testify(**kwargs)
arg1 : hey
arg2 : 14
arg3 : joey