Function di Python
Function atau fungsi adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai sub-program (modul program) yang merupakan sebuah program kecil untuk memproses sebagian dari pekerjaan program utama.
Fungsi di Python dibedakan menjadi beberapa,
Programme-Defined Function
Fungsi yang dibuat oleh programmmer sendiri dan biasanya terpisah dari program utama.Standard Library Function
Fungsi yang telah disediakan oleh interpreter Python. Misal,print(),int(),open(),min(),max(),len(), dll.Rekursif Function
Fungsi yang memanggil dirinya sendiri. Memanggil fungsi dari dalam blok fungsinya sendiri.Lamda atau Anonymous Function
Fungsi yang tidak disebutkan namanya. Lamda bukan sebuah perintah (statement), tetapi sebuah ekpresi (expression).
Function def
Function ada yang berada didalam class biasa disebut dengan method. Sedangkan yang kita pelajari saat ini fungsi yang tidak berada didalam class disebut dengan function.
Penulisan syntax fungsi :
def nama_fungsi(arg1, arg2, argn):
'Dokumentasi'
pernyataan
return
Fungsi dimulai dengan
defkemudian diikuti dengan nama fungsi.Sebuah fungsi bisa menggunakan ataupun tidak menggunakan argumen. Tergantung kepada kebutuhan. Nama argument pun bisa bebas tetapi harus sesuai aturan seperti penanaman
Variabel.String yang diapit tanda petik satu atau dua. Adalah sebuah komentar. Komentar tidak akan dieksekusi oleh compiler.
Fungsi
returnbersifat opsional, digunakan untuk mengembalikan sebuah data yang kemudian akan diolah oleh pemanggil.
Pemanggilan fungsi :
nama_fungsi(arg1, arg2, argn)
Diatas cara untuk memanggil fungsi.
Pemanggilannya juga harus memenuhi syarat pembuatan function. Jika fungsi ada argument wajibnya maka harus diisi. Jika tidak ada maka tidak perlu diisi.
Function Tanpa Arguments
Dibawah ini contoh fungsi tanpa memakai argumen, beserta dengan cara memanggilnya.
def hello():
return 'Hello...!'
print(hello())
print(hello())
Output :
Hello...!
Hello...!
Dari kode diatas membuat fungsi bernana hello dengan tanpa ada parameter atau argumen. Kemudian me return (mengembalikan) data string berisi Hello...!.
Function dengan Argument
Dalam pembuatan function, adakalanya kita butuh sebuah argument untuk di olah didalam function tersebut.
Ada beberapa macam argument (parameter) diantaranya,
- Argument wajib (harus diisi saat pemanggilan).
- Argument opsional (boleh di isi boleh tidak).
- Argument *arg (argument mengembalikan data tuple).
- Arguments **kwarg (argument yang mengembalikan data dictionary).
Kita akan jelaskan masing-masing Argument.
Argument Wajib
Arguments yang harus diisi ketika pemanggilannya.
Contoh :
def penjumlahan(bil1, bil2):
'Fungsi penjumlahan dua bilangan'
hasil = bil1 + bil2
return hasil
print(penjumlahan(5, 2))
Output :
7
Dari kode diatas function penjumlahan memiliki dua argument wajib bil1 dan bil2.
Saat pemanggilan function maka harus ada argument yang diisi sesuai yg dibuat, jika tidak diisi maka akan terjadi error syntax (missing ... required argument).
Argument Opsional
Sebenernya ini bukan argument opsional, karena memang sudah di berikan nilai defaultnya.
Jadi ketika pemanggilannya tidak memakai argument, tetap bisa berjalan, karena ada nilai defaultnya.
Ditandai setelah menulis nama argument ada tanda = lalu nilai defaultnya.
Contoh :
def siswa(nama = 'Jojon', kelas = 11):
'Fungsi siswa berisi argument nama dan kelas (keduanya memiliki nilai default)'
hasil = 'Hai, saya ' + nama + ', Kelas ' + str(kelas)
return hasil
print(siswa('Paijo', 12))
print(siswa())
Output :
Hai, saya Paijo, Kelas 12
Hai, saya Jojon, Kelas 11
Print pertama memanggil function sisawa dengan diisi dua argument. Mengembalikan nilai dengan apa yang ditulis.
Print yang kedua memanggil function siswa tanpa diisi argument. Mengembalikan argument nama dan kelas dengan nilai defaultnya.
Argument *arg
Argument *arg, dalam prakteknya bisa memakai kata apapun selain arg. Arg kependekan dari argument.
tanda * berfungsi untuk membungkus semua argument kedalam tuple. Untuk pemanggilannya sama seperti memanggi data tipe tuple.
Lihat contoh dibawah ini untuk jelasnya.
Contoh :
def nama_siswa(*nama):
for nm in nama:
print('Nama siswa : ', nm)
nama_siswa('Jiji', 'Jojo', 'Jaja')
Output :
Nama siswa : Jiji
Nama siswa : Jojo
Nama siswa : Jaja
Saat pemanggilan function nama_siswa boleh memakai argument berapun. Karena argument akan dijadikan satu menjadi tuple.
Argument **kwarg
kwarg kependekan dari keyword argument. Karena berisi key dan value.
Tanda ** berfungsi untuk membungkus argument menjadi data tipe dictionary {key:val}.
Cara memanggil argumentnya sama seperti memanggil data dictionary pada umumnya.
Memanggil functionnya dengan argument disertai key = value.
Lihat contoh untuk lebih jelasnya.
Contoh :
def selamat(**kartu):
print('Selamat, dari ' + kartu['dari'] + ' untuk ' + kartu['untuk'])
selamat(dari = 'Saya', untuk = 'Kamu')
card = {
'dari' : 'Paijo',
'untuk' : 'Jojon'
}
selamat(**card)
Output :
Selamat, dari Saya untuk Kamu
Selamat, dari Paijo untuk Jojon
Pemanggilan function selamat yang pertama mengisi sebuah argument dengan cara keyword = value. Bisa memakai keyword apapun dan tak terbatas.
Untuk pemanggilan function yang kedua, memakai cara yang dipisah tetapi setelahnya diubah dengan tanda ** sebelum nama variabel. Outputnya sama seperti yang pertama.
Function Rekursif
Function rekursif adalah fungsi yang memanggil dirinya sendiri.
Contoh :
def hello():
print('Hello...!')
hello()
hello()
Contoh diatas akan menghasilkan outout Hello...! secara terus menerus tanpa henti. Karena memanggil dirinya sendiri didalam tubuhnya sendiri atau blok.
Contoh penggunaan rekursif untuk menghitung faktotial.
Contoh :
def faktorial(n):
if n == 1:
return 1
else:
return n * faktorial(n-1)
print(faktorial(5))
Output :
120
Sama seperti 54321 = 120
Kenapa ketika nilai n di 1, function tidak melakukan rekrusif atau memanggil dirinya sendiri?
Coba diteliti di if n == 1: kode blok didalamnya sudah tidal ada function rekrusif lagi.
Function rekrusif hanya ada di else dalam program diatas.
Function Lambda
Fungsi yang tidak disebutkan namanya. Lamda bukan sebuah perintah (statement), tetapi sebuah ekpresi (expression).
Syntax Lambda :
lambda arg1, arg2, argn : expression
Fungsi lambda dimulai dengan menuliskan lambda diikuti dengan argumen (bisa memiliki banyak argumen) kemudian tanda : (titik dua) lalu satu expression (ekpresi).
Expression dalam lamba tidak bisa untuk melakukan tugas assignment (penugasan, misal +=, -= dll). Tetapi bisa melakukan expressions pada umumnya.
Contoh :
siswa = lambda nama, kelas : 'Nama ' + nama + ' kelas ' + str(kelas)
print(siswa('Jojon', 11))
# menurunkan sifat lambda
murid = siswa
print(murid('Paijo', 12))
Output :
Nama Jojon kelas 11
Nama Paijo kelas 12
Contoh diatas fungsi lambda di variabel siswa, kemudian di print dan menghasilkan output sama seperti fungsi yang memakai def.
Disebut anonymous karena fungsinya tanpa nama dan dengan mudah dipindahkan dengan memakai variabel (diatas, variabel murid sama dengan variabel siswa) atau dengan pernyataan secara langsung.
Di print juga menghasilkan output sama.
Contoh lamda dengan pernyataan langsung :
print(
(lambda bil1, bil2 : bil1 + bil2)(3, 4)
)
Dari contoh diatas akan menghasilkan output 7.
Tanda kurung diantara lambda berarti langsung akan mengeksekusi fungsi tersebut, dan kurung berikutnya berisi argument.
Kapan saat yang tepat menggunakan lambda?
Lambda dibutuhkan ketika kita harus membuat fungsi dalam satu baris.
Daripada membuat fungsi def dan seterusnya yg berisi satu Statements, lebih baik memakai lambda ini.
Biasanya saat menggunakan fungsi-fungsi seperti filter(), map(), dan reduce() akan membutuhkan lambda.
Contoh :
# Angka acak didalam list
angka = [1, 5, 7, 10, 12]
# Memakai fungsi def
def kali(x):
return x * 2
hasil = list(
map(kali, angka)
)
print('Hasil 1 :' , hasil)
# memakai Lambda
hasil = list(
map(lambda x : x * 2, angka)
)
print('Hasil 2 :', hasil)
Output :
Hasil 1 : [2, 10, 14, 20, 24]
Hasil 2 : [2, 10, 14, 20, 24]
Diatas memakai fungsi map(), berfungsi untuk mengaplikasikan satu fungsu ke seluruh iterable.
Hasil satu memakai fungi def.
Hasil kedua memakai lambda.
Terlihat jelas perbedaannya, simple memakai lamda untuk masalah diatas.
Updated : 2020-06-02