Skip to content

บทที่ 3.3: โมดูลและแพ็กเกจ (Modules & Packages)

เอกสารนี้อธิบายเกี่ยวกับการแบ่งโครงสร้างโค้ดด้วยโมดูล (Module) การจัดหมวดหมู่ด้วยแพ็กเกจ (Package) การนำเข้าไลบรารีมาตรฐาน (Standard Library) และการใช้งาน if __name__ == "__main__":


1. โมดูลและการนำเข้า (Modules & Importing)

โมดูล (Module) ใน Python คือไฟล์ที่มีนามสกุล .py ซึ่งบรรจุโค้ด ตัวแปร ฟังก์ชัน หรือคลาส เพื่อนำมาใช้งานซ้ำในไฟล์อื่น

1.1 รูปแบบการนำเข้า (Import Statements)

# 1. นำเข้าทั้งโมดูล
import math
print(math.sqrt(16))  # Output: 4.0

# 2. นำเข้าเฉพาะฟังก์ชัน หรือคลาสที่ต้องการ
from math import pi, pow
print(pi)             # Output: 3.141592653589793

# 3. การตั้งชื่อนามแฝง (Alias) ด้วย as
import math as m
print(m.floor(3.9))   # Output: 3

from math import factorial as fact
print(fact(5))        # Output: 120

2. โมดูลมาตรฐานที่สำคัญ (Built-in Standard Library)

Python มาพร้อมกับไลบรารีพื้นฐานจำนวนมากที่สามารถเรียกใช้งานได้ทันทีโดยไม่ต้องติดตั้งเพิ่ม:

import os
import sys
import random
import datetime

# os: การจัดการระบบปฏิบัติการและไฟล์
current_dir = os.getcwd()

# sys: ข้อมูลตัวแปลภาษาและสภาพแวดล้อมระบบ
python_version = sys.version

# random: การสุ่มข้อมูล
random_num = random.randint(1, 100)
chosen_item = random.choice(["apple", "banana", "cherry"])

# datetime: การจัดการวันเวลา
now = datetime.datetime.now()
formatted_now = now.strftime("%Y-%m-%d %H:%M:%S")

3. การสร้างโมดูลและแพ็กเกจของตนเอง (Custom Modules & Packages)

3.1 การสร้าง Custom Module

สร้างไฟล์ชื่อ my_math.py:

# my_math.py
def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

นำไปใช้งานในไฟล์ main.py:

# main.py
import my_math

result = my_math.add(5, 3)
print(result)  # Output: 8

3.2 การสร้าง Custom Package

แพ็กเกจ คือโฟลเดอร์ที่รวบรวมโมดูลหลายๆ ไฟล์ไว้ด้วยกัน โดยภายในโฟลเดอร์ควรมีไฟล์ __init__.py เพื่อระบุขอบเขตการนำเข้า

โครงสร้างไดเรกทอรี:

my_project/
│── my_package/
│   ├── __init__.py
│   ├── calculator.py
│   └── formatter.py
└── main.py

การนำไปใช้งานใน main.py:

# เรียกใช้งานจากแพ็กเกจ
from my_package.calculator import add
from my_package import formatter

4. โครงสร้าง if __name__ == "__main__":

ใช้สำหรับระบุว่า บล็อกโค้ดนี้จะทำงานเมื่อไฟล์นี้ถูกสั่งรันโดยตรงเท่านั้น และจะไม่ทำงานเมื่อไฟล์นี้ถูกนำเข้า (import) ไปใช้งานในไฟล์อื่น

# my_module.py

def do_something():
    print("กำลังทำงาน...")

# บล็อกนี้จะรันเฉพาะตอนเรียก 'python my_module.py' ตรงๆ
if __name__ == "__main__":
    print("ทดสอบโมดูลแบบสแตนด์อโลน")
    do_something()