Sử Dụng Module Trong Python

Module trong Python

Trong bài này chúng ta sẽ cùng tìm hiểu module trong ngôn ngữ lập trình Python: module là gì, cách tạo module, cách import, đổi tên module, xem nội dung module và tải lại module.

Khi chương trình còn ngắn, viết hết vào một file cũng được. Nhưng code dài vài nghìn dòng mà để chung một file thì tìm một hàm thôi cũng mệt. Module giúp chia code ra thành nhiều file nhỏ, mỗi file lo một việc, giống như chia đồ đạc vào từng ngăn tủ vậy. Ai đã quen chia file .c/.h trong C thì sẽ thấy ý tưởng tương tự nhé.

Sơ lược về Module trong Python

Module trong Python đơn giản là một file có đuôi .py, bên trong chứa code Python như hàm, biến hoặc lớp (class).

Tại sao cần module? Vì nó giúp chia chương trình thành nhiều phần, mỗi file thực hiện một chức năng riêng. Code gọn hơn, dễ tìm, dễ sửa và dùng lại được cho nhiều dự án khác.

Muốn dùng hàm của module A trong module B, chúng ta dùng từ khóa import. Phần tiếp theo mình sẽ đi qua cách tạo và import module.

Module trong ngôn ngữ lập trình Python
Hình 1. Module trong ngôn ngữ lập trình Python

Làm sao để tạo Module trong Python?

Tạo module rất đơn giản: tạo một file .py, viết các hàm, biến, lớp vào đó. Sau đó ở chương trình chính dùng lệnh import để nạp module vào.

Tạo Module trong Python
Hình 2. Tạo Module trong Python

Ví dụ, tạo một module tên math_utils.py chứa các phép tính với hai số:

# math_utils.py

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y

def divide(x, y):
    if y == 0:
        raise ValueError("Cannot divide by zero!")
    return x / y

Tiếp theo, tạo file main.py nằm cùng thư mục và import module math_utils vào:

# main.py

import math_utils

result = math_utils.add(3, 5)
print(result) # output: 8

result = math_utils.divide(10, 2)
print(result) # output: 5.0

Khi gặp lệnh import, Python sẽ tìm file math_utils.py trong thư mục chứa file đang chạy, sau đó tới các thư mục trong biến sys.path (nơi cài các thư viện).

Lưu ý: Không đặt tên file của bạn trùng với module có sẵn của Python, ví dụ math.py, random.py, string.py. Khi đó import math sẽ nạp nhầm file của bạn thay vì module chuẩn, và báo lỗi kiểu “module ‘math’ has no attribute ‘sqrt'” rất khó hiểu.

Thế nào là lệnh ‘import’ trong Python?

Lệnh import dùng để nạp một module khác vào chương trình, sau đó bạn dùng được các hàm, lớp, biến đã định nghĩa trong module đó.

Cách ‘Import’ module trong Python
Hình 3. Cách ‘Import’ module trong Python

Ví dụ: dùng module math có sẵn của Python:

import math

print(math.pi) # output: 3.141592653589793
print(math.sqrt(25)) # output: 5.0

Có thể đặt tên ngắn gọn hơn cho module khi import bằng as. Cách này vừa đỡ gõ, vừa tránh trùng tên trong chương trình:

import math as m

print(m.pi) # output: 3.141592653589793
print(m.sqrt(25)) # output: 5.0

Nếu chỉ cần một vài thành phần trong module, dùng from ... import. Khi đó gọi thẳng tên hàm mà không cần ghi tên module phía trước:

from math import pi, sqrt

print(pi) # output: 3.141592653589793
print(sqrt(25)) # output: 5.0

Muốn import tất cả thành phần trong module thì dùng dấu *. Tuy nhiên mình không khuyến khích cách này vì đọc code sẽ không biết hàm nào đến từ module nào, và dễ bị đè tên với biến của bạn.

from math import *

print(pi) # output: 3.141592653589793
print(sqrt(25)) # output: 5.0

Dùng ‘As’ để đổi tên module trong Python

