Bekerja dengan Fungsi Python

Tutorial Python bekerja dengan fungsi lambda

[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 yaitu name, type dan hp. Setiap kali pemanggilan fungsi, maka akan mencetak teks sesuai dengan nilai parameter yang diberikan
  • celcius_to_fahrenheit. Fungsi ini memiliki 1 parameter yaitu suhu_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.

Selanjutnya : Map, Filter, List Komprehensif dan Zip

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *

Daftar Isi