Kursus Python / Mendefinisikan fungsi dan membedakan return dari print

Fungsi memberi nama pada satu langkah pemrosesan, menerima masukan melalui parameter, dan mengembalikan hasil. Mengembalikan nilai berbeda dari mencetaknya; memisahkan perhitungan dan tampilan membuat logika yang sama lebih mudah digunakan kembali.

Kenali parameter, argumen, dan hasil

Instruksi def menentukan nama fungsi, parameter, dan isi yang ditulis dengan indentasi. Parameter adalah nama dalam definisi, sedangkan argumen adalah nilai yang diberikan saat memanggilnya. Pada total_with_fee(amount, fee), amount dan fee adalah parameter. Dalam pemanggilan total_with_fee(8000, 500), angka 8000 dan 500 adalah argumen.

Mendefinisikan fungsi membuat objek fungsi dan menghubungkannya ke nama, tetapi isi perhitungannya baru dijalankan saat dipanggil. return mengakhiri pemanggilan saat ini dan memberikan nilai kepada pemanggil. Jika tidak ada nilai pada return atau alur mencapai akhir fungsi tanpa return, hasilnya None.

Tutorial mendefinisikan fungsi Python menjelaskan parameter dan nilai balik. Fungsi perhitungan yang hanya mencetak angka tidak menyediakan hasil numerik untuk tahap berikutnya dengan cara yang sama seperti fungsi yang mengembalikannya.

Jalankan fungsi dan gunakan kembali hasilnya

Simpan kode lengkap berikut sebagai functions.py dengan encoding UTF-8. Gunakan Python 3.12 atau lebih baru dan jalankan python functions.py dari folder latihan pada lingkungan proyek. Tidak diperlukan paket atau berkas tambahan.

def total_with_fee(amount, fee):
    """Return the sum of the amount and fee."""
    return amount + fee

first = total_with_fee(8000, 500)
second = total_with_fee(3500, 0)
print(first, second)
print(first + second)

Keluaran yang diharapkan:

8500 3500
12000

Pemanggilan pertama mengembalikan 8500, lalu nilai itu disimpan sebagai first. Pemanggilan kedua mengembalikan 3500 dan disimpan sebagai second. Kedua pemanggilan tidak mencetak hasilnya sendiri; dua instruksi print di bagian pemanggil menampilkan nilai-nilai tersebut dan jumlah gabungannya, 12000.

Baris string pertama di dalam fungsi adalah docstring atau dokumentasi fungsi. Teks bahasa Inggris pada contoh menyatakan bahwa fungsi mengembalikan jumlah nilai dan biaya. Docstring membantu pembaca memahami maksud, tetapi tidak menambahkan pemeriksaan tipe atau batas nilai secara otomatis.

Tentukan tanggung jawab dan kontrak fungsi

Operasi Hasil untuk pemanggil Efek tampilan
return total Memberikan nilai total Tidak mencetak dengan sendirinya
print(total) None dari pemanggilan print Menampilkan total

Fungsi bawaan print digunakan untuk menampilkan nilai, sedangkan return menyerahkan hasil agar dapat dipakai untuk perhitungan atau pemeriksaan lain. Memakai return print(...) juga mengembalikan None, karena itulah hasil dari print.

Contoh mengasumsikan dua nilai numerik yang bisa ditambahkan. Aturan tentang jumlah negatif, satuan pecahan, atau hanya integer belum diperiksa oleh fungsi. Operator + juga dapat memiliki arti lain untuk tipe berbeda: dua string dapat digabung, sedangkan string dan integer tidak dapat langsung dijumlahkan. Nyatakan kontrak masukan dan validasi pada batas yang tepat, bukan menganggap nama parameter sudah membatasi tipe.

Gunakan nama fungsi yang menggambarkan tindakan. Hindari satu fungsi yang sekaligus meminta masukan, menghitung, dan menyimpan berkas jika tugas-tugas itu lebih jelas dipisahkan. Dengan hasil yang dikembalikan, pemanggil terminal, layanan web, atau pengujian dapat menentukan sendiri bagaimana nilai ditampilkan atau dipakai.

Periksa kegagalan pemanggilan dan hasil yang hilang

  1. Ubah biaya pemanggilan pertama dari 500 menjadi 1000. Nilai first menjadi 9000 dan jumlah gabungan menjadi 12500.
  2. Untuk percobaan, ganti baris return amount + fee dengan print(amount + fee). Kedua fungsi mencetak angka saat dipanggil, tetapi first dan second menjadi None. Baris print(first, second) menampilkan None None, lalu penjumlahan keduanya menghasilkan TypeError.
  3. Pulihkan return. Coba memindahkan pemanggilan sebelum definisi fungsi dieksekusi dalam skrip yang baru dijalankan. Nama fungsi belum tersedia dan menghasilkan NameError.
  4. Kembalikan urutan definisi sebelum pemanggilan serta biaya 500, lalu cocokkan dua baris keluaran asli.

Jumlah argumen pada pemanggilan harus sesuai definisi. Memanggil total_with_fee(8000) tanpa fee menghasilkan TypeError, karena parameter tersebut belum memiliki nilai bawaan. Baca pesan kesalahan dan bandingkan pemanggilan dengan definisi sebelum mengubah rumus.

Nama lokal yang dibuat di dalam fungsi biasanya tidak dapat langsung dibaca di luar pemanggilan. Kembalikan nilai yang dibutuhkan alih-alih bergantung pada perubahan tersembunyi terhadap keadaan luar. Satu fungsi dengan masukan dan hasil yang jelas lebih mudah diperiksa daripada fungsi yang hasil sebenarnya hanya terlihat dari apa yang tercetak.