Function yang hanya mencetak hasil ke terminal ibarat mesin yang membuang produknya ke luar jendela: hasilnya terlihat sesaat, lalu tidak bisa dipakai lagi. Program sungguhan butuh hasil yang bisa dihitung lanjut — dibulatkan, disimpan ke variabel, dikirim ke database. Statement return adalah mekanisme function Python untuk mengirim nilai hasil komputasi kembali ke pemanggil. Chapter ini membahas cara kerja return, perilakunya yang menghentikan eksekusi, dan jebakan klasik membingungkannya dengan print().
Mengembalikan Nilai dengan return #
Bandingkan dua function berikut — satu mencetak, satu mengembalikan:
def versi_print(a, b):
print(a + b)
def versi_return(a, b):
return a + b
hasil_print = versi_print(3, 4)
print(hasil_print)
hasil_return = versi_return(3, 4)
print(hasil_return)
print(versi_return(3, 4) * 2)Output yang Dihasilkan:
7
None
7
14Mari kita telaah apa yang terjadi pada baris-baris kode di atas:
- Baris 7 (
hasil_print = versi_print(3, 4)): badanversi_printmencetak7ke terminal (baris pertama output), lalu function selesai tanpareturn— nilai baliknyaNone. - Baris 8 (
print(hasil_print)): isihasil_printadalahNone, inilah asal baris kedua output. Angka7sudah tercetak dan hilang; tidak tersimpan di mana pun. - Baris 10-11:
versi_returnmengembalikan7sebagai nilai yang bisa disimpan (hasil_return) dan dipakai kembali. - Baris 12 (
print(versi_return(3, 4) * 2)): nilai balik7langsung dikalikan2menghasilkan14. Pemanggilanversi_print(3, 4) * 2justru memicuTypeErrorkarenaNonetidak bisa dikalikan.
Inilah inti perbedaannya: print() mengirim teks ke terminal untuk dilihat manusia; return mengirim nilai ke pemanggil untuk dipakai program.
return Langsung Menghentikan Eksekusi #
Ketika interpreter Python mengeksekusi return, eksekusi function berhenti pada saat itu juga — baris-baris setelahnya tidak pernah berjalan. Perilaku ini memudahkan penulisan pemeriksaan berurutan:
def cek_kuota(sisa):
if sisa <= 0:
return "kuota habis"
if sisa < 100:
return "kuota menipis"
return "kuota aman"
print(cek_kuota(0))
print(cek_kuota(45))
print(cek_kuota(250))
def label_selesai():
return "selesai"
print("baris ini tidak pernah berjalan")
print(label_selesai())Output yang Dihasilkan:
kuota habis
kuota menipis
kuota aman
selesaiFunction cek_kuota memiliki tiga jalur return, dan hanya satu yang dieksekusi per pemanggilan. Pada cek_kuota(45), kondisi pertama salah, kondisi kedua benar, dan return "kuota menipis" langsung mengakhiri function — return "kuota aman" tidak tersentuh. Pada function label_selesai, baris print setelah return menjadi kode mati: sah secara sintaks, tidak berbahaya, tetapi tidak pernah dieksekusi.
Mengembalikan Banyak Nilai Sekaligus #
Function dapat mengembalikan lebih dari satu nilai dengan menuliskannya dipisah koma. Secara teknis, yang dikirim adalah sebuah tuple — struktur data yang sudah kita kenal pada Chapter Tuple:
def rentang_nilai(angka):
return min(angka), max(angka)
terkecil, terbesar = rentang_nilai([23, 7, 45, 12])
print(terkecil, terbesar)
hasil = rentang_nilai([23, 7, 45, 12])
print(hasil)
print(type(hasil))Output yang Dihasilkan:
7 45
(7, 45)
<class 'tuple'>Ketika hasil pemanggilan ditampung ke satu variabel (hasil), isi variabel tersebut adalah tuple (7, 45). Ketika ditampung ke dua variabel (terkecil, terbesar), tuple tersebut diurai (unpacking) ke masing-masing variabel. Pola “kembalikan beberapa nilai, urai saat menerima” ini sangat umum di Python — misalnya min() dan max() sekaligus, atau lebar dan tinggi sebuah gambar.
return Tanpa Nilai #
Bentuk return tanpa ekspresi setelahnya sah dan sering dipakai untuk keluar lebih awal dari function yang bekerja lewat efek samping:
>>> def catat(pesan):
... print("LOG:", pesan)
... return
...
>>> nilai = catat("layanan berjalan")
LOG: layanan berjalan
>>> print(nilai)
Nonereturn telanjang menghentikan function dan mengirim None sebagai nilai balik — sama seperti function yang berakhir tanpa return sama sekali. Untuk function murni yang menghitung sesuatu, selalu nyatakan nilainya: return nilai, bukan return kosong.