Fungsi, Scope, dan Lambda
Fungsi adalah blok kode yang dibuat untuk menjalankan tugas tertentu. Dengan fungsi, kode bisa ditulis lebih rapi, mudah dibaca, dan bisa digunakan kembali tanpa perlu menulis ulang logika yang sama.
Sebelum masuk ke fungsi, kita perlu memahami scope, yaitu area tempat suatu variabel bisa diakses.
Scope
Scope menentukan di mana suatu variabel bisa digunakan. Di Python, scope yang paling sering ditemui adalah local scope dan global scope.
Local Scope
Local scope adalah area variabel yang dibuat di dalam fungsi. Variabel local hanya bisa digunakan di dalam fungsi tersebut.
def tampilkan_nama():
nama = "Budi"
print(nama)
tampilkan_nama()
Penjelasan: Variabel
namadibuat di dalam fungsitampilkan_nama(), sehingga variabel tersebut hanya bisa digunakan di dalam fungsi itu.
Jika kita mencoba mengakses variabel local dari luar fungsi, Python akan menghasilkan error.
def tampilkan_nama():
nama = "Budi"
tampilkan_nama()
print(nama)
Penjelasan: Variabel
namatidak dikenal di luar fungsi karena variabel tersebut berada pada local scope.
Global Scope
Global scope adalah area variabel yang dibuat di luar fungsi. Variabel global bisa diakses dari dalam dan luar fungsi.
mata_kuliah = "Pemrograman Open Source"
def tampilkan_mata_kuliah():
print(mata_kuliah)
tampilkan_mata_kuliah()
print(mata_kuliah)
Penjelasan: Variabel
mata_kuliahdibuat di luar fungsi, sehingga bisa digunakan di dalam fungsi dan juga di luar fungsi.
Namun, jika ingin mengubah nilai variabel global dari dalam fungsi, kita perlu berhati-hati.
jumlah = 10
def tambah_jumlah():
jumlah = 20
print(jumlah)
tambah_jumlah()
print(jumlah)
Penjelasan: Variabel
jumlahdi dalam fungsi adalah variabel local yang berbeda dari variabeljumlahdi luar fungsi. Karena itu, nilai global tetap10.
Untuk benar-benar mengubah variabel global dari dalam fungsi, gunakan keyword global.
jumlah = 10
def tambah_jumlah():
global jumlah
jumlah = 20
tambah_jumlah()
print(jumlah)
Penjelasan: Keyword
globalmemberi tahu Python bahwa variabeljumlahyang digunakan di dalam fungsi adalah variabel global.
Walaupun bisa digunakan, global sebaiknya tidak terlalu sering dipakai. Kode biasanya lebih mudah dibaca jika fungsi menerima input melalui parameter dan mengembalikan hasil menggunakan return.
Membuat Fungsi
Fungsi dibuat menggunakan keyword def, diikuti nama fungsi, tanda kurung, dan tanda titik dua (:).
def sapa():
print("Halo, selamat belajar Python")
sapa()
Penjelasan: Fungsi
sapa()dibuat untuk menampilkan teks. Fungsi tidak akan berjalan sebelum dipanggil menggunakansapa().
Nama fungsi sebaiknya ditulis dengan huruf kecil dan menggunakan underscore jika terdiri dari beberapa kata.
def tampilkan_menu():
print("1. Tambah data")
print("2. Lihat data")
print("3. Keluar")
tampilkan_menu()
Parameter dan Argumen
Parameter adalah variabel yang ditulis di dalam tanda kurung saat fungsi dibuat. Argumen adalah nilai yang dikirim ketika fungsi dipanggil.
def sapa(nama):
print(f"Halo, {nama}")
sapa("Budi")
sapa("Ani")
Penjelasan:
namaadalah parameter, sedangkan"Budi"dan"Ani"adalah argumen yang dikirim ke fungsi.
Fungsi juga bisa memiliki lebih dari satu parameter.
def tampilkan_data(nama, nilai):
print(f"Nama: {nama}")
print(f"Nilai: {nilai}")
tampilkan_data("Budi", 85)
Penjelasan: Saat fungsi dipanggil, urutan argumen harus sesuai dengan urutan parameter.
Default Parameter
Default parameter digunakan untuk memberi nilai awal pada parameter. Jika argumen tidak dikirim, fungsi akan menggunakan nilai default tersebut.
def sapa(nama="Mahasiswa"):
print(f"Halo, {nama}")
sapa()
sapa("Budi")
Penjelasan: Saat
sapa()dipanggil tanpa argumen, parameternamamenggunakan nilai default"Mahasiswa".
Keyword Argument
Keyword argument digunakan untuk mengirim argumen berdasarkan nama parameternya. Cara ini membuat pemanggilan fungsi lebih jelas, terutama jika parameternya banyak.
def tampilkan_data(nama, kelas, nilai):
print(f"Nama: {nama}")
print(f"Kelas: {kelas}")
print(f"Nilai: {nilai}")
tampilkan_data(nama="Budi", kelas="A", nilai=85)
Penjelasan: Karena argumen dikirim berdasarkan nama parameter, urutannya tidak harus selalu sama.
tampilkan_data(nilai=90, nama="Ani", kelas="B")
Return Value
return digunakan untuk mengembalikan hasil dari fungsi. Nilai yang dikembalikan bisa disimpan ke variabel atau langsung digunakan.
def tambah(a, b):
hasil = a + b
return hasil
total = tambah(10, 5)
print(total)
Penjelasan: Fungsi
tambah()mengembalikan hasil penjumlahan. Hasil tersebut kemudian disimpan ke variabeltotal.
Fungsi yang menggunakan return lebih fleksibel karena hasilnya bisa dipakai lagi untuk operasi lain.
def hitung_diskon(harga, diskon):
potongan = harga * diskon
return harga - potongan
harga_akhir = hitung_diskon(100000, 0.1)
print(harga_akhir)
Fungsi dengan List
Fungsi juga bisa menerima list sebagai parameter. Ini sering digunakan ketika kita ingin mengolah banyak data.
def hitung_rata_rata(nilai):
total = 0
for item in nilai:
total += item
return total / len(nilai)
daftar_nilai = [80, 90, 75, 85]
print(hitung_rata_rata(daftar_nilai))
Penjelasan: Fungsi
hitung_rata_rata()menerima list nilai, menjumlahkan semua isinya, lalu membagi total dengan jumlah data.
Contoh lain, fungsi untuk mengambil nilai yang lulus.
def ambil_nilai_lulus(nilai):
nilai_lulus = []
for item in nilai:
if item >= 75:
nilai_lulus.append(item)
return nilai_lulus
daftar_nilai = [60, 80, 90, 70, 85]
print(ambil_nilai_lulus(daftar_nilai))
Fungsi dengan Banyak Return
Fungsi bisa mengembalikan lebih dari satu nilai. Biasanya, nilai tersebut akan diterima dalam beberapa variabel.
def hitung_nilai(nilai):
nilai_tertinggi = max(nilai)
nilai_terendah = min(nilai)
rata_rata = sum(nilai) / len(nilai)
return nilai_tertinggi, nilai_terendah, rata_rata
daftar_nilai = [80, 90, 75, 85]
tertinggi, terendah, rata_rata = hitung_nilai(daftar_nilai)
print(tertinggi)
print(terendah)
print(rata_rata)
Penjelasan: Fungsi
hitung_nilai()mengembalikan tiga nilai sekaligus. Nilai tersebut diterima oleh variabeltertinggi,terendah, danrata_rata.
Anonymous Function
Anonymous function adalah fungsi tanpa nama. Di Python, anonymous function biasanya dibuat menggunakan lambda.
Fungsi biasa ditulis seperti ini:
def kuadrat(angka):
return angka ** 2
print(kuadrat(5))
Fungsi yang sama bisa ditulis menggunakan lambda.
kuadrat = lambda angka: angka ** 2
print(kuadrat(5))
Penjelasan:
lambda angka: angka ** 2berarti fungsi menerima parameterangkadan mengembalikanangka ** 2.
Walaupun disebut anonymous function, pada contoh di atas hasil lambda tetap disimpan ke variabel kuadrat agar bisa dipanggil kembali.
Lambda
lambda cocok digunakan untuk fungsi pendek yang hanya memiliki satu ekspresi. Lambda biasanya dipakai ketika fungsi hanya dibutuhkan sementara.
tambah = lambda a, b: a + b
print(tambah(10, 5))
Penjelasan: Lambda di atas menerima dua parameter, yaitu
adanb, lalu mengembalikan hasil penjumlahannya.
Lambda juga sering digunakan bersama fungsi seperti map(), filter(), dan sorted().
Lambda dengan Map
map() digunakan untuk menerapkan fungsi ke setiap elemen dalam list.
nilai = [1, 2, 3, 4, 5]
kuadrat = list(map(lambda angka: angka ** 2, nilai))
print(kuadrat)
Penjelasan: Lambda dijalankan untuk setiap elemen di dalam list
nilai. Hasilnya kemudian diubah kembali menjadi list.
Lambda dengan Filter
filter() digunakan untuk menyaring data berdasarkan kondisi tertentu.
nilai = [60, 80, 90, 70, 85]
nilai_lulus = list(filter(lambda angka: angka >= 75, nilai))
print(nilai_lulus)
Penjelasan: Lambda menghasilkan
Trueuntuk nilai yang lebih besar atau sama dengan 75. Hanya nilai yang memenuhi kondisi tersebut yang masuk kenilai_lulus.
Lambda dengan Sorted
sorted() digunakan untuk mengurutkan data. Dengan lambda, kita bisa menentukan bagian data mana yang dipakai sebagai dasar pengurutan.
data_mahasiswa = [
["Budi", 80],
["Ani", 90],
["Citra", 75],
]
hasil = sorted(data_mahasiswa, key=lambda mahasiswa: mahasiswa[1])
print(hasil)
Penjelasan: Data diurutkan berdasarkan nilai mahasiswa, yaitu data pada index 1.
Kapan Menggunakan Def dan Lambda
Fungsi biasa dan lambda sama-sama bisa digunakan untuk membuat fungsi, tetapi penggunaannya berbeda.
- Gunakan fungsi biasa dengan
defjika logika fungsi lebih dari satu baris. - Gunakan fungsi biasa jika fungsi tersebut akan sering digunakan.
- Gunakan lambda jika fungsi sangat pendek dan hanya dibutuhkan sementara.
- Hindari lambda yang terlalu panjang karena bisa membuat kode sulit dibaca.
def hitung_grade(nilai):
if nilai >= 90:
return "A"
elif nilai >= 80:
return "B"
elif nilai >= 70:
return "C"
else:
return "D"
print(hitung_grade(85))
Penjelasan: Contoh di atas lebih cocok menggunakan fungsi biasa karena memiliki beberapa kondisi dan lebih dari satu baris logika.
Latihan Singkat
Coba buat program sederhana dengan ketentuan berikut:
- Buat variabel global
nama_kelas. - Buat fungsi yang menampilkan
nama_kelas. - Buat fungsi
hitung_luas_persegi_panjang()dengan parameterpanjangdanlebar. - Buat fungsi
hitung_rata_rata()yang menerima list nilai. - Buat fungsi yang mengembalikan nilai tertinggi, nilai terendah, dan rata-rata.
- Buat lambda untuk menghitung kuadrat sebuah angka.
- Gunakan
map()dan lambda untuk mengubah list angka menjadi list kuadrat. - Gunakan
filter()dan lambda untuk mengambil nilai yang lebih besar atau sama dengan 75. - Buat contoh
sorted()dengan lambda untuk mengurutkan nested list berdasarkan nilai.