*args dan **kwargs di python

*args-dan-**kwargs-di-python


*args dan **kwargs di python - Yosh sobs-sobs bersuah lagi dengan gua sang pujangga tanpa sayap, semoga pada kesempatan kali ini sobs-sobs diberikan kesehatan sehingga bisa menikmati indahnya senja dengan segelas kopi. oke sebelum mulai sobs-sobs siapkan segelas kupi dan seperangkat gorengan sebagai teman pembahasan materi kali ini.

Pada materi pembahasan kali masih seputar materi python fundamental atau dasar dan kita akan bahas apa itu *args & **kwargs

Apaan tuh bang args sama kwargs ?

Oke slow dulu sobs-sobs sruput kopinya terlebih dahulu. srrttttttt ahhh

Materi kali ini pembahasan akan berkisar di fungsi atau didalam paradigma OOP yaitu method sobs. umumnya didalam sebuah fungsi atau method kita bisa mendefinisikan beberapa parameter untuk fungsi kita, dan pendefinisian tersebutlah inti dari materi kita kali ini sobs-sobs.


1. *args

Mungkin sobs-sobs ada yang sudah pernah lihat keyword *args ini disource code python luar sana, jika sudah maka jangan bingung sobs-sobs.

penjelasan *args : jika disuatu fungsi atau method parameter tertulis *args ini artinya fungsi tersebut bisa menerima berapun argument sobs-sobs dengan tipe data apapun sobs. 
gimana masih belom faham sobs ? oke emang terkadang teori memusingkan sobs-sobs, oke dari pada pusing gua sebuah file bernama main.py dan gua akan tulis seperti kode dibawah ini sobs :

def sapa_mantan(*args):
	print(args)		# ('Dinda', 'Dewi', 'Dian')
	print(type(args))	# <class 'tuple'>


sapa_mantan("Dinda", "Dewi", "Dian")

Penjelasan kode diatas gua membuat sebuah fungsi sobs-sobs, dimana disitu gua menuliskan *args yang menandakan bahwa fungsi sapa_mantan bisa menerima beberapapun argumen dengan tipe data apaun ingat ya sobs tipe data apapun. argumen tersebut akan ditampung kedalam variabel args ya nama variabel penampung args, sebenarnya kita bisa merubah nama variabel sesuai dengan keiinginan kita sobs-sobs hanya saja kebiasaan programmer python pada umumnya adalah menggunakan variabel name args ini, variabel args ini bertipe data tuple, karena tuple tipe data yang support untuk indexing artinya kita bisa mengakses isinya berdasarkan indexnya. biar lebih mantabs lagi pemahan kita disini gua akan ganti nama variabel args ini menjadi nama variabel yang lain :

def sapa_mantan(*daftar_mantan):
	print(daftar_mantan)		# ('Dinda', 'Dewi', 'Dian')
	print(type(daftar_mantan))	# <class 'tuple'>
	# Hallo mantan pertama Dinda
	print(f"Hallo mantan pertama {daftar_mantan[0]}")
	# Hallo mantan kedua Dewi
	print(f"Hallo mantan kedua {daftar_mantan[1]}")
	# Hallo mantan ketiga Dian
	print(f"Hallo mantan ketiga {daftar_mantan[2]}")


sapa_mantan("Dinda", "Dewi", "Dian")

contoh diatas gua ubah variabel args menjadi daftar_mantan terlihat ini tidak menjadi masalah sobs-sobs yang terpenting sebelum nama variabel kita perlu manambahkan simbol * . simbol tersebut sebagai penanda bahwa variabel tersebut merupakan penampung dari argumen yang kita masukan. dilihat juga dari kode diatas kita bisa melakukan akses terhadap variabel daftar_mantan.

Oke selanjutnya bagaimana jika kita ingin melakukan validasi terhadap tipe data argumen misalnya gua ingin hanya tipe data string yang bisa sebagai argumen.

def sapa_mantan(*daftar_mantan):
	error = False
	for mantan in daftar_mantan:
		if not isinstance(mantan, str):
			error = True

	if error:
		print("daftar mantan tidak valid")
	else:
		print("daftar mantan valid")
		for mantan in daftar_mantan:
			print(f"Hallo mantan {mantan}")



sapa_mantan("Dinda", "Dewi", True) # daftar mantan tidak valid

sapa_mantan("Dinda", "Dewi", "Dini")

Penjelasan contoh diatas
pertama : kita buat variabel untuk indikator error, nilai dafault variabel adalah False artinya pada saat program dijalankan error tidak ada.
kedua : kita lakukan looping variabel daftar_mantan dan kita lakukan pengecekan, jika isi dari variabel daftar_mantan tidak berupa string maka variabel error akan berubah menjadi True.
ketiga : kita lakukan pengecekan jika variabel error True, maka akan ada output daftar_mantan tidak valid dan jika valid output daftar_mantan valid dan lakukan looping untuk menyapa mantan.. hehehehe
yang perlu diperhatikan isinstance(mantan, str). oh iya sobs-sobs fungsi instance untuk mengecek suatu value berupa tipe data apa jika tipe data yang dicek sesuai maka kembaliannya True dan jika tidak sesuai makan nilai kembaliannya False. Silahkan pelajari contoh kode diatas sobs-sobs.

