Fungsi Python — Python

Fungsi di Python Fungsi adalah blok kode yang bisa dipanggil berulang kali. Di Python, kita mendefinisikan fungsi dengan keyword def. Membuat Fungsi def…

Fungsi adalah blok kode yang diberi nama, supaya bisa dipanggil berulang kali tanpa ditulis ulang. Bayangin kartu resep di dapur Warung Kopi Pak Darto: "Total harga: harga dikali jumlah gelas". Kartunya ditulis sekali, lalu dipakai tiap ada pembeli. Bagian yang kosong di kartu (harganya berapa, berapa gelas) diisi tiap kali dipakai, dan hasil hitungannya diserahkan balik ke kasir.

🧪 Tebakan cepat: total_harga(harga, jumlah) yang badannya print(harga * jumlah), bukan return, dipanggil dengan hasil = total_harga(15000, 3), lalu print(hasil). Ada dua baris yang tercetak. Baris keduanya 45000 atau None? Tebak dulu, jawabannya ada di bagian "return dan print itu beda".

Membuat dan memanggil fungsi

def total_harga(harga, jumlah):
    return harga * jumlah

print(total_harga(15000, 3))                          # 45000
bayar = total_harga(5000, 2) + total_harga(12000, 1)
print(bayar)                                          # 22000

Fungsi harus sudah di-def sebelum dipanggil. Python menjalankan file dari atas, jadi panggilan di atas def-nya gagal dengan NameError: name 'total_harga' is not defined.

return dan print itu beda

Bayangin kasir minta asistennya menghitung total. Asisten yang print meneriakkan angkanya ke seluruh warung: semua dengar, tapi kasir gak pegang apa-apa. Asisten yang return menuliskannya di kertas lalu menyerahkannya ke kasir, jadi angkanya bisa dipakai lagi.

def total_harga(harga, jumlah):
    print(harga * jumlah)

hasil = total_harga(15000, 3)
print(hasil)
45000
None

Aturannya: fungsi yang menghitung sesuatu sebaiknya return hasilnya. Yang mencetak biar kode yang memanggilnya.

Parameter default

Parameter bisa diberi nilai bawaan dengan =. Kalau argumennya gak dikirim, nilai bawaan itu yang dipakai:

def total_harga(harga, jumlah=1):
    return harga * jumlah

print(total_harga(12000))      # 12000, jumlah pakai default 1
print(total_harga(15000, 3))   # 45000, jumlah diisi 3

Contoh lain, menghitung harga setelah diskon. Diskon 10% dari 100.000: potongannya 100000 * 10 / 100, yaitu 10000.0, jadi harga akhirnya 100000 - 10000.0 = 90000.0. Ingat dari pelajaran operator, / selalu menghasilkan float, makanya Python menulis 90000.0, bukan 90000.

Docstring

Docstring adalah string di baris pertama badan fungsi, ditulis dengan tiga tanda kutip, yang menjelaskan apa yang dilakukan fungsi itu:

def sapa(nama):
    """Menyapa pelanggan dengan namanya."""
    return f"Halo, {nama}!"

print(sapa.__doc__)   # Menyapa pelanggan dengan namanya.

Variabel di dalam fungsi

Variabel yang dibuat di dalam fungsi cuma hidup di dalam fungsi itu. Namanya variabel lokal.

def total_harga(harga, jumlah):
    subtotal = harga * jumlah
    return subtotal

total_harga(15000, 3)
print(subtotal)   # NameError: name 'subtotal' is not defined

Variabel di luar semua fungsi boleh dibaca dari dalam fungsi. Tapi begitu fungsi mengubahnya dengan = atau +=, Python menganggap nama itu variabel lokal milik fungsi, dan baris yang membacanya duluan gagal:

total = 0

def tambah(harga):
    total += harga

tambah(15000)
UnboundLocalError: cannot access local variable 'total' where it is not associated with a value

Perbaikan yang paling bersih: kirim nilainya lewat parameter dan return hasil barunya, lalu simpan di luar: total = tambah(total, 15000), dengan def tambah(total, harga): return total + harga.

⚠️ Jebakan yang sering ketemu

TL;DR: def nama(parameter): membuat fungsi, dan badannya baru jalan saat dipanggil dengan nama(argumen). return menyerahkan hasil ke pemanggil dan mengakhiri fungsi. Fungsi tanpa return mengembalikan None, jadi print di dalam fungsi bukan pengganti return. Parameter default (jumlah=1) dipakai kalau argumennya gak dikirim, dan ditulis setelah parameter tanpa default. / menghasilkan float: 100000 - 100000 * 10 / 100 adalah 90000.0. Docstring ("""...""" di baris pertama badan) menjelaskan fungsinya dan terbaca lewat help(). Variabel di dalam fungsi itu lokal: mengubah variabel luar dengan += memicu UnboundLocalError.

Yang akan kamu pelajari