Module trong Python

Module (mô-đun) là một file chứa code hoặc một function (hàm) và có thể đễ dàng đưa vào ứng dụng của bạn. Khi một chương trình của bạn khá lớn, lúc này bạn phải chia nhỏ chương trình của mình ra thành nhiều nhánh nhỏ để cho tiện việc quản lý cũng như gọi lại chúng khi cần. Trong phần này, bạn sẽ tìm hiểu làm thế nào để tạo ra một module trong python, cách sử dụng cũng như biết được một số module có sẵn của ngôn ngữ python.

Tạo một Module

Để tạo một module trong python, chúng ta viết code trong một file python và lưu với phần mở rộng là .py Ví dụ tạo một tệp có tên mymodule.py (trong đó: mymodule tên, .py là phần mở rộng) bên trong thư mục dự án của bạn như sau:

def generate_full_name(firstname, lastname):
    space = ' '
    fullname = firstname + space + lastname
    return fullname

Tiếp theo, bạn sẽ tạo tệp có tên main.py trong thư mục dự án của bạn và import file mymodule.py

Import một Module

Để import một module trong python, chúng ta chỉ sử dụng từ khóa import và tên của tệp. Vậy ta viết code của file main.py như sau:

# main.py file
import mymodule
print(mymodule.generate_full_name('Chanh', 'Phan Nhat'))

Import Function từ một Module

Chúng ta có thể có nhiều hàm trong một file module và chúng ta có thể nhập tất cả các hàm theo nhiều cách khác nhau.

# main.py file
from mymodule import generate_full_name, sum_two_nums, person, gravity
print(generate_full_name('Chanh','Phan Nhat'))
print(sum_two_nums(1,9))
mass = 100;
weight = mass * gravity # trọng lượng = khối lượng * trọng lực
print(weight)
print(person['firstname'])

Đổi tên Module khi Import

Khi Import một module, chúng ta có thể đổi tên tên của nó bằng cách sử dụng as

# main.py file
from mymodule import generate_full_name as fullname, sum_two_nums as total, person as p, gravity as g
print(fullname('Chanh','Phan Nhat'))
print(total(1,9))
mass = 100;
weight = mass * g
print(weight)
print(p)
print(p['firstname'])

Một số Module tích hợp sẵn

Giống như các ngôn ngữ lập trình khác, chúng ta cũng có thể import các mô-đun bằng cách nhập tên tệp/hàm bằng cách sử dụng từ khóa import. Một số module sữ dụng phổ biến đã được tích hợp sẵn trong python như: math, datetime, os, sys, random, statistics, collections, json, re

OS Module

Module OS có thể tự động thực hiện nhiều chức năng tương tác với hệ điều hành. Module OS trong Python cung cấp các chức năng để tạo, thay đổi thư mục làm việc hiện tại và xóa thư mục, đọc file,...

# import module
import os

# Tạo một thư mục
os.mkdir('directory_name')

# Thay đổi thư mục hiện tại
os.chdir('path')

# Lấy thư mục làm việc hiện tại
os.getcwd()

# Xóa thư mục
os.rmdir()

Sys Module

Module sys cung cấp các hàm và biến được sử dụng để thao tác các phần khác nhau của môi trường thời gian chạy Python. Hàm sys.argv trả về danh sách các đối số dòng lệnh được truyền cho tập lệnh Python. Đối số (argument) thứ 0 (argv[0]) trong danh sách (list) này luôn là tên của một tệp tin, đối số thứ 1 (argv1) là đối số được truyền vào từ dòng lệnh.

Ví dụ bạn sẽ tạo một file có tên script.py như sau:

import sys
#print(sys.argv[0], argv[1], sys.argv[2])  # dòng này sẽ in ra: filename argument1 argument2
print('Welcome {}. Enjoy {} challenge!'.format(sys.argv[1], sys.argv[2]))

Bây giờ để kiểm tra cách hoạt động của file script.py bằng cách mở terminal và chạy lệnh sau và truyền các đối số cho nó:

python script.py Chanh PythonBasic

Kết quả ta thu được sẽ là:

Welcome Chanh. Enjoy PythonBasic challenge! 

Một số lệnh của thư viên sys hữu ích:

# Thoát khỏi hệ thống
sys.exit()

# Biết biến số nguyên lớn nhất
sys.maxsize

# Biết đường dẫn môi trường làm việc
sys.path

# Phiên bản python bạn đang sử dụng
sys.version

Statistics Module

Module Statistics cung cấp một số functions để thống kê dữ liệu dạng số. Một số hàm phổ biến của statistics được xác định trong module này là: mean, median, mode, stdev,...

from statistics import * # import statistics modules
ages = [20,20,24,24,25,22,26,20,23,22,26]
print(mean(ages))       # 22.90909090909091
print(median(ages))     # 23
print(mode(ages))       # 20
print(stdev(ages))      # 2.3001976199685736

Math Module

Module chứa nhiều phép toán (mathematical) và hằng số (constants).

import math
print(math.pi)           # 3.141592653589793, hằng số Pi
print(math.sqrt(2))      # 1.4142135623730951, căn bậc hai
print(math.pow(2, 3))    # 8.0, Lũy thừa
print(math.floor(9.81))  # 9, Hàm làm tròn thấp nhất
print(math.ceil(9.81))   # 10, Hàm làm tròn cao nhất
print(math.log10(100))   # 2.0, logarit cơ số 10