Từ khóa as dùng để đặt tên khác cho module khi import. Thường dùng khi tên module quá dài, hoặc bị trùng với tên hàm, biến khác trong dự án. Bạn sẽ gặp rất nhiều kiểu import numpy as np hay import pandas as pd ở các bài sau.

Ví dụ đổi tên module math thành m:

import math as m

print(m.pi) # output: 3.141592653589793
print(m.sqrt(25)) # output: 5.0

as không chỉ dùng cho module mà còn đổi tên được từng hàm, biến khi import:

from math import pi as PI, sqrt as square_root

print(PI) # output: 3.141592653589793
print(square_root(25)) # output: 5.0

Ở đây pi được đổi thành PI, sqrt được đổi thành square_root. Trong chương trình bạn dùng tên mới, không cần dùng tên gốc nữa.

Làm thế nào để xem thuộc tính và phương thức trong module?

Hàm dir() trả về danh sách tên của tất cả thuộc tính và phương thức có trong một đối tượng, bao gồm cả module.

Ví dụ: xem trong module math có những gì:

import math

print(dir(math))

Kết quả là một list các chuỗi, mỗi chuỗi là tên một hàm hoặc hằng số trong module math, ví dụ 'sqrt', 'pi', 'sin'…

Biết tên rồi mà chưa biết cách dùng thì gọi thêm hàm help():

import math

print(dir(math))

# Xem thông tin về phương thức sqrt
help(math.sqrt)

help() sẽ in ra mô tả hàm sqrt, tham số cần truyền vào và giá trị trả về. Đây là cách tra cứu nhanh nhất mà không cần mở Google.

Cách tải lại module với hàm reload

Python chỉ nạp mỗi module một lần. Nếu bạn đang chạy trình thông dịch, import một module rồi sửa file của module đó, thì gọi import lần nữa cũng không có tác dụng. Lúc này cần dùng hàm reload() trong module importlib để nạp lại.

Đầu tiên, tạo module my_module.py:

# my_module.py

def hello():
    print("Hello, world!")

Trong trình thông dịch, import module rồi gọi hàm hello():

import my_module

my_module.hello() # output: Hello, world!

Bây giờ, không tắt trình thông dịch, mở file my_module.py và thêm một dòng vào hàm hello():

# my_module.py

def hello():
    print("Hello, world!")
    print("How are you today?")

Quay lại trình thông dịch, dùng reload() để nạp lại module rồi gọi lại hàm:

from importlib import reload

reload(my_module)
my_module.hello()

Kết quả lúc này đã có thêm dòng mới:

Hello, world!
How are you today?

Lưu ý: reload() chỉ nạp lại đúng module đó. Những biến đã import theo kiểu from my_module import hello trước đó vẫn trỏ tới hàm cũ, gọi hello() vẫn ra kết quả cũ. Trong dự án thật, cách chắc chắn nhất vẫn là tắt chương trình đi chạy lại.

Làm thế nào để xem những module có sẵn trong Python?

Module sys cung cấp các biến và hàm để làm việc với trình thông dịch Python. Trong đó sys.modules là một dictionary chứa tất cả module đã được nạp vào chương trình đang chạy.

Ví dụ:

import sys

# Lấy danh sách các module đã được nhập vào trong chương trình
print(sys.modules.keys())

Kết quả là danh sách tên các module đang được nạp. Bạn sẽ thấy khá nhiều module dù mới chỉ import mỗi sys, vì bản thân Python đã nạp sẵn một số module lúc khởi động.

Còn muốn xem toàn bộ module chuẩn có sẵn khi cài Python thì cách nhanh nhất là vào trang tài liệu chính thức của Python (docs.python.org), mục Library Reference. Ở đó có mô tả đầy đủ từng module và cách dùng.

Kết

Module giúp chia chương trình ra nhiều file, mỗi file một chức năng, code dễ đọc và dùng lại được. Các bạn nhớ 3 cách import chính: import module, import module as ten_khac, và from module import ham.

Nếu thấy bài viết này hay, hãy chia sẻ tới những người bạn đang học Python nhé. Bài tiếp theo chúng ta sẽ học cách đọc và ghi file.

Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *