Bekerja dengan Fungsi Python
[versi python yang digunakan pada tutorial ini adalah 3.11
]
Apa Itu Fungsi?
Fungsi merupakan blok kode yang dibuat terpisah sehingga dapat digunakan untuk menjalankan tugas-tugas tertentu. Penggunaan fungsi memungkinkan kita untuk mengelompokkan potongan kode yang terkait secara logis untuk melakukan tugas tertentu, sehingga mempermudah pengembangan, pemeliharaan serta pemahaman kode.
Fungsi dapat menerima argumen sebagai input, melakukan operasi tertentu, dan mengembalikan nilai. Fungsi juga dapat digunakan kembali (reusable), artinya fungsi dapat dipanggil berkali-kali dari bagian lain dalam program tanpa harus menuliskan kode yang sama berulang kali.
Berikut adalah manfaat dari pembuatan fungsi:
- Memecah tugas yang kompleks menjadi bagian yang lebih kecil dan lebih terkelola.
- Menghindari penulisan ulang kode berulang (redundant) dengan menggabungkan proses yang mirip ke dalam fungsi.
- Meningkatkan keterbacaan kode dengan mengatur kode dalam blok-blok yang berfungsi sendiri.
- Meningkatkan pemeliharaan kode dengan membagi tugas ke dalam fungsi terpisah.
Beberapa terminologi yang perlu diketahui dalam suatu fungsi:
- Parameter : variabel yang dideklarasikan dalam tanda kurung saat mendefinisikan fungsi. Parameter berfungsi sebagai wadah atau tempat untuk menerima nilai yang akan digunakan dalam fungsi.
- Argumen: nilai konkret untuk parameter fungsi ketika fungsi dipanggil. Ketika memanggil fungsi, argumen ditempatkan di dalam tanda kurung setelah nama fungsi dan dipisahkan oleh koma jika ada lebih dari satu. Argumen dapat berupa nilai langsung, variabel, atau ekspresi.
- Nilai balik (return value) : nilai yang dikembalikan oleh sebuah fungsi setelah mengeksekusi tugas-tugas tertentu. Ketika sebuah fungsi mencapai statement
return
, nilai yang dicantumkan setelahnya akan dikirim kembali ke pemanggil fungsi tersebut.
Inisiasi fungsi dalam bahasa python dilakukan dengan keyword
def
. Berikut ini adalah struktur umum dari pendefinisian fungsi:
Kode
# format fungsi pada python def nama_fungsi(daftar parameter): blok kode 1 ... blok kode n return nilai
Pada pustaka standar Python, sudah tersedia banyak fungsi builtin yang dapat langsung digunakan ataupun melalui import dari modul tertentu. Berikut ini beberapa contoh fungsi yang tesedia pada bahasa python:
Kode
# fungi mencetak tampilan pada layar print("Ini adalah fungsi print") # fungsi menghitung panjang string atau list panjang = len("Pokemon") # mengembalikan nilai 7 # fungsi menghitung total nilai dari list total = sum([2, 4, 6]) # mengembalikan nilai 12 # fungsi pembulatan desimal pi_2_digit = round(3.1456, 2) # mengembalikan nilai 3.14
Membuat Fungsi di Python
Tidak semua fungsi yang diperlukan tersedia pada pustaka bawaan python. Untuk itu kita dapat mendefinisikan fungsi sendiri untuk menyelesaikan berbagai tugas. Fungsi yang dibuat dapat digunakan untuk menampilkan sesuatu atau melakukan operasi tertentu dan mengembalikan nilai kepada pemanggil fungsi.
Kode di bawah ini merupakan beberapa contoh fungsi yang dibuat dalam bahasa python :
Kode
# CONTOH 1: HELLO_PIKACHU # tanpa parameter # tanpa nilai balik def hello_pikachu(): print("Hello Pikachu\n") # CONTOH 2 : POKEMON_INFO # 3 parameter (name, type dan hp) # tanpa nilai balik def pokemon_info(name, type, hp): print(f"Nama : {name}") print(f"Type : {type}") print(f"HP : {hp}\n") # CONTOH 3 : CELCIUS_TO_FAHRENHEIT # 1 parameter (suhu_celcius) # nilai balik float (suhu_fahrenheit) def celcius_to_fahrenheit(suhu_celcius): suhu_fahrenheit = 9 / 5 * suhu_celcius + 32 return suhu_fahrenheit
Secara ringkas, terdapat tiga fungsi yang didefinisikan pada kode di atas yaitu:
hello_pikachu
. Fungsi tidak memiliki parameter maupun nilai balik. Setiap kali fungsi dipanggil maka akan mencetak teks"Hello Pikachu"
pokemon_info
. Fungsi memiliki 3 parameter yang harus ditentukan yaituname
,type
danhp
. Setiap kali pemanggilan fungsi, maka akan mencetak teks sesuai dengan nilai parameter yang diberikancelcius_to_fahrenheit
. Fungsi ini memiliki 1 parameter yaitusuhu_celcius
. Selain itu fungsi akan memberikan nilai balik yang merupakan hasil operasi matematika dari nilai parameternya. Nilai balik fungsi ini dapat disimpan ke dalam variabel untuk digunakan lebih lanjut.
Memanggil Fungsi di Python
Setelah fungsi didefinisikan, fungsi tersebut dapat dipanggil dari bagian lain program. Kode berikut menunjukkan contoh pemanggilan fungsi-fungsi yang sudah dibuat pada bagian sebelumnya.
Kode
# memanggil fungsi hello_pikachu hello_pikachu() # memanggil fungsi pokemon_info pokemon_info(name="Pikachu", type="Electric", hp=35) pokemon_info(name="Charmender", type="Fire", hp=39) # memanggil fungsi celcius_to_fahrenheit # menyimpan nilai balik ke variabel ke fahrenheit celcius = 30 fahrenheit = celcius_to_fahrenheit(suhu_celcius=celcius) print(f"{30} celcius sama dengan {fahrenheit} fahrenheit")
# OUTPUT Hello Pikachu Nama : Pikachu Type : Electric HP : 35 Nama : Charmender Type : Fire HP : 39 30 celcius sama dengan 86.0 fahrenheit
Bagian pertama, kita memanggil fungsil hello_pikachu
dimana akan mencetak output dengan teks "Hello Pikachu"
. Selanjutnya, kita memanggil fungsi pokemon_info
sebanyak 2 kali dengan nilai argumen yang berbeda. Pemanggilan ini akan mencetak teks sesuai dengan argumen yang diberikan. Bagian terakhir kita juga memanggil fungsi celcius_to_fahrenheit
, dimana nilai balik dari fungsi disimpan ke dalam variabel fahrenheit
.
Argumen Fungsi
Pada contoh sebelumnya, pemanggilan fungsi mengikuti format nama_fungsi(nama_par1 = nilai_par1, ..., nama_par_n = nilai_par_n)
. Nama parameter secara eksplisit dituliskan diikuti dengan nilai argumennya. Di dalam bahasa python, jika argumen ditempatkan mengikuti urutan yang sama seperti urutan parameter pada definisi fungsi maka tulisan nama parameternya dapat dihilangkan.
Contoh kode di bawah ini menunjukkan 4 pemanggilan fungsi show_pokemon_info
. Dari empat cara ini, cara pertama sampai ketiga akan menghasilkan perilaku yang sesuai. Cara keempat, meskipun dalam contoh ini tidak menyebabkan sintaks error, namun hasil yang diperoleh menjadi tidak tepat (logical error).
Kode
# fungsi menampilkan info pokemon def pokemon_info(name, type, hp): print(f"Nama : {name}") print(f"Type : {type}") print(f"HP : {hp}\n") # Contoh 1 : nama parameter ditulis pokemon_info(name="Pikachu", type="Electric", hp=35) # Contoh 2 # nama parameter ditulis # urutan parameter berbeda dengan fungsi print_pokemon_info(hp=39, name="Charmender", type="Fire") # Contoh 3 # nama parameter tidak ditulis # dengan positional Argument pokemon_info("Bulbasaur", "Grass/Poison", 45) # Contoh 4 # nama parameter tidak ditulis # bisa dilakukan namun tentu hasilnya KELIRU pokemon_info(44, "Squirtle", "Water")
# OUTPUT Nama : Pikachu Type : Electric HP : 35 Nama : Charmender Type : Fire HP : 39 Nama : Bulbasaur Type : Grass/Poison HP : 45 Nama : 44 Type : Squirtle HP : Water
Nilai Default Parameter
Parameter dari suatu fungsi dapat diberikan nilai default. Dengan adanya nilai default maka parameter tersebut menjadi tidak wajib diberikan saat pemanggilan fungsi. Jika nilai parameter tersebut tidak ditentukan maka akan menggunakan nilai default. Sebagai contoh pada fungsi usd_to_idr
di bawah ini, parameter exchange_rate
dbiberikan nilai default yaitu 15000
. Ketika fungsi usd_to_idr
dipanggil tanpa menyertakan argumen bagi parameter exchange_rate
maka nilai exchange_rate
akan mengikuti nilai defaultnya yaitu 15000
.
Kode
# parameter exchange_rate memiliki nilai default=15000 def usd_to_idr(amt_usd, exchange_rate=15000): amt_idr = amt_usd * exchange_rate return amt_idr # parameter exchange_rate tidak ditentukan print(usd_to_idr(amt_usd=10)) # hasil : 150.000 # parameter exchange_rate ditentukan print(usd_to_idr(10, 11000)) # hasil : 110.000 # parameter amt_usd tidak ditentukan print(usd_to_idr(exchange_rate=12500)) # TypedError
# OUTPUT 150000 110000 TypeError: usd_to_idr() missing 1 required positional argument: 'amt_usd' # karena parameter amt_usd tidak memiliki nilai default, maka wajib disediakan
Parameter *args dan **kwargs
Fungsi pada python dapat diberikan parameter khusus menggunakan simbol *args
. Meskipun nama yang umum dipakai adalah *args
namun pada dasarnya dapat diberikan nama apapun aslakan diawali dengan simbol *
. Kegunaan dari parameter *args
, adalah kita dapat memasukkan sejumlah argumen tanpa nama/keyword bagi parameter *args
tersebut. Fitur ini tentunya berguna jika terdapat variabel dengan jumlah yang dapat bervariasi perlu dimasukkan sebagai argumen suatu fungsi. Penggunaan *args
sangat umum di dalam banyak pustaka python dan hampir akan selalu ditemui dalam berbagai pemanggilan fungsi maupun metode pada suatu kelas.
Contoh di bawah ini menunjukkan fungsi rataan_skor
untuk menghitung nilai rata-rata skor. Fungsi memiliki 3 parameter, 2 parameter pertama adalah parameter posisitional dan tidak memiliki default value, yaitu math
dan english
dan parameter ketiga adalah *args
. Fungsi dapat dipanggil dengan menentukan argumen bagi parameter math
dan english
. Sebagai tambahan, fungsi dapat menerima argumen lainnya (0 atau lebih argumen tambahan) yang akan mengisi nilai parameter *args
. Daftar argumen bagi parameter *args
tersimpan dalam bentuk tuple sehingga dapat diakses seperti mengakses objek tuple pada umumnya.
Kode
# fungsi dengan *args def rataan_skor(math, english, *args): print("Nilai *args :", args) jumlah_kelas = 2 + len(args) total = math + english for arg in args: total += arg return total / jumlah_kelas # math = 90 dan english = 70 # nilai berikutnya adalah *args (80, 60, 80) skor_budi = rataan_skor(90, 70, 80, 60, 80) print(f"Nilai rata-rata Budi adalah {skor_budi}")
# OUTPUT Nilai *args : (80, 60, 80) Nilai rata-rata Budi adalah 76.0
Selain parameter *args
, terdapat satu tipe parameter lagi yaitu **kwargs
(dapat menggunakan nama apapun, yang terpenting diawali dengan simbol **
. JIka pada parameter *args
diberikan tanpa nama/keyword dan tersimpan sebagai tuple, sebaliknya pada **kwargs
, setiap argumen harus memiliki key/nama. Argumen yang masuk dalam parameter **kwargs
tersimpan dalam bentuk dictionary sehingga dapat diakses seperti umumnya pada dictionary.
Contohnya, pada fungsi rataan_skor
di bawah ini memiliki 3 parameter yaitu math
sebagai parameter positional yang wajib ditentukan diikuti 2 parameter *args
dan **kwargs
. Saat pemanggilan fungsi, misalkan nilai parameter math
adalah 90 dan diikuti dua parameter tanpa nama dengan nilai yaitu 70 dan 90. Dua nilai ini akan menjadi bagian dari parameter *args
. Terakhir, terdapat dua parameter dengan nama yaitu phisics
dengan nilai 60 dan art
dengan nilai 80. Kedua parameter ini akan tersimpan dalam bentuk dictionary.
Kode
def rataan_skor(math, *args, **kwargs): print("Nilai math : ", math) jumlah_kelas = 1 + len(args) + len(kwargs) total = math print("Nilai args : ", args) for arg in args: total += arg print(f"Nilai kwargs : {kwargs}\n") for key in kwargs: total += kwargs[key] return total / jumlah_kelas # math : 90 # *args : (70, 80) # **kwargs : {'phisics'=60, 'art'=80} skor_budi = rataan_skor(90, 70, 80, phisics=60, art=80) print(f"Nilai rata-rata Budi adalah {skor_budi}")
# OUTPUT Nilai math : 90 Nilai args : (70, 80) Nilai kwargs : {'phisics': 60, 'art': 80} Nilai rata-rata Budi adalah 76.0
Fungsi Lambda
Fungsi lambda, atau disebut juga sebagai fungsi anonim, adalah fungsi yang didefinisikan tanpa menggunakan kata kunci def
dan biasanya hanya terdiri dari satu baris serta mengandung ekspresi sebagai nilai balik. Berikut adalah ringkasan tentang fungsi lambda:
- umumnya digunakan untuk membuat fungsi sederhana dengan ekspresi tunggal. Dapat digunakan pada ekspresi yang lebih rumit namun tidak direkomendasikan, sebaiknya menggunakan fungsi biasa.
- didefinisikan menggunakan kata kunci
lambda
, diikuti oleh parameter-parameter fungsi, dan diakhiri dengan ekspresi yang akan dievaluasi. - dapat memiliki nol atau lebih parameter, dipisahkan oleh koma.
- mengembalikan nilai dari ekspresi yang dievaluasi.
- tidak memerlukan pernyataan return, karena nilai yang dikembalikan ditentukan oleh hasil evaluasi ekspresi
Contoh penggunaan fungsi lambda:
Kode
# Fungsi lambda untuk menghitung kuadrat dari x square = lambda x: x**2 print(square(10)) # 100 # Fungsi lambda menghitung rata-rata 3 bilangan rata_rata = lambda x1, x2, x3 : (x1+x2+x3)/3 print(rata_rata(4, 6, 10)) # 6.6667 # Contoh fungsi lambda panjang status = lambda skor: "PASSED" if skor > 80 else "RETAKE" if skor > 60 else "FAILED" print(status(85)) # PASSED print(status(65)) # RETAKE # contoh fungsi lambda sebagai argumen fungsi lain # misal pada fungsi map (fungsi builtin python) squared = map(lambda x: x**2, [1, 2, 3, 4]) print(squared) # [1, 4, 9, 16]
Ringkasan
Pada tutorial ini, kita telah membahas konsep dasar fungsi dalam bahasa python. Fungsi memungkinkan kita untuk membuat blok kode yang dapat digunakan kembali dan mengorganisir program kita dengan lebih baik. Kita juga sudah membahas mengenai parameter dan argumen fungsi serta bagaimana menggunakannya pada pemanggilan fungsi. Pada bagian ini juga ditutup dengan pembahasan tentang fungsi lambda yang memungkinkan kita membuat fungsi yang lebih ringkas dimana dapat bermanfaat pada kondisi-kondisi tertentu.
Dasar-Dasar Pemrograman dengan Python
Selanjutnya : Map, Filter, List Komprehensif dan Zip