Fungsi adalah blok kode yang diberi nama dan bisa dipanggil berkali-kali. Prinsipnya: tulis sekali, pakai berkali-kali (Don’t Repeat Yourself / DRY).
Mendefinisikan Fungsi
def sapa(nama):
print(f"Halo, {nama}! Selamat datang.")
# Memanggil fungsi
sapa("Andi") # Halo, Andi! Selamat datang.
sapa("Budi") # Halo, Budi! Selamat datang.
return — Mengembalikan Nilai
def tambah(a, b):
return a + b
hasil = tambah(3, 7)
print(hasil) # 10
# Fungsi bisa return beberapa nilai (sebagai tuple)
def min_max(angka: list):
return min(angka), max(angka)
minimum, maksimum = min_max([5, 2, 9, 1, 7])
print(minimum, maksimum) # 1 9
Fungsi tanpa return (atau return tanpa nilai) mengembalikan None.
Parameter Default
def buat_profil(nama, kota="Jakarta", umur=0):
print(f"{nama}, {kota}, {umur} tahun")
buat_profil("Citra") # Citra, Jakarta, 0 tahun
buat_profil("Deni", "Bandung") # Deni, Bandung, 0 tahun
buat_profil("Eka", "Surabaya", 28) # Eka, Surabaya, 28 tahun
Aturan: Parameter dengan nilai default harus diletakkan setelah parameter tanpa default.
Keyword Arguments
Panggil fungsi dengan menyebutkan nama parameter — urutan bebas:
def pesan_tiket(tujuan, kelas, jumlah=1):
print(f"{jumlah}x tiket {kelas} ke {tujuan}")
# Positional
pesan_tiket("Bali", "Ekonomi", 2)
# Keyword — urutan bebas
pesan_tiket(kelas="Bisnis", tujuan="Lombok", jumlah=1)
*args — Jumlah Argumen Fleksibel
def jumlahkan(*angka):
total = sum(angka)
print(f"Total: {total}")
jumlahkan(1, 2, 3) # Total: 6
jumlahkan(10, 20, 30, 40) # Total: 100
*args mengumpulkan semua argumen posisi menjadi sebuah tuple.
**kwargs — Keyword Argumen Fleksibel
def tampilkan_info(**data):
for key, value in data.items():
print(f" {key}: {value}")
tampilkan_info(nama="Farhan", kota="Medan", hobi="Coding")
# nama: Farhan
# kota: Medan
# hobi: Coding
**kwargs mengumpulkan keyword argumen menjadi sebuah dict.
Type Hints (Opsional tapi Dianjurkan)
def hitung_luas(panjang: float, lebar: float) -> float:
return panjang * lebar
def cari_kata(teks: str, kata: str) -> list[int]:
"""Mengembalikan posisi semua kemunculan kata dalam teks."""
hasil = []
start = 0
while True:
pos = teks.find(kata, start)
if pos == -1:
break
hasil.append(pos)
start = pos + 1
return hasil
Type hints tidak memengaruhi eksekusi, tapi sangat membantu editor dan pembaca kode.
Docstring
def konversi_suhu(celsius: float, ke: str = "fahrenheit") -> float:
"""
Konversi suhu dari Celsius ke satuan lain.
Args:
celsius: Suhu dalam derajat Celsius.
ke: Satuan tujuan — 'fahrenheit' atau 'kelvin'.
Returns:
Suhu dalam satuan yang dipilih.
Raises:
ValueError: Jika satuan tidak dikenali.
"""
if ke == "fahrenheit":
return celsius * 9/5 + 32
elif ke == "kelvin":
return celsius + 273.15
else:
raise ValueError(f"Satuan '{ke}' tidak dikenali.")
help(konversi_suhu) # menampilkan docstring
Lambda — Fungsi Anonim Satu Baris
# Fungsi biasa
def kali_dua(x):
return x * 2
# Lambda setara
kali_dua = lambda x: x * 2
print(kali_dua(5)) # 10
# Sering dipakai dengan sorted(), map(), filter()
mahasiswa = [
{"nama": "Andi", "ipk": 3.5},
{"nama": "Budi", "ipk": 3.8},
{"nama": "Citra", "ipk": 3.2},
]
# Urutkan berdasarkan IPK (descending)
terurut = sorted(mahasiswa, key=lambda m: m["ipk"], reverse=True)
for m in terurut:
print(f"{m['nama']}: {m['ipk']}")
Contoh Nyata: Kalkulasi Diskon
def hitung_harga_akhir(
harga: float,
diskon_persen: float = 0,
pajak_persen: float = 11.0
) -> dict:
"""Menghitung harga akhir setelah diskon dan pajak."""
harga_setelah_diskon = harga * (1 - diskon_persen / 100)
pajak = harga_setelah_diskon * (pajak_persen / 100)
total = harga_setelah_diskon + pajak
return {
"harga_awal": harga,
"diskon": harga - harga_setelah_diskon,
"pajak": pajak,
"total": total,
}
hasil = hitung_harga_akhir(500_000, diskon_persen=20)
for k, v in hasil.items():
print(f"{k:20}: Rp{v:,.0f}")
Kesimpulan
| Konsep | Kegunaan |
|---|---|
def nama(): | Mendefinisikan fungsi |
return | Mengembalikan nilai |
| Parameter default | Nilai opsional dengan fallback |
*args | Terima banyak argumen posisi |
**kwargs | Terima banyak keyword argumen |
| Type hints | Dokumentasi tipe data |
lambda | Fungsi singkat satu baris |
Artikel selanjutnya: OOP di Python — class, object, dan inheritance untuk membangun kode yang lebih terstruktur.