Kursus Python / Membagi kode ke modul dan menggunakan import
Modul merupakan unit kode Python yang dapat digunakan kembali, biasanya dimulai dari satu berkas .py. import mencari dan menginisialisasi modul, sehingga susunan berkas dan perintah pada tingkat teratas memengaruhi apa yang terjadi saat modul digunakan.
Pisahkan perhitungan dari program pemanggil
Letakkan fungsi perhitungan pada expense_math.py dan kode yang menampilkan hasil pada app.py. Menyimpan keduanya pada folder latihan yang sama membuat ketergantungan kecil ini mudah dilihat dan diuji tanpa memasang paket pihak ketiga.
Gunakan nama modul sederhana yang dapat digunakan sebagai identifier, misalnya dengan garis bawah alih-alih tanda hubung. Hindari nama json.py atau csv.py untuk berkas latihan yang tidak dimaksudkan menggantikan pustaka standar. Nama lokal seperti itu dapat menutupi modul pustaka standar yang ingin diimpor.
import expense_math mengikat nama modul, sehingga fungsi dirujuk sebagai expense_math.total. Bentuk from expense_math import total mengikat nama fungsi secara langsung pada modul pemanggil. Pilih cara yang membuat asal fungsi jelas dan hindari menimpa nama total setelah mengimpornya. Perilaku dasar ini dijelaskan dalam tutorial modul Python.
Buat dua berkas lengkap dan jalankan aplikasi
Buat folder latihan kosong, simpan kedua berkas berikut dengan encoding UTF-8, lalu gunakan terminal lingkungan proyek dengan Python 3.12 atau lebih baru. Isi lengkap expense_math.py:
def total(amounts):
return sum(amounts)
Isi lengkap app.py:
import expense_math
print(expense_math.total([3500, 8000, 2500]))
Dari folder yang memuat kedua berkas tersebut, jalankan:
python app.py
Keluaran berupa satu baris 14000, hasil 3500 + 8000 + 2500. Tidak ada paket tambahan yang harus dipasang. Jika nama interpreter di luar lingkungan virtual Anda adalah python3, gunakan nama itu untuk perintah yang sama.
Fungsi total hanya menerima kumpulan bilangan dan mengembalikan hasil. Ia tidak meminta masukan atau mencetak sendiri. Pemisahan ini memungkinkan pemanggil lain memakai perhitungan tanpa menyalin implementasi atau menerima tampilan yang tidak dibutuhkannya. Dasarnya sama dengan memisahkan nilai balik fungsi dari print.
Periksa pencarian modul dan waktu inisialisasi
Pencarian modul dipengaruhi cara menjalankan program dan lingkungan Python yang dipilih. Untuk skrip yang dijalankan melalui nama berkas, direktori skrip ikut dalam jalur pencarian awal. Menjalankan python app.py dari folder proyek adalah prosedur latihan yang paling mudah, tetapi jangan menyimpulkan bahwa working directory selalu menjadi satu-satunya lokasi pencarian. Pemanggilan melalui path skrip dari folder lain pun dapat menemukan helper di sebelah skrip.
Jika muncul ModuleNotFoundError, periksa ejaan nama impor, apakah berkas benar-benar bernama expense_math.py dan bukan expense_math.py.txt, serta interpreter dan struktur folder. Jika modul ditemukan tetapi nama fungsi salah, masalahnya dapat berupa ImportError atau AttributeError, bergantung cara mengaksesnya. Jangan langsung menambahkan jalur acak ke sys.path atau menyalin berkas ke direktori instalasi global.
Ilustrasi susunan dua berkas secara umum:
practice/
main.py
helper.py
Pada ilustrasi itu, main.py memakai helper.py. Nama berkas pada latihan yang sedang dijalankan tetap app.py dan expense_math.py; ilustrasi bukan instruksi untuk mengganti nama sebagian berkas.
Perintah tingkat teratas pada modul dieksekusi saat inisialisasi impor pertama dalam proses biasa. Tambahkan sementara print("initialized") di luar definisi fungsi pada expense_math.py. Saat menjalankan aplikasi, pesan itu tampil sebelum 14000. Dua perintah impor berurutan pada modul yang sama biasanya memakai objek modul yang telah disimpan dalam cache, sehingga pesan tidak otomatis dicetak dua kali.
Jangan meletakkan permintaan input, penghapusan data, atau pekerjaan besar pada tingkat teratas modul yang dimaksudkan untuk digunakan ulang. Definisikan pekerjaan sebagai fungsi dan panggil melalui titik masuk yang jelas. Setelah mengedit modul dalam sesi interaktif yang masih hidup, memulai proses baru merupakan cara sederhana memastikan pengujian tidak memakai keadaan modul lama.
Uji penggunaan ulang dan hindari ketergantungan melingkar
- Ubah 2500 menjadi 3500 pada
app.py. Jalankan kembali dan pastikan hasilnya 15000, tanpa mengubah fungsi perhitungan. - Coba bentuk
from expense_math import totaldan panggiltotalsecara langsung. Hasil harus sama ketika datanya sama. - Amati pesan inisialisasi sementara, lalu hapus pesan tersebut dan pulihkan ketiga nilai awal. Jalankan lagi untuk memperoleh hanya 14000.
Jika modul yang tampaknya benar kehilangan atribut yang diharapkan, periksa nama_modul.__file__ untuk mengetahui berkas yang benar-benar dimuat. Berkas lokal json.py dapat membuat import json memilih kode latihan, sehingga json.loads tidak tersedia. Ganti nama berkas latihan agar tidak bertabrakan dan jalankan proses baru, bukan mengganti pustaka standar.
Ketergantungan melingkar terjadi ketika dua modul saling mengimpor. Masalah muncul jika salah satunya meminta nama yang belum didefinisikan karena modul lain baru diinisialisasi sebagian. Pisahkan perhitungan bersama ke modul ketiga yang tidak bergantung pada kedua pemanggil, atau rapikan ketergantungan menjadi satu arah. Memindahkan impor secara acak dapat menyembunyikan gejala tanpa memperjelas rancangan.