Bây giờ, chúng ta sẽ import module toán học để thực hiện các phép tính. Để kiểm tra các hàm có sẵn trong module, bạn có thể sử dụng help(math) hoặc dir(math). Nếu bạn chỉ muốn nhập một hàm cụ thể để sử dụng từ module, bạn sẽ import theo cấu trúc như sau:

from math import pi
print(pi)

Hặc bạn cũng có thể import nhiều hàm cùng một lúc bằng cách:

from math import pi, sqrt, pow, floor, ceil, log10
print(pi)                 # 3.141592653589793
print(sqrt(2))            # 1.4142135623730951
print(pow(2, 3))          # 8.0
print(floor(9.81))        # 9
print(ceil(9.81))         # 10
print(math.log10(100))    # 2

Nhưng nếu bạn muốn nhập tất cả các hàm có sẵn trong module, bạn có thể sử dụng dấu * với cú pháp như sau:

from math import *
print(math.pi)           # 3.141592653589793, hằng số Pi
print(math.sqrt(2))      # 1.4142135623730951, căn bậc hai
print(math.pow(2, 3))    # 8.0, Lũy thừa
print(math.floor(9.81))  # 9, Hàm làm tròn thấp nhất
print(math.ceil(9.81))   # 10, Hàm làm tròn cao nhất
print(math.log10(100))   # 2.0, logarit cơ số 10

Khi import chúng ta cũng có thể đổi tên hàm bằng cách sử dụng as như sau:

from math import pi as  PI
print(PI) # 3.141592653589793

String Module

Một Module hữu ích có thể sử dụng cho nhiều mục đích khác nhau. Dưới đây là một ví dụ để lấy các ký tự (chuỗi) đặt biệt mà chúng ta có thể lấy từ module string như sau:

import string
print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
print(string.digits)        # 0123456789
print(string.punctuation)   # !"#$%&'()*+,-./:;<=>[email protected][\]^_`{|}~

Random Module

Nãy giờ bạn đã quen với việc import các module tự tạo hoặc có sẵn. Hãy thực hiện thêm một lần import nữa để làm quen với nó. Hãy import một module có tên ramdom (ngẫu nhiên) và in ra một số ngẫu nhiên từ 0 đến 0,9999. Có rất nhiều hàm trong module ramdom nhưng trong phần này chúng ta sẽ chỉ sử dụng randomrandint.

from random import random, randint
print(random())       # không có bất kỳ đối số nào; nó trả về giá trị từ 0 đến 0,9999
print(randint(5, 20)) # trả về một số nguyên ngẫu nhiên từ 5 đến 20

Bài tập

  1. Viết một hàm có tên random_user_id để tạo ra 6 ký tự (vừa số, vừa chữ).
print(random_user_id()) # 1ee33d
  1. Khai báo một hàm có tên user_id_gen_by_user và không truyền tham số cho nó. Nhập 2 giá trị từ bàn phím input() và xuất ra một chuỗi ngẫu nhiên. Ví dụ:
ser_id_gen_by_user()
# Nhập: 5 5 
# Xuất: #kcsy2 #SMFYb #bWmeq #ZXOYh #2Rgxf

user_id_gen_by_user() 
# Nhập: 16 5 
# Xuất: #1GCSgPLMaBAVQZ26 #YD7eFwNQKNs7qXaT #ycArC5yrRupyG00S #UbGxOFI7UXSWAyKN #dIV0SSUTgAdKwStr
  1. Viết một hàm có tên rgb_color_gen. Nó sẽ tạo ra các màu RGB (3 giá trị từ 0 đến 255 cho mỗi màu). Ví dụ:
print(rgb_color_gen())
# rgb(125,244,255) - the output should be in this form
  1. Viết hàm list_of_hexa_colors trả về ngẫu nhiên số màu thập lục phân nào trong một mảng (sáu số thập lục phân được viết sau dấu #. Hệ thống chữ số thập lục phân được tạo từ 16 ký tự đặt biệt, các chữ số từ 0-9 và 6 chữ cái đầu tiên từ a đến f).
  2. Viết một hàm list_of_rgb_colors trả về ngẫu nhiên số lượng màu RGB trong một mảng.
  3. Viết một hàm tạo màu tạo ra bất kỳ số lượng màu hex hoặc rgb. Ví dụ:
 generate_colors('hexa', 3) # ['#a3e12f','#03ed55','#eb3d2b'] 
 generate_colors('hexa', 1) # ['#b334ef']
 generate_colors('rgb', 3)  # ['rgb(5, 55, 175)','rgb(50, 105, 100)','rgb(15, 26, 80)'] 
 generate_colors('rgb', 1)  # ['rgb(33,79, 176)']
  1. Tạo và gọi hàm có tên shuffle_list, truyền vào một tham số và trả về một danh sách xáo trộn.
  2. Viết một hàm trả về một mảng gồm 7 số ngẫu nhiên trong phạm vi từ 0 đến 9. Tất cả các số phải là duy nhất.

Đăng ký nhận bản tin!

Tôi sẽ gửi một email cho bạn khi tôi tạo ra một cái gì đó mới. Tôi sẽ không bao giờ gửi thư rác cho bạn 🙅‍♂️! và bạn có thể hủy đăng ký bất kỳ lúc nào.
© 2019-2021 Phan Nhật Chánh