Hari 12: Fungsi — def, return & Scope
65 min
Last updated 26 Mar 2026
Mengapa Fungsi?
Fungsi memungkinkan kode DRY (Don't Repeat Yourself), modular, dan mudah di-test. Satu fungsi = satu tanggung jawab.
# Tanpa fungsi — kode berulang
print("=" * 30)
print(" Laporan Januari")
print("=" * 30)
print("=" * 30)
print(" Laporan Februari")
print("=" * 30)
# Dengan fungsi
def cetak_header(judul):
print("=" * 30)
print(f" {judul}")
print("=" * 30)
cetak_header("Laporan Januari")
cetak_header("Laporan Februari")
Parameter & Argumen
# Parameter dengan nilai default
def sapa(nama, salam="Halo"):
print(f"{salam}, {nama}!")
sapa("Budi") # Halo, Budi!
sapa("Ani", "Selamat pagi") # Selamat pagi, Ani!
# Keyword argument — urutan bebas
def profil(nama, umur, kota):
print(f"{nama}, {umur} tahun, dari {kota}")
profil(umur=25, kota="Jakarta", nama="Budi")
return — Nilai Kembalian
# Kembalikan satu nilai
def luas_persegi_panjang(p, l):
return p * l
luas = luas_persegi_panjang(10, 5)
print(luas) # 50
# Kembalikan banyak nilai (sebenarnya tuple)
def statistik(data):
return min(data), max(data), sum(data)/len(data)
mn, mx, avg = statistik([3, 7, 2, 9, 4])
print(f"Min={mn}, Max={mx}, Avg={avg}")
# return tanpa nilai = return None
def validasi(x):
if x < 0:
print("Nilai negatif!")
return # keluar dari fungsi
print(f"Nilai valid: {x}")
Scope — Jangkauan Variabel
# Local scope — hanya ada di dalam fungsi
def hitung():
hasil = 42 # variabel lokal
return hasil
# print(hasil) # NameError! tidak bisa diakses di luar
# Global scope
total = 0
def tambah(n):
global total # deklarasi global agar bisa diubah
total += n
tambah(10)
tambah(5)
print(total) # 15
# Aturan LEGB: Local → Enclosing → Global → Built-in
x = "global"
def luar():
x = "enclosing"
def dalam():
x = "local"
print(x) # local
dalam()
print(x) # enclosing
luar()
print(x) # globalAssignment
Buat fungsi-fungsi untuk sistem nilai: (1) hitung_grade(nilai) → grade A-E, (2) statistik_kelas(daftar_nilai) → dict berisi min, max, avg, lulus, tidak_lulus, (3) cetak_rapor(nama, nilai_dict) yang menampilkan rapor lengkap.
Expected output:
===================================
RAPOR — BUDI SANTOSO
===================================
Matematika : 88 (B)
Bahasa Indo : 75 (C)
IPA : 92 (A)
IPS : 70 (C)
Inggris : 85 (B)
===================================
Rata-rata: 82.0
PY
main.py
Solution
Output