Saat program tumbuh, memuat semua function ke dalam satu file membuat kode cepat sulit dirawat: mencari definisi menjadi lama, dan dua programmer tidak bisa bekerja pada bagian berbeda secara bersamaan. Solusi Python sederhana namun kuat: setiap file .py otomatis adalah module. Pada Chapter ini kita membuat module pertama kita sendiri, mengimpornya dari program utama, dan mengamati perilaku yang sering mengejutkan pemula — kode di tingkat module ikut berjalan setiap kali module diimpor.
Module Pertama: sapa.py #
Module bukan barang khusus — cukup file .py berisi definisi yang ingin kita pakai ulang. Kita mulai dengan dua file dalam satu folder kerja:
belajar/
├── sapa.py
└── program.pyFile sapa.py berisi dua function sederhana:
def sapa(nama):
return f"Halo, {nama}!"
def sapa_formal(nama, gelar):
return f"Selamat datang, {gelar} {nama}."File program.py mengimpor module tersebut lalu memakai isinya:
import sapa
print(sapa.sapa("Budi"))
print(sapa.sapa_formal("Siti", "Dr."))Output yang Dihasilkan:
Halo, Budi!
Selamat datang, Dr. Siti.Mari kita bedah program.py baris per baris:
- Baris 1 (
import sapa): interpreter mencari filesapa.py, menemukannya karena berada di folder yang sama denganprogram.py, menjalankan isinya satu kali, lalu mengikat namasapake module object. - Baris 3 (
print(sapa.sapa("Budi"))): functionsapa()di dalam modulesapadipanggil dengan argument"Budi"dan mengembalikan string"Halo, Budi!". - Baris 4 (
print(sapa.sapa_formal(...))): functionsapa_formal()menerima dua argument lalu menyusun salutan formal dengan nilai kembalian"Selamat datang, Dr. Siti.".
Tidak ada langkah pendaftaran atau konfigurasi apa pun — nama file menjadi nama module, dan titik menghubungkan module dengan isinya. Syaratnya satu: file yang saling mengimpor harus berada dalam jalur pencarian Python; folder yang sama selalu memenuhi syarat itu. Bila sapa.py dipindahkan ke folder lain, import sapa langsung gagal dengan ModuleNotFoundError sampai folder barunya didaftarkan — mekanisme lengkapnya dibahas pada Chapter Module Search Path.
Perlu dicatat juga bahwa module boleh berisi lebih dari sekadar function: konstanta, dictionary konfigurasi, hingga data tabel semuanya sah disimpan sebagai nama tingkat module. Prinsipnya satu — semua yang ditulis di tingkat atas akan tersedia bagi pengimpor.
Kode Tingkat Module Berjalan Saat Diimpor #
Kita sering menaruh konstanta bersama di bagian atas module. Contoh berikut memperlihatkan bahwa semua statement tingkat atas — bukan hanya def — dieksekusi saat module diimpor:
belajar/
├── cuaca.py
└── konversi_suhu.pyprint("Module konversi_suhu dimuat")
SKALA_F = 9 / 5
OFFSET_F = 32
def celsius_ke_fahrenheit(celsius):
return celsius * SKALA_F + OFFSET_FProgram utama cuaca.py hanya ingin memakai function-nya:
import konversi_suhu
print(f"Tubuh Budi: {konversi_suhu.celsius_ke_fahrenheit(36.6):.1f} F")
print(f"Air membeku: {konversi_suhu.celsius_ke_fahrenheit(0):.0f} F")Output yang Dihasilkan:
Module konversi_suhu dimuat
Tubuh Budi: 97.9 F
Air membeku: 32 FPerhatikan baris pertama output. cuaca.py sama sekali tidak memanggil print pembuka itu, tetapi kalimatnya muncul — statement import konversi_suhu mengeksekusi seluruh file konversi_suhu.py dari baris pertama hingga terakhir sebelum program utama melanjutkan. Setelah itu, nama SKALA_F, OFFSET_F, dan celsius_ke_fahrenheit melekat pada module object dan siap dipakai.
Ketika Kode Program Ikut Terimpor #
Perilaku di atas berbahaya bila kita meninggalkan kode program — bukan definisi — di dalam module. Bayangkan file statistik.py yang berisi function plus kode uji cepat yang ditinggalkan di bagian bawah:
def rata_rata(angka):
return sum(angka) / len(angka)
# kode uji cepat yang lupa dibersihkan
contoh = [80, 90, 100]
print("Rata-rata contoh:", rata_rata(contoh))Saat dijalankan langsung, file tersebut tampak wajar:
$ python3 statistik.py
Rata-rata contoh: 90.0Masalah muncul ketika program_utama.py mengimpornya:
import statistik
nilai = [70, 85, 90]
print("Rata-rata nilai:", statistik.rata_rata(nilai))Output yang Dihasilkan:
Rata-rata contoh: 90.0
Rata-rata nilai: 81.66666666666667Baris Rata-rata contoh: 90.0 bocor ke output program utama hanya karena statistik diimpor. Bayangkan bila yang bocor adalah ratusan baris laporan, perhitungan berat, atau permintaan jaringan — semua berjalan setiap kali ada file lain yang mengimpor module tersebut.
Dengan kemampuan membuat module sendiri, jumlah file .py kita akan bertambah dengan cepat. Sebelum itu, mari kita lengkapi dulu empat variasi lengkap statement import pada Chapter berikutnya agar setiap file memakai bentuk yang paling tepat.