Module adalah file Python biasa yang isinya (fungsi, class, variabel) bisa dipakai file lain lewat import. Bayangin buku catatan Warung Kopi Pak Darto yang makin tebal. Pak Darto memecahnya jadi dua: buku aturan (aturan diskon, daftar menu) yang disimpan di rak, dan buku kasir yang dipakai tiap hari. Kasir gak menyalin aturan diskon ke bukunya. Dia cukup mengambil buku aturan dari rak saat butuh. warung.py itu buku aturannya, kasir.py buku kasirnya, dan import itu mengambil buku dari rak.
🧪 Tebakan cepat:
warung.pyberisi fungsidiskondan satu baris tes di luar fungsi:print("Tes diskon(89000):", diskon(89000)).kasir.pycuma meng-importwarung, lalu mencetak diskon untuk belanja 89.000. Waktupython3 kasir.pydijalankan, baris tes dariwarung.pyikut tercetak atau gak? Tebak dulu, jawabannya ada di bagian "if __name__ == "__main__"".
Satu file, satu module
Dua file di folder yang sama. warung.py berisi fungsi diskon dari pelajaran if/elif:
def diskon(total):
if total >= 100000:
return 15
elif total >= 50000:
return 10
elif total >= 25000:
return 5
return 0
kasir.py memakainya:
import warung
total = 89000
print("Diskon:", warung.diskon(total), "persen")
$ python3 kasir.py
Diskon: 10 persen
- Tiap file
.pyotomatis jadi module. Nama module adalah nama file tanpa.py:warung.pyjadiwarung. import warungmenjalankanwarung.pydari atas sampai bawah, sekali, lalu memberimu satu nama,warung, untuk mengakses isinya.- Isinya dipakai dengan titik:
warung.diskon(total). Titiknya sama sepertikopi.namadi pelajaran class: "punya". Class juga bisa di-import dengan cara yang sama, misalnyawarung.Menu. - Python mencari module di folder file yang dijalankan dulu, lalu di module bawaannya. Jadi kedua file harus satu folder.
- Setelah import pertama, muncul folder
__pycache__berisi versi siap-jalan dariwarung.py. Itu normal, biarkan saja.
Tiga cara import
| Cara menulis | Cara memakai | Kapan dipakai |
|---|---|---|
import warung |
warung.diskon(89000) |
Asal tiap nama jelas terlihat |
from warung import diskon |
diskon(89000) |
Butuh satu dua nama, dipakai sering |
import warung as w |
w.diskon(89000) |
Nama module panjang |
from warung import diskonmengambil satu nama langsung, jadi dipakai tanpa awalan. Boleh beberapa sekaligus:from warung import diskon, Menu.- Dengan cara itu, nama
warungsendiri gak ikut masuk.warung.diskon(89000)sesudahnya gagal:NameError: name 'warung' is not defined. Did you mean: 'Warning'?(Python menebak nama yang mirip, dan kali ini tebakannya meleset.) - Salah ketik nama yang diambil,
from warung import diskn, ditolak:ImportError: cannot import name 'diskn' from 'warung' (/home/darto/warung.py). Did you mean: 'diskon'? from warung import *mengambil semua nama sekaligus. Hindari: kamu gak tahu nama apa saja yang masuk, dan bisa menimpa nama milikmu.
Module bawaan Python
Python sudah membawa banyak module yang tinggal di-import, disebut standard library:
import math
print(math.sqrt(16)) # 4.0
print(math.ceil(4.2)) # 5
print(math.floor(4.8)) # 4
from math import sqrt
print(sqrt(25)) # 5.0
mathuntuk matematika,randomuntuk angka acak,datetimeuntuk tanggal dan jam,jsonuntuk membaca dan menulis JSON,osuntuk urusan file dan folder.math.sqrtmengembalikan float, makanya4.0, bukan4.from math import sqrtmengambilsqrtsaja, jadi bisa ditulissqrt(25)tanpamath.di depannya.- Tanpa import sama sekali,
sqrt(16)gagal:NameError: name 'sqrt' is not defined.
if __name__ == "__main__"
Tiap module punya variabel bawaan bernama __name__. Isinya tergantung cara file itu dipakai: dijalankan langsung (python3 warung.py) berarti "__main__", di-import file lain berarti nama module-nya, "warung". Tambahkan dua baris ini di bawah fungsi diskon di warung.py:
print("__name__ di warung.py:", __name__)
print("Tes diskon(89000):", diskon(89000))
$ python3 warung.py
__name__ di warung.py: __main__
Tes diskon(89000): 10
$ python3 kasir.py
__name__ di warung.py: warung
Tes diskon(89000): 10
Diskon: 10 persen
Baris tesnya ikut tercetak saat kasir.py dijalankan, karena import warung menjalankan seluruh isi warung.py. Itu jawaban tebakannya. Bungkus kode tes dengan if:
if __name__ == "__main__":
print("Tes diskon(89000):", diskon(89000))
- Saat
python3 warung.py,__name__berisi"__main__", jadi tesnya jalan. - Saat di-import,
__name__berisi"warung", jadi tesnya dilewati.python3 kasir.pysekarang cuma mencetak__name__ di warung.py: warungdanDiskon: 10 persen. - Baris
print("__name__ ...")cuma untuk melihat isinya. Hapus setelah paham.
⚠️ Jebakan yang sering ketemu
- Salah ketik nama module, atau file beda folder.
import waruggagal di baris itu juga:
Traceback (most recent call last):
File "/home/darto/kasir.py", line 1, in <module>
import warug
ModuleNotFoundError: No module named 'warug'
- Menamai file sama dengan module bawaan. File
random.pybuatanmu menutupi modulerandommilik Python, jadirandom.randint(1, 6)gagal denganAttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/darto/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module). Ganti nama file-nya. - Kode tes di luar
if __name__ == "__main__":. Kode itu ikut jalan setiap kali module-nya di-import. - Lupa awalan atau lupa import. Setelah
import math, tulismath.sqrt(16), bukansqrt(16). Mau tanpa awalan?from math import sqrt.
TL;DR: Tiap file .py adalah module, namanya nama file tanpa .py. import warung menjalankan warung.py sekali dan isinya dipakai lewat warung.diskon(...); from warung import diskon mengambil namanya langsung, jadi dipakai tanpa awalan (from math import sqrt lalu sqrt(16)); import warung as w memberi nama pendek. Module bawaan seperti math, random, datetime, dan json tinggal di-import. __name__ berisi "__main__" kalau file dijalankan langsung dan nama module-nya kalau di-import, jadi kode di bawah if __name__ == "__main__": cuma jalan saat file itu dijalankan langsung. Salah nama module jadi ModuleNotFoundError, dan file yang namanya sama dengan module bawaan menutupi module itu.