Bài 17: Modules trong Python - Lập trình Python cơ bản

Đăng bởi: Admin | Lượt xem: 2685 | Chuyên mục: Python


Modules là cách mà chúng ta phân hóa chương trình ra các nhánh nhỏ cho dễ quản lý và gọi lại chúng khi nào cần, như thế chương trình của chúng ta sẽ có tính tái sử dụng, bảo trì cao.

1. Modules trong Python

Import: Để import một module có vào trong file hiện tại thì mọi người sử dụng từ khóa import với cú pháp như sau:
import module1, module2,...
Trong đó: module1, module2,... là các modules mà các bạn muốn import vào file hiện tại.
Để xem danh sách các module mặc định của python mọi người click vào đây.
VD: Mình sẽ import models math và gọi thử một số phương thức trong module math (xem danh sách các phương thức).
import math
a = 3.2
# làm tròn lên 1 số
print(math.ceil(a)) # 4
# làm tròn xuống 1 số
print(math.floor(a)) # 3
from import: Giả sử trong một trường hợp nào đó khi bạn không muốn sử dụng hết toàn bộ module mà chỉ muốn sử dụng một số thứ trong đó mà thôi thì sẽ phải làm sao? Trong trường hợp này chúng ta sử dụng từ khóa from...import theo cú pháp như sau:
from modules import something, something2,...
Trong đó:
  1. modules là tên của module mà các bạn muốn import.
  2. something1,somthing2,... là những thứ mà các bạn muốn sử dụng ở trong modules. Nếu như bạn muốn import tất cả những gì trong modules có và cho phép thì bạn sử dụng keyword *.
VD: Mình sẽ import mỗi phương thức ceil ở trong module math.
from math import ceil
a = 3.2

print(ceil(a)) 
# kết quả: 4

print(floor(a))
# Kết quả:  name 'floor' is not defined
VD: Mình sẽ import tất cả mọi thứ được cho phép từ module math.
from math import *
a = 3.2

print(ceil(a)) 
# kết quả: 4

print(floor(a))
# Kết quả: 3
Build modules: Ngoài sử dụng các module có sẵn trong python ra thì chúng ta cũng có thể viết ra các module của riêng mình và import nó khi muốn sử dụng.
VD: Mình sẽ hướng dẫn mọi người build một module đơn giản.
Đầu tiên các bạn tạo cho mình 2 file main.py và math_plus.py ở cùng cấp thư mục.
Bây giờ mọi người mở file mathplus.py lên và viết cho mình hàm get_sum - tính tổng 2 số nguyên bất kỳ do người dùng truyền vào.
Ai lười thì copy nhé!
# file math.py
def get_sum (a, b):
    return a + b
Tiếp đó khi bạn muốn sử dụng được hàm get_sum này trong file main.py thì chúng ta chỉ cần import nó vào và sử dụng thôi.
import mathplus

print(mathplus.get_sum(4,7))
# Kết quả: 11
Chú ý: Tên file chứa code chúng ta muốn import chính là tên modules.
Tương tự với trường hợp from-import thì mọi người tự làm nhé!
Định danh cho modules: Nếu như trong trường hợp modules của chúng ta rất khó nhớ hay dài hay vì một lý do nào khác mà bạn không muốn gọi module như thế thì với Python bạn cũng có thể gán định danh mới cho modules khi import chúng bằng cách sử dụng keyword as. với cú pháp như sau:
import modules as newname
# hoặc đối với from import
from modules import something as newname
Trong đó:
  1. modules là các modules mà chúng ta muốn import.
  2. newname là định danh mới cho module đó.
VD: Mình sẽ import mathplus modules và gán định danh cho nó thành ma.
import mathplus as ma

print(ma.get_sum(4,7))
# Kết quả: 11
Nếu như các bạn sử dụng cú pháp from ... import thì cũng dùng tương tự.
from mathplus import get_sum as sum

print(sum(4,7))
# Kết quả: 11

2. Chú ý

Đối với trường hợp các bạn sử dụng from ... import * thì mặc định python nó sẽ không import được các đối tượng có tên được bắt đầu bằng ký tự _ . Trong trường hợp này, nếu như bạn muốn import được các đối tượng đó thì bạn sẽ phải chỉ đích danh các đối tượng đó.
VD: Bây giờ mình sẽ đổi tên của phương thức get_sum trong mathply.py thành _get_sum().
# file mathplus.py
def _get_sum (a, b):
    return a + b
Bây giờ ở trong file main mình sẽ import mathplus theo cách dùng ký tự *.
from mathplus import *

print(_get_sum(5,7)) 
# kết quả: name '_get_sum' is not defined
Như các bạn đã thấy nó đã báo lỗi là _get_sum() chưa được định nghĩa. Bây giờ chúng ta chuyển sang import đích danh _get_sum xem sao nhé.
from mathplus import _get_sum

print(_get_sum(5,7)) 
# kết quả: 12
Như các bạn thấy đó, nó đã ok.

3. Import module trong thư mục

Cũng với ví dụ về module mathplus ở phía trên, bây giờ bạn tạo thêm 1 thư mục có tên là modules hoặc tên bất kỳ và copy file mathplus.py vào thư mục đó. Lúc này cấu trúc thư mục sẽ thành như sau:
| modules/mathplus.py
| main.py
Và bạn thử import module mathplus vào trong main như cũ xem nó có chạy không? Chắc chắn là không chạy và nó sẽ trả về lỗi là "module mathplus chưa được đặt tên". Điều này xảy ra là do chúng ta chưa thiết lập thư mục load modules cho python hiểu.
Mặc định thì python nó sẽ chỉ load các module hệ thống của nó và các module ở cùng cấp với file hiện tại. Nếu như bạn muốn chỉ cho python biết là nó cần load module ở những thư mục nào nữa thì bạn phải cấu hình ở trong sys.path và để thêm thư mục cần load thì bạn sử dụng phương thức append() ở trong module sys.path.
VD: Mình sẽ báo có python biết là phải load thêm thư mục modules ở trong project hiện tại, và đồng thời mình sẽ import luôn thư mục mathplus.py.
import os, sys
# lấy ra đường dẫn đến thư mục modules ở trong projetc hiện hành
lib_path = os.path.abspath(os.path.join('modules'))
# thêm thư mục cần load vào trong hệ thống
sys.path.append(lib_path)
# import
from mathplus import get_sum

print(get_sum(1,4));
# kết quả: 5
Như vậy, thông qua bài học này, chúng ta đã cũng nhau tìm hiểu về modules trong Python. Cảm ơn các bạn đã đọc.
Bài tiếp theo: Exception trong Python >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!