25. Module dan import
Setiap skrip yang kamu tulis selama ini ada dalam satu file. Program
nyata berkembang melampaui itu. Python memisahkan program ke beberapa
file menggunakan module: sebuah module adalah file
.py yang mengekspos function (dan variable) untuk digunakan
file lain.
Module hanyalah file Python
Tidak perlu pembungkus khusus. Buat file, taruh function di dalamnya, dan ia sudah menjadi module:
# file: greet.py
def hello(name):
print(f"Hello, {name}!")
def bye(name):
print(f"Goodbye, {name}.")Dua hal yang perlu diperhatikan:
- File tidak melakukan pekerjaan saat diimport. Tidak ada yang dicetak, tidak ada yang dijalankan. Ia hanya mendefinisikan function.
- Tidak ada statement return, tidak ada tabel pembungkus, tidak ada
upacara. File
.pyadalah module karena keberadaannya.
Menggunakan module dengan
import
File lain memuatnya dengan import:
# file: main.py
import greet
greet.hello("Keiko")
greet.bye("Keiko")import greet melakukan tiga hal:
- Menemukan file bernama
greet.pypada path Python. - Menjalankannya (hanya pertama kali — lihat catatan di bawah).
- Mengikat nama
greetdi file saat ini sehingga kamu bisa mengakses isinya viagreet.hello,greet.bye, dll.
Python menyimpan cache module yang diimport. Jika
dua file keduanya import greet, Python memuat
greet.py sekali dan kedua file berbagi objek module yang
sama. Ini bagus — artinya module murah untuk diimport dari mana
saja.
from module import name
Jika kamu hanya butuh satu atau dua nama dari sebuah module, import langsung:
from greet import hello
hello("Keiko") # no "greet." prefix neededUntuk mengimport beberapa nama sekaligus:
from greet import hello, byeIni menempatkan hello dan bye langsung ke
namespace saat ini. Tidak diperlukan awalan greet., tapi
juga tidak ada greet. yang memberitahu pembaca dari mana
function-function ini berasal. Untuk function kecil yang namanya jelas,
tidak masalah; untuk module besar, import greet dan
menggunakan greet.hello lebih jelas.
import module as alias
Nama module yang panjang bisa diberi alias yang lebih pendek:
import math_helpers as mh
print(mh.double(7))
print(mh.triple(7))Ini umum di ekosistem Python — kamu akan melihat
import numpy as np dan import pandas as pd di
mana-mana. Untuk module kecilmu sendiri, alias bersifat opsional.
Di mana Python mencari
Python mencari di direktori kerja saat ini terlebih dahulu, lalu
daftar path library standar dan paket yang terinstal. Layout paling
sederhana adalah menaruh main.py dan greet.py
di folder yang sama, lalu jalankan dari folder itu:
cd exercises/25/examples
python main.py
Jika kamu berada di root repo dan menjalankan
python exercises/25/examples/main.py, Python mungkin tidak
menemukan greet.py karena pencariannya dimulai dari
direktori skrip. Jalankan dari folder yang sama untuk membuatnya
sederhana.
Helper privat di dalam module
Function yang tidak ingin kamu panggil dari file lain bisa dibiarkan
sebagai function biasa — cukup jangan sebutkan di dokumentasi module
atau ekspos via from module import *. Konvensinya adalah
mengawali namanya dengan underscore:
# file: math_helpers.py
def _clamp(x, lo, hi):
if x < lo:
return lo
if x > hi:
return hi
return x
def double(x):
return _clamp(x * 2, -100, 100)_clamp dimulai dengan _, yang menandakan
"hanya untuk penggunaan internal". File lain bisa memanggil
math_helpers._clamp jika mereka mau, tapi underscore adalah
konvensi kuat yang mengatakan jangan dilakukan.
Pekerjaan Rumah
Pekerjaan rumah Part 5 menggunakan dua file per
soal: sebuah file module dan main.py yang menggunakannya.
Setiap soal ada di sub-foldernya sendiri agar dua file itu berada
bersama. Buka terminal, cd ke folder itu, lalu jalankan
python main.py.
Soal 1 — Module greet
Folder: exercises/25/homework/01-greet-module/.
Lengkapi greet.py agar mengekspos
hello(name) dan bye(name). File
main.py sudah disediakan dan sudah memanggil kedua function
tersebut.
Soal 2 — Math helpers
Folder: exercises/25/homework/02-math-helpers/.
Bangun module math_helpers.py dengan setidaknya dua
function:
double(x)mengembalikanx * 2.triple(x)mengembalikanx * 3.
main.py memanggil keduanya dan mencetak hasilnya.
Soal 3 — Counter
Folder: exercises/25/homework/03-counter/.
Bangun module counter.py yang mengekspos tiga
function:
increment()— menambah counter sebesar 1.get()— mengembalikan nilai saat ini.reset()— mengatur counter kembali ke 0.
Counter itu sendiri adalah variable di level module di dalam
counter.py. Ia harus bertahan antar pemanggilan (ingat
kembali diskusi scope di akhir Bab 21).
Tantangan — String utilities
Folder: exercises/25/homework/04-string-utils/.
Bangun module string_utils.py dengan setidaknya tiga
function buatanmu sendiri. Saran:
shout(s)mengembalikansdalam huruf kapital dengan!di belakang.echo(s, n)mengembalikansyang diulangnkali dengan spasi di antara.reverse_words(s)mengembalikan kata-kata darisdalam urutan terbalik.
Yang terakhir adalah tantangan lebih — kamu perlu memisahkan string menjadi kata-kata dan membalik list-nya. Jika itu terlalu banyak, ganti dengan yang lain buatanmu sendiri.
Bingung atau sudah selesai? Buka halaman solusi pekerjaan rumah.