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
- Ubah biaya pemanggilan pertama dari
500menjadi1000. Nilaifirstmenjadi9000dan jumlah gabungan menjadi12500. - Untuk percobaan, ganti baris
return amount + feedenganprint(amount + fee). Kedua fungsi mencetak angka saat dipanggil, tetapifirstdansecondmenjadiNone. Barisprint(first, second)menampilkanNone None, lalu penjumlahan keduanya menghasilkanTypeError. - Pulihkan return. Coba memindahkan pemanggilan sebelum definisi fungsi dieksekusi dalam skrip yang baru dijalankan. Nama fungsi belum tersedia dan menghasilkan
NameError. - 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.




