Modul Python
Mengorganisir kode dengan modul dan menggunakan library Python
Apa itu Modul?
Modul Python adalah file yang berisi definisi dan pernyataan Python. Modul memungkinkan Kalian untuk mengorganisir kode dalam file terpisah yang dapat digunakan kembali di berbagai program.
Why Use Modules?
Keuntungan menggunakan modul:
- Reusability - Code dapat digunakan di banyak program
- Organization - Memecah program besar jadi file-file kecil
- Maintainability - Lebih mudah maintain dan debug
- Namespace - Menghindari konflik nama variable/function
Membuat Modul Sendiri
Mari membuat modul Python sederhana untuk operasi matematika.
Buat File Modul
Buat file baru dengan nama my_module.py:
"""
Modul matematika sederhana untuk praktikum Python.
"""
# Variabel/konstanta dalam modul
PI = 3.14159
E = 2.71828
# Fungsi untuk menghitung luas lingkaran
def hitung_luas_lingkaran(radius):
"""Menghitung luas lingkaran."""
return PI * radius * radius
# Fungsi untuk menghitung keliling lingkaran
def hitung_keliling_lingkaran(radius):
"""Menghitung keliling lingkaran."""
return 2 * PI * radius
# Fungsi untuk konversi suhu
def celsius_ke_fahrenheit(celsius):
"""Konversi Celsius ke Fahrenheit."""
return (celsius * 9/5) + 32
def fahrenheit_ke_celsius(fahrenheit):
"""Konversi Fahrenheit ke Celsius."""
return (fahrenheit - 32) * 5/9
def celsius_ke_kelvin(celsius):
"""Konversi Celsius ke Kelvin."""
return celsius + 273.15
# Fungsi luas persegi
def luas_persegi(sisi):
"""Menghitung luas persegi."""
return sisi * sisi
# Fungsi luas persegi panjang
def luas_persegi_panjang(panjang, lebar):
"""Menghitung luas persegi panjang."""
return panjang * lebarModule File
File modul harus berekstensi .py dan nama file akan menjadi nama modul. Hindari spasi dan karakter khusus dalam nama file.
Gunakan Modul
Buat file baru main.py di direktori yang sama:
# Import seluruh modul
import my_module
# Menggunakan variabel dari modul
print(f"Nilai Pi: {my_module.PI}")
print(f"Nilai E: {my_module.E}")
# Menggunakan fungsi dari modul
radius = 5
luas = my_module.hitung_luas_lingkaran(radius)
keliling = my_module.hitung_keliling_lingkaran(radius)
print(f"\nLingkaran dengan radius {radius}:")
print(f"Luas: {luas:.2f}")
print(f"Keliling: {keliling:.2f}")
# Konversi suhu
celsius = 25
fahrenheit = my_module.celsius_ke_fahrenheit(celsius)
kelvin = my_module.celsius_ke_kelvin(celsius)
print(f"\n{celsius}°C = {fahrenheit:.2f}°F")
print(f"{celsius}°C = {kelvin:.2f}K")Jalankan Program
python main.pyOutput:
Nilai Pi: 3.14159
Nilai E: 2.71828
Lingkaran dengan radius 5:
Luas: 78.54
Keliling: 31.42
25°C = 77.00°F
25°C = 298.15KCara Import Modul
Python menyediakan beberapa cara untuk mengimport modul:
# Import seluruh modul
import my_module
# Akses dengan module_name.item
print(my_module.PI)
luas = my_module.luas_persegi(5)
# Keuntungan: Jelas dari mana function berasal
# Kekurangan: Harus ketik nama modul setiap kali# Import item tertentu saja
from my_module import PI, hitung_luas_lingkaran
# Akses langsung tanpa nama modul
print(PI)
luas = hitung_luas_lingkaran(5)
# Import multiple items
from my_module import (
celsius_ke_fahrenheit,
fahrenheit_ke_celsius,
celsius_ke_kelvin
)
# Keuntungan: Lebih singkat
# Kekurangan: Kurang jelas asal item# Import dengan alias
import my_module as mm
print(mm.PI)
luas = mm.luas_persegi(5)
# Import function dengan alias
from my_module import hitung_luas_lingkaran as hitung_luas
luas = hitung_luas(5)
# Berguna untuk:
# - Nama modul panjang
# - Menghindari konflik nama
# - Convenience# Import semua (TIDAK DISARANKAN!)
from my_module import *
# Akses langsung semua item
print(PI)
luas = luas_persegi(5)
# Masalah:
# - Tidak jelas mana yang dari modul
# - Bisa overwrite variable existing
# - Code kurang readable
# - Hindari penggunaan ini!Best Practice Import
Recommended:
import my_module # Jelas dan eksplisit
from my_module import specific_function # OK untuk beberapa items
import my_module as mm # OK dengan alias yang jelasNot Recommended:
from my_module import * # Hindari ini!Module Search Path
Python mencari modul di beberapa lokasi:
import sys
# Lihat semua path yang dicari Python
for path in sys.path:
print(path)
# Urutan pencarian:
# 1. Direktori current script
# 2. PYTHONPATH environment variable
# 3. Installation-dependent default pathsModul Built-in Python
Python memiliki banyak modul bawaan yang sangat berguna:
Module math
import math
# Konstanta
print(f"Pi: {math.pi}")
print(f"E: {math.e}")
# Fungsi matematika
print(f"sqrt(16): {math.sqrt(16)}")
print(f"ceil(4.3): {math.ceil(4.3)}")
print(f"floor(4.7): {math.floor(4.7)}")
print(f"pow(2, 3): {math.pow(2, 3)}")
print(f"factorial(5): {math.factorial(5)}")
# Trigonometri
print(f"sin(π/2): {math.sin(math.pi/2)}")
print(f"cos(0): {math.cos(0)}")
print(f"tan(π/4): {math.tan(math.pi/4)}")
# Logaritma
print(f"log(100, 10): {math.log(100, 10)}")
print(f"log10(1000): {math.log10(1000)}")
print(f"log2(8): {math.log2(8)}")Module random
import random
# Random integer
print(f"Random int 1-10: {random.randint(1, 10)}")
print(f"Random int 1-100: {random.randrange(1, 101, 2)}") # Ganjil
# Random float
print(f"Random float 0-1: {random.random()}")
print(f"Random float 1-10: {random.uniform(1, 10)}")
# Random choice
buah = ["Apel", "Jeruk", "Mangga", "Pisang"]
print(f"Random buah: {random.choice(buah)}")
# Random sample (multiple items tanpa repeat)
sample = random.sample(buah, 2)
print(f"Sample 2 buah: {sample}")
# Shuffle list (in-place)
angka = [1, 2, 3, 4, 5]
random.shuffle(angka)
print(f"Shuffled: {angka}")
# Set seed untuk reproducible results
random.seed(42)
print(random.random()) # Selalu sama dengan seed 42Module datetime
import datetime
# Current date and time
now = datetime.datetime.now()
print(f"Now: {now}")
print(f"Date: {now.date()}")
print(f"Time: {now.time()}")
# Components
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
# Create specific date
lahir = datetime.date(2000, 5, 15)
print(f"Tanggal lahir: {lahir}")
# Date arithmetic
today = datetime.date.today()
umur_hari = (today - lahir).days
umur_tahun = umur_hari // 365
print(f"Umur: {umur_tahun} tahun")
# Format date
formatted = now.strftime("%d/%m/%Y %H:%M:%S")
print(f"Formatted: {formatted}")
# Parse string to date
date_str = "2025-12-31"
date_obj = datetime.datetime.strptime(date_str, "%Y-%m-%d")
print(f"Parsed: {date_obj}")Module os
import os
# Current working directory
print(f"CWD: {os.getcwd()}")
# List files/folders
print(f"Files: {os.listdir('.')[:5]}") # First 5
# Check existence
print(f"File exists: {os.path.exists('my_module.py')}")
print(f"Is file: {os.path.isfile('my_module.py')}")
print(f"Is directory: {os.path.isdir('.')}")
# Path operations
filepath = "/home/user/documents/file.txt"
print(f"Dirname: {os.path.dirname(filepath)}")
print(f"Basename: {os.path.basename(filepath)}")
print(f"Split: {os.path.split(filepath)}")
print(f"Splitext: {os.path.splitext(filepath)}")
# Join paths (OS-independent)
path = os.path.join("folder", "subfolder", "file.txt")
print(f"Joined path: {path}")
# Environment variables
print(f"PATH: {os.environ.get('PATH', 'Not found')[:50]}...")Module sys
import sys
# Python version
print(f"Python version: {sys.version}")
# Platform
print(f"Platform: {sys.platform}")
# Command line arguments
print(f"Script name: {sys.argv[0]}")
print(f"Arguments: {sys.argv[1:]}")
# Exit program
# sys.exit("Program terminated")
# Module search path
print(f"Module paths: {sys.path[:3]}")Package (Kumpulan Modul)
Package adalah cara untuk mengorganisir banyak modul dalam direktori.
Struktur Package
my_package/
__init__.py
geometry.py
temperature.py
utils.pyBuat File-file Package
"""Modul untuk operasi geometri."""
PI = 3.14159
def luas_lingkaran(radius):
return PI * radius ** 2
def luas_persegi(sisi):
return sisi ** 2
def luas_segitiga(alas, tinggi):
return 0.5 * alas * tinggi"""Modul untuk konversi suhu."""
def celsius_to_fahrenheit(c):
return (c * 9/5) + 32
def fahrenheit_to_celsius(f):
return (f - 32) * 5/9
def celsius_to_kelvin(c):
return c + 273.15"""
My Package - Collection of utility modules.
"""
from .geometry import luas_lingkaran, luas_persegi
from .temperature import celsius_to_fahrenheit
__version__ = "1.0.0"
__all__ = ["luas_lingkaran", "luas_persegi", "celsius_to_fahrenheit"]__init__.py
File __init__.py membuat direktori menjadi package. File ini bisa kosong atau berisi initialization code untuk package.
Gunakan Package
# Import dari package
from my_package import luas_lingkaran, celsius_to_fahrenheit
# Atau import module dalam package
from my_package.geometry import luas_segitiga
from my_package.temperature import celsius_to_kelvin
# Gunakan functions
print(luas_lingkaran(5))
print(celsius_to_fahrenheit(25))
print(luas_segitiga(10, 5))
print(celsius_to_kelvin(0))Module Attributes
Setiap modul memiliki beberapa attribute built-in:
import my_module
# Nama modul
print(my_module.__name__)
# Docstring modul
print(my_module.__doc__)
# File path modul
print(my_module.__file__)
# List semua attributes dalam modul
print(dir(my_module))
# Check if module is main program
if __name__ == "__main__":
print("This is the main program")if __name__ == "__main__"
Pattern penting untuk membuat modul yang bisa diimport atau dijalankan langsung:
"""Modul contoh dengan main block."""
def greet(name):
return f"Hello, {name}!"
def main():
"""Function yang dijalankan jika module dirun langsung."""
print("Running as main program")
print(greet("Python"))
print(greet("World"))
# Hanya dijalankan jika module dirun langsung,
# tidak saat di-import
if __name__ == "__main__":
main()__name__ Explained
- Saat module dirun langsung:
__name__ == "__main__" - Saat module di-import:
__name__ == "module_name"
Ini memungkinkan Kalian menulis test code atau demo di dalam module yang tidak akan dijalankan saat module di-import.
Installing External Packages
Python memiliki ribuan external packages yang bisa diinstall dengan pip:
# Install package
pip install requests
pip install pandas
pip install numpy
# Install specific version
pip install requests==2.28.0
# Upgrade package
pip install --upgrade requests
# Uninstall
pip uninstall requests
# List installed packages
pip list
# Show package info
pip show requests
# Requirements file
pip freeze > requirements.txt
pip install -r requirements.txtContoh Penggunaan External Package
# Install first: pip install requests
import requests
# HTTP GET request
response = requests.get("https://api.github.com")
if response.status_code == 200:
data = response.json()
print(f"Response: {data}")
else:
print(f"Error: {response.status_code}")
# POST request
payload = {"key": "value"}
response = requests.post("https://httpbin.org/post", json=payload)
print(response.json())Best Practices
Module Best Practices
- One Module, One Purpose - Setiap modul fokus pada satu hal
- Clear Names - Gunakan nama yang deskriptif
- Documentation - Tambahkan docstring di awal module
- Avoid
import *- Import specific items atau seluruh module if __name__ == "__main__"- Untuk test/demo code- Organize Imports - Standard library → Third-party → Local
- Virtual Environments - Gunakan venv untuk isolasi dependencies
Latihan
-
Buat modul
math_operations.pydengan fungsi untuk:- Luas dan keliling berbagai bentuk geometri
- Konversi satuan (panjang, berat, volume)
- Operasi statistik sederhana (mean, median, mode)
-
Buat modul
string_utils.pydengan fungsi untuk:- Capitalize first letter of each word
- Count word frequency
- Reverse string
- Check palindrome
-
Buat package sederhana dengan multiple modules
-
Explore modul
datetimedan buat program untuk:- Menghitung umur dalam tahun, bulan, hari
- Countdown ke tanggal tertentu
- Schedule reminder
-
Practice dengan modul
random:- Random password generator
- Dice simulator
- Card deck shuffler
