Semakin berkembang program, semakin sering potongan kode yang sama dibutuhkan di banyak tempat: memformat harga, memvalidasi input, menyapa pengguna. Jika potongan tersebut disalin-tempel ke sepuluh lokasi, satu perubahan aturan berarti sepuluh tempat harus diedit — dan satu lokasi yang terlupa menjadi bug. Function mengemas logika ke dalam satu nama yang dapat dipanggil berkali-kali: satu tempat perbaikan, semua pemanggil otomatis mengikuti. Chapter ini membahas cara mendefinisikan, memanggil, dan mendokumentasikan function di Python.
Anatomi Statement def #
Kata kunci def adalah pintu masuk pembuatan function. Bentuk umumnya:
def nama_fungsi(parameter):
"""docstring: penjelasan singkat isi function"""
badan function
return nilaiMari kita wujudkan bentuk tersebut dalam function pertama kita:
def sapa_tamu(nama):
print(f"Selamat datang, {nama}!")
sapa_tamu("Budi")
sapa_tamu("Siti")Output yang Dihasilkan:
Selamat datang, Budi!
Selamat datang, Siti!Mari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 1 (
def sapa_tamu(nama):): kata kuncidefmemberi tahu interpreter Python untuk membuat sebuah function object bernamasapa_tamu. Namanamadi dalam tanda kurung adalah parameter — placeholder untuk nilai yang akan diterima function. - Baris 2 (
print(f"Selamat datang, {nama}!")): baris ini adalah badan (body) function. Baris ini menjorok empat spasi sesuai aturan indentasi yang sudah kita pelajari pada Chapter Indentasi dan Code Block. - Baris 4 (
sapa_tamu("Budi")): tanda kurung setelah nama function memerintahkan interpreter untuk mengeksekusi function. String"Budi"menjadi nilai untuk parameternama.
Ada satu hal penting: statement def hanya membuat function, tidak menjalankan badannya. Interpreter Python membaca baris 1 dan 2, menyimpan function ke memori, lalu lanjut ke baris berikutnya. Badan function baru dieksekusi ketika pemanggilan dengan tanda kurung terjadi.
Memanggil dan Memakai Ulang #
Kekuatan function baru terasa saat dipanggil berkali-kali dengan input berbeda. Setiap pemanggilan menjalankan badan yang sama dengan nilai parameter yang berbeda:
def format_rupiah(nilai):
return f"Rp{nilai:,}".replace(",", ".")
print(format_rupiah(1500000))
print(format_rupiah(25000))
print(format_rupiah(500000000))Output yang Dihasilkan:
Rp1.500.000
Rp25.000
Rp500.000.000Function format_rupiah ditulis sekali, lalu dipanggil tiga kali. Jika suatu hari format perlu diubah — misalnya menambahkan dua angka desimal — kita hanya mengubah satu tempat, dan ketiga pemanggilan langsung mengikuti format baru.
Docstring sebagai Dokumentasi #
String pertama di dalam badan function disebut docstring. Docstring tersimpan sebagai atribut __doc__ dan dipakai oleh function help() untuk menampilkan dokumentasi:
def hitung_diskon(harga, persen):
"""Hitung besar diskon dari sebuah harga."""
return harga * persen // 100
print(hitung_diskon(250000, 20))
print(hitung_diskon(150000, 10))
print(hitung_diskon.__doc__)Output yang Dihasilkan:
50000
15000
Hitung besar diskon dari sebuah harga.Perhatikan baris print(hitung_diskon.__doc__): interpreter Python menyimpan docstring persis seperti yang kita tulis. Konvensi penulisan docstring lengkap sudah kita bahas pada Chapter Komentar dan Docstring.
Fungsi Tanpa return Mengembalikan None #
Function hitung_diskon mengembalikan nilai lewat return. Bagaimana dengan sapa_tamu yang tidak memiliki statement return sama sekali? Function seperti itu tetap mengembalikan sesuatu — object None:
>>> def diskon_persen(harga, persen):
... print(harga * persen // 100)
...
>>> diskon_persen(250000, 20)
50000
>>> hasil = diskon_persen(150000, 10)
15000
>>> print(hasil)
None
>>> type(hasil)
<class 'NoneType'>Angka 50000 dan 15000 yang muncul berasal dari print() di dalam badan function, bukan dari nilai balik. Ketika hasil pemanggilan disimpan ke variabel hasil, isi variabel tersebut adalah None — nilai balik bawaan ketika tidak ada return. Perilaku object None selengkapnya sudah kita pelajari pada Chapter None dan None Type.