Module trong Python

Module trong Python

Phan Nhật Chánh

Chánh15 tháng 05, 2021

8 min read
·
views
·
likes

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
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:

file main.py
import mymodule print(mymodule.generate_full_name('Chanh', 'Phan Nhat'))
file main.py
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.

file main.py
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'])
file main.py
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

file main.py
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'])
file main.py
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()
# 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]))
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ó:

Terminal
python script.py Chanh PythonBasic
Terminal
python script.py Chanh PythonBasic

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

Welcome Chanh. Enjoy PythonBasic challenge!
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
# 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
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
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)
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
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
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
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) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
import string print(string.ascii_letters) # abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ print(string.digits) # 0123456789 print(string.punctuation) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

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
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_idrandom_user_id để tạo ra 6 ký tự (vừa số, vừa chữ).
print(random_user_id()) # 1ee33d
print(random_user_id()) # 1ee33d
  1. Khai báo một hàm có tên user_id_gen_by_useruser_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
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_genrgb_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
print(rgb_color_gen()) # rgb(125,244,255) - the output should be in this form
  1. Viết hàm list_of_hexa_colorslist_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_colorslist_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)']
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_listshuffle_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.