Modul Python: Mengorganisir Kode untuk Keterbacaan dan Kegunaan Berulang
Halaman Sebelumnya Halaman Berikutnya
Sebuah modul memungkinkan Anda untuk mengorganisir kode Python secara logis. Mengelompokkan kode yang terkait ke dalam sebuah modul membuat kode lebih mudah dipahami dan digunakan. Sebuah modul adalah objek Python dengan atribut yang diberi nama secara bebas yang dapat Anda ikat dan rujuk.
Sederhananya, sebuah modul adalah berkas yang terdiri dari kode Python. Sebuah modul dapat mendefinisikan fungsi, kelas, dan variabel. Sebuah modul juga dapat mencakup kode yang dapat dijalankan.
Contoh
Kode Python untuk sebuah modul bernama aname biasanya berada dalam berkas bernama aname.py. Berikut adalah contoh modul sederhana, support.py
def print_func( par ): print "Hello : ", par return
Pernyataan import
Anda dapat menggunakan berkas sumber Python apa pun sebagai modul dengan mengeksekusi pernyataan import dalam berkas sumber Python lain. Pernyataan import memiliki sintaks berikut −
import module1[, module2[,... moduleN]
Saat interpreter menemukan pernyataan import, ia mengimpor modul jika modul tersebut ada dalam jalur pencarian. Jalur pencarian adalah daftar direktori yang dicari interpreter sebelum mengimpor sebuah modul. Misalnya, untuk mengimpor modul support.py, Anda perlu menempatkan perintah berikut di bagian atas skrip −
#!/usr/bin/python # Impor modul support import support # Sekarang Anda dapat memanggil fungsi yang didefinisikan dalam modul tersebut seperti berikut support.print_func("Zara") Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
Hello : Zara
Sebuah modul dimuat hanya sekali, terlepas dari berapa kali diimpor. Ini mencegah eksekusi modul terjadi berulang-ulang jika beberapa impor terjadi.
Pernyataan from...import
Pernyataan from Python memungkinkan Anda mengimpor atribut tertentu dari sebuah modul ke namespace saat ini. Pernyataan from...import memiliki sintaks berikut −
from modname import name1[, name2[, ... nameN]]
Misalnya, untuk mengimpor fungsi fibonacci dari modul fib, gunakan pernyataan berikut −
from fib import fibonacci
Pernyataan ini tidak mengimpor seluruh modul fib ke namespace saat ini; ia hanya memperkenalkan item fibonacci dari modul fib ke dalam tabel simbol global dari modul yang mengimpor.
Pernyataan from...import *
Sama halnya, Anda dapat mengimpor semua nama dari sebuah modul ke namespace saat ini dengan menggunakan pernyataan impor berikut −
from modname import *
Ini menyediakan cara mudah untuk mengimpor semua item dari sebuah modul ke namespace saat ini; namun, pernyataan ini harus digunakan dengan bijak.
Menemukan Modul
Saat Anda mengimpor sebuah modul, interpreter Python mencari modul tersebut dalam urutan berikut −
Direktori saat ini.
Jika modul tidak ditemukan, Python kemudian mencari setiap direktori dalam variabel shell PYTHONPATH.
Jika semuanya gagal, Python memeriksa jalur default. Pada UNIX, jalur default biasanya /usr/local/lib/python/.
Jalur pencarian modul disimpan dalam modul sistem sys sebagai variabel sys.path. Variabel sys.path berisi direktori saat ini, PYTHONPATH, dan default yang tergantung pada instalasi.
Variabel PYTHONPATH
PYTHONPATH adalah variabel lingkungan yang terdiri dari daftar direktori. Sintaks PYTHONPATH sama dengan variabel shell PATH.
Berikut adalah contoh PYTHONPATH yang umum dari sistem Windows −
set PYTHONPATH = c:\python20\lib;
Dan berikut adalah contoh PYTHONPATH yang umum dari sistem UNIX −
set PYTHONPATH = /usr/local/lib/python
Namespace dan Cakupan Lingkup
Variabel adalah nama (pengidentifikasi) yang memetakan ke objek. Sebuah namespace adalah kamus nama variabel (kunci) dan objek yang sesuai (nilai).
Sebuah pernyataan Python dapat mengakses variabel dalam namespace lokal dan dalam namespace global. Jika variabel lokal dan global memiliki nama yang sama, variabel lokal akan menyelimuti variabel global.
Setiap fungsi memiliki namespace lokal sendiri. Metode kelas mengikuti aturan cakupan lingkup yang sama dengan fungsi biasa.
Python membuat tebakan yang tepat tentang apakah variabel bersifat lokal atau global. Ia mengasumsikan bahwa setiap variabel yang diberi nilai dalam sebuah fungsi adalah lokal.
Oleh karena itu, untuk memberikan nilai pada variabel global dalam sebuah fungsi, Anda harus terlebih dahulu menggunakan pernyataan global.
Pernyataan global VarName memberitahu Python bahwa VarName adalah variabel global. Python berhenti mencari namespace lokal untuk variabel tersebut.
Misalnya, kita mendefinisikan variabel Money dalam namespace global. Dalam fungsi Money, kita memberikan nilai pada Money, oleh karena Python mengasumsikan Money sebagai variabel lokal. Namun, kita mengakses nilai variabel lokal Money sebelum mengaturinya, sehingga UnboundLocalError adalah hasilnya. Menghapus komentar pernyataan global memperbaiki masalahnya.
#!/usr/bin/python Money = 2000 def AddMoney(): # Uncomment the following line to fix the code: # global Money Money = Money + 1 print Money AddMoney() print Money
Fungsi dir()
Fungsi bawaan dir() mengembalikan daftar string yang diurutkan berisi nama yang didefinisikan oleh sebuah modul.
Daftar tersebut berisi nama semua modul, variabel, dan fungsi yang didefinisikan dalam sebuah modul. Berikut adalah contoh sederhana −
Live Demo
#!/usr/bin/python # Impor modul bawaan math import math content = dir(math) print content
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
Di sini, variabel string khusus __name__ adalah nama modul, dan __file__ adalah nama berkas dari mana modul dimuat.
Fungsi globals() dan locals()
Fungsi globals() dan locals() dapat digunakan untuk mengembalikan nama dalam namespace global dan lokal tergantung pada lokasi tempat mereka dipanggil.
Jika locals() dipanggil dari dalam sebuah fungsi, ia akan mengembalikan semua nama yang dapat diakses secara lokal dari fungsi tersebut.
Jika globals() dipanggil dari dalam sebuah fungsi, ia akan mengembalikan semua nama yang dapat diakses secara global dari fungsi tersebut.
Tipe pengembalian kedua fungsi ini adalah kamus. Oleh karena itu, nama dapat diekstrak menggunakan fungsi keys().
Fungsi reload()
Saat sebuah modul diimpor ke dalam skrip, kode di bagian tingkat atas dari sebuah modul dieksekusi hanya sekali.
Oleh karena itu, jika Anda ingin mengeksekusi ulang kode tingkat atas dalam sebuah modul, Anda dapat menggunakan fungsi reload(). Fungsi reload() mengimpor kembali modul yang sebelumnya telah diimpor. Sintaks fungsi reload() adalah sebagai berikut −
reload(module_name)
Di sini, module_name adalah nama modul yang ingin Anda muat ulang dan bukan string yang berisi nama modul. Misalnya, untuk memuat ulang modul hello, lakukan hal berikut −
reload(hello)
Paket dalam Python
Sebuah paket adalah struktur direktori berkas hierarkis yang mendefinisikan satu lingkungan aplikasi Python tunggal yang terdiri dari modul dan subpaket dan sub-subpaket, dan seterusnya.
Pertimbangkan berkas Pots.py yang tersedia dalam direktori Phone. Berkas ini memiliki baris kode sumber berikut −
#!/usr/bin/python def Pots(): print "I'm Pots Phone"
Cara serupa, kita memiliki dua berkas lain yang memiliki fungsi yang berbeda dengan nama yang sama seperti di atas −
Sekarang, buat satu berkas lagi __init__.py dalam direktori Phone −
Untuk membuat semua fungsi Anda tersedia saat Anda telah mengimpor Phone, Anda perlu menempatkan pernyataan impor eksplisit dalam __init__.py sebagai berikut −
from Pots import Pots from Isdn import Isdn from G3 import G3
Setelah Anda menambahkan baris-baris ini ke __init__.py, Anda akan memiliki semua kelas ini tersedia saat Anda mengimpor paket Phone.
#!/usr/bin/python # Sekarang impor Paket Phone Anda. import Phone Phone.Pots() Phone.Isdn() Phone.G3()
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
I'm Pots Phone I'm 3G Phone I'm ISDN Phone
Dalam contoh di atas, kita mengambil contoh satu fungsi dalam setiap berkas, tetapi Anda dapat menyimpan beberapa fungsi dalam berkas Anda. Anda juga dapat mendefinisikan kelas Python yang berbeda dalam berkas-berkas tersebut dan kemudian Anda dapat membuat paket Anda dari kelas-kelas tersebut.