2. **kwargs

Setelah membahas *args kali ini pembahasan kita tentang **kwargs, kwargs atau bisa disebut keyword argument, apa itu artinya ?
artinya jika disuatu fungsi atau method terdapat **kwargs maka kita bisa memberikan argument berupa keyword dan diikuti dengan valuenya.
Oke jika sobs-sobs belum faham gua akan berikan contoh seperti dibawah ini :

def biodata_mantan(**kwargs):
	print(kwargs)        # {'nama': 'Dinda', 'alamat': 'Gang Jeruk'}
	print(type(kwargs))  # <class 'dict'>


biodata_mantan(nama = "Dinda", alamat = "Gang Jeruk")

Kode diatas cukup sederhana sobs-sobs, diatas sebuah fungsi biodata_mantan dapat menerima keyword argument artinya keyword dengan valuenya, keyword argument tersebut ditampung kedalam sebuah variabel kwargs. adapaun nantinya variabel kwargs ini akan bertipe data dictonary. oke silahkan sobs-sobs perhatikan contoh dibawah ini : 


def biodata_mantan(**kwargs):
	print(f"Nama mantan : {kwargs['nama']}") 
	print(f"Alamatnya : {kwargs['alamat']}")



# Nama mantan : Dinda
# Alamatnya : Gang Jeruk
biodata_mantan(nama = "Dinda", alamat = "Gang Jeruk")

karena tipe data berupa dictonary kita bisa mengakses dengan menggunakan keyword seperti contoh diatas sobs-sobs. catatan sobs sama seperti args variabel kwargs  ini bisa sobs-sobs ganti dengan nama apapun yang terpenting adalah penulisan ** jika nama variabel argumen diawali dengan simbol ** maka dipastikan bahwa fungsi atau method itu kita bisa memasukan dengan keyword argumen, lihat kembali sobs-sobs contoh dibawah ini :


def biodata_mantan(**data_mantan):
	print(data_mantan.items())
	for key, value in data_mantan.items():
		print(f"{key} : {value}")




# dict_items([('nama', 'Dinda'), ('alamat', 'Gang Jeruk'), ('usia', 24)])
# nama : Dinda
# alamat : Gang Jeruk
# usia : 24
biodata_mantan(nama = "Dinda", alamat = "Gang Jeruk", usia = 24)

Contoh diatas dimana variabel data_mantan akan menampung semua keyword argumen kita sobs-sobs, untuk agar kita bisa melakukan perulangan dengan keyword dan valuenya kita harus melakukan perulangan dengan method items, method items ini adalah kepunyaan dictonary untuk sementara jangan dirisaukan sobs-sobs kegunaan method ini karena ini akan masuk kedalam pembahasan khusus tentang dictonary. yang terpenting sobs-sobs bisa memahami inti dari materi kali ini.

- Tambahan

kita juga bisa menggabungkan *args dan **kwargs, perhatikan contoh dibawah ini sobs-sobs :

def test(*args, **kwargs):
	print(f"isi args : {args}")
	print(f"isi kwargs : {kwargs}")


# isi args : ('SruputKode',)
# isi kwargs : {'myhoby': 'Ngopi', 'favcolor': 'Black'}
test("SruputKode", myhoby = "Ngopi", favcolor = "Black")

Oke gimana sobs-sobs sudah sudah tau kan kode diatas, sekarang gua akan buat lagi contoh dibawah ini sobs :


def test(*args, **kwargs):
	print(f"isi args : {args}")
	print(f"isi kwargs : {kwargs}")



test(myhoby = "Ngopi", "SruputKode")

Silahkan jalankan sobs-sobs kode diatas, dan yang terjadi akan error 
SyntaxError: positional argument follows keyword argument ini terjadi karena kita tidak mengikuti posisi penempatan argumen dari contoh diatas (*args, **kwargs) argumen ditempatkan pada range pertama sedangkan keyword argumen dirange kedua, artinya kita tidak bisa menempatkan argumen setelah keyword argumen. kita juga bisa hanya memberikan salah satu tipe saja sobs-sobs baik itu args maupun kwargs saja


def test(*args, **kwargs):
	print(f"isi args : {args}")
	print(f"isi kwargs : {kwargs}")


# isi args : ()
# isi kwargs : {'myhoby': 'Ngopi'}
test(myhoby = "Ngopi")


# isi args : ('sruputkode',)
# isi kwargs : {}
test("sruputkode")

gimana semoga dimengerti oleh sobs-sobs, untuk materi kali ini gua rasa cukup sobs-sobs jika dirasa materi kali ini tidak bisa memuaskan disarankan untuk sobs-sobs sekalian mencari refrensi ditempat lain.

Oke berhubung kopi panas sudah menunggu gua akhiri sobs-sobs.


See you next time.

Posting Komentar untuk "*args dan **kwargs di python"