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:

python
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:

text
7
None
7
14

Mari kita telaah apa yang terjadi pada baris-baris kode di atas:

  1. Baris 7 (hasil_print = versi_print(3, 4)): badan versi_print mencetak 7 ke terminal (baris pertama output), lalu function selesai tanpa return — nilai baliknya None.
  2. Baris 8 (print(hasil_print)): isi hasil_print adalah None, inilah asal baris kedua output. Angka 7 sudah tercetak dan hilang; tidak tersimpan di mana pun.
  3. Baris 10-11: versi_return mengembalikan 7 sebagai nilai yang bisa disimpan (hasil_return) dan dipakai kembali.
  4. Baris 12 (print(versi_return(3, 4) * 2)): nilai balik 7 langsung dikalikan 2 menghasilkan 14. Pemanggilan versi_print(3, 4) * 2 justru memicu TypeError karena None tidak 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:

python
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:

text
kuota habis
kuota menipis
kuota aman
selesai

Function 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:

python
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:

text
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:

python
>>> def catat(pesan):
...     print("LOG:", pesan)
...     return
...
>>> nilai = catat("layanan berjalan")
LOG: layanan berjalan
>>> print(nilai)
None

return 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.