06/04/2021, 14:46

Module trong Python: Cách tạo và sử dụng Module có sẵn - Python căn bản

Trong bài này chúng ta sẽ học cách tạo module trong Python, qua bài này bạn sẽ hiểu được khái niệm module là gì? Làm thế nào để gọi đến một module tạo mới hoặc module có sẵn trong Python. Nếu Python là ngôn ngữ đầu tiên mà bạn học thì khái niệm này hơi mới lạ, nhưng nếu bạn đã học ngôn ngữ khác ...

Trong bài này chúng ta sẽ học cách tạo module trong Python, qua bài này bạn sẽ hiểu được khái niệm module là gì? Làm thế nào để gọi đến một module tạo mới hoặc module có sẵn trong Python.

Nếu Python là ngôn ngữ đầu tiên mà bạn học thì khái niệm này hơi mới lạ, nhưng nếu bạn đã học ngôn ngữ khác rồi thì không còn xa lạ gì khái niệm lập trình hướng module nữa. Vậy Module là gì thì chúng ta cùng tìm hiểu ngay nhé.

1. Module trong Python là gì?

Trong Python, modules là những file có phần mở rộng .py, các file này chứa mã Python và đó có thể là các biến, hàm, hoặc một lớp nào đó.

Các module giúp chúng ta code một cách linh hoạt hơn, mỗi file sẽ chứa những đoạn code phục vụ cho một chức năng cụ thể, được sắp xếp tùy vào cách thiết kế của mỗi lập trình viên.

Để sử dụng các hàm của module A trong module B thì ta phải sử dụng từ khóa import, sau đó là bạn có thể sử dụng toàn bộ tài nguyên của module A. Cách import như thế nào thì chúng ta cùng tìm hiểu qua phần thứ hai nhé.

2. Cách tạo module trong Python

Trước khi tạo một module thì bạn phải xác định rằng nhu cầu cần tạo một module tên gì? nằm phục vụ một công việc gì? Để từ đó đặt tên module cho có ngữ nghĩa.

Giả sử mình cần tạo một thư viện chứa những hàm dùng để quản lý sinh viên, lúc này mình sẽ tạo một file tên là students.py cùng cấp với file chạy chính như sau:

cau truc module JPG

Như bạn thấy, mình có file helloworld.py là file chương trình chính của project, còn file students.py là module chứa những hàm quản lý sinh viên mà minh sắp viết vào.

Trong file students.py bạn hãy dùng lệnh def để tạo một hàm như sau:

def showStudent(name):
    print(name)

def message student JPG

Trong file helloworld.py bạn hãy viết đoạn code sau:

# Gọi đến module students
import students

# Gọi đến hàm showStudent trong module students
students.showStudent("Nguyễn Văn Cường")

goi thu vien students JPG

Chạy file chính helloworld.py lên thì bạn sẽ thấy kết quả như sau:

ket qua 1 JPG

Tóm lại: Giả sử trong module students có biến name và hàm showMessage, lúc này ta sẽ gọi đến biến và hàm này như sau:

students.name
students.showMessage()

Như vậy mình đã sử dụng lệnh import để gọi đến module students. Ta sẽ tìm hiểu sâu hơn về lệnh này ở phần tiếp theo.

3. Lệnh import trong Python

Để sử dụng các đoạn code ở module A vào trong module B thì ta sẽ phải sử dụng lệnh import. Có hai cách sử dụng, thứ nhất là dùng lệnh import đơn lẻ, thứ hai là lệnh from-import.

Sử dụng import

Lệnh import sẽ gọi module A vào trong module B, lúc này bạn có thể sử dụng mọi tài nguyên của module A trong module B.

import module

Nếu bạn muốn import một lúc nhiều module thì hãy ngăn chúng bằng dấu phẩy.

import module1,module2,........ module n

Ví dụ: Sử dụng hàm showStudent trong module students.

Ví dụ
# Gọi đến module students
import students

# Lấy dữ liệu
print("Hãy nhập tên của sinh viên")
name = input()

# Gọi đến hàm showStudent
students.showStudent(name)

Chạy chương trình này bạn sẽ thu được kết quả như sau:

ket qua 2 JPG

Sử dụng from-import

Giả sử trong module A bạn định nghĩa 10 function, nhưng trong module B bạn chỉ muốn sử dụng 1 trong 10 funciton đó thôi thì sử dụng from .. import.

Vậy sự khác nhau giữa importfrom ... import là một bên sẽ gọi tất cả các function, còn một bên chỉ gọi một function nào đó thôi.

Cú pháp
from < module-name> import <name 1>, <name 2>..,<name n>  

Ví dụ: Xem cách sử dụng from-import dưới đây.

calculation.py
#Đoạn code trong file calculation.py   
def summation(a,b):  
    return a+b  
def multiplication(a,b):  
    return a*b
def divide(a,b):  
    return a/b
Main.py
from calculation import summation    
# Nó sẽ import duy nhất hàm summation() trong file calculation.py  
a = int(input("Nhập số thứ nhất: "))  
b = int(input("Nhập số thứ hai: "))  
print("Sum = ",summation(a,b))

Chạy lên kết quả sẽ như sau:

Nhập số thứ nhất: 10
Nhập số thứ hai: 20
Sum =  30

Lệnh from ... import sử dụng trong trường hợp bạn biết chính xác tên function muốn sử dụng trong module. Nó sẽ không khiến chương trình nặng hơn, vì vậy cứ yên tâm mà sử dụng.

Trường hợp bạn muốn import tất cả các function thì sử dụng dấu sao *.

from <module> import *   

4. Đổi tên module với AS trong Python

Nếu bạn muốn đổi tên module cho ngắn gọn và dễ hiểu thì có thể sử dụng từ khóa AS. Từ khóa này rất hữu ích vì giúp bạn tiết kiệm được thời gian nhập những module có tên quá dài, thay vao đó chỉ cần một cai tên thật đặc biệt.

Cú pháp như sau:

import <module-name> as <specific-name>   

Ví dụ: Thay đổi tên module calculation thành cal

#Tên của module calculation ở ví dụ trước sẽ đổi thành cal.   
import calculation as cal
a = int(input("Enter a?"))
b = int(input("Enter b?"))
print("Sum = ",cal.summation(a,b))  

5. Xem thuộc tính và phương thức của module

Hàm dir() có công dụng trả về danh sách các thuộc tính và phương thức của module.

Ví dụ: Xem những tên biến, hàm có sẵn trong module json.

import json  
  
List = dir(json)  
  
print(List)  

Kết quả:

['JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__',
'__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', 
'_default_decoder', '_default_encoder', 'decoder', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']

6. Tải lại module với hàm reload

Trong Phython, khi bạn import một module thì nó sẽ thực hiện một lần duy nhất, cho dù bạn sử dụng đoạn code import bao nhiêu lần đi nữa. Tuy nhiên có một số trường hợp bạn muốn tải lại dữ liệu mới nhất của module đó thì có thể sử dụng hàm reload().

reload(<module-name>)  

Ví dụ: Tải lại module calculation đã được định nghĩa ở các ví dụ trước.

reload(calculation)  

7. Phạm vi của biến của module trong Python

Như tất cả các ngôn ngữ lập trình khác, chúng ta có hai dạng biến như sau:

  • Biến toàn cục: là biến có thể sử dụng ở tất cả các vị trí trong chương trình chính, trừ trong hàm.
  • Biến cục bộ: Là biến chỉ sử dụng được trong một phạm vi nhất định, ví dụ trong hàm.

Vậy khi bạn khai báo một biến trong module thì có thể sử dụng tai mọi vị trí trong module đó. Tuy nhiên trong hàm thì không thể gọi đến biến cục bộ đó.

Hãy xem ví dụ dưới đây, biến name đã được khai báo ở cấp ngoài cùng và trong hàm, đây là 2 biến hoàn toàn khác nhau.

# Đây là biến toàn cục
name = "john"  
def print_name(name):  
    # Biến này là biến cục bộ, giá trị của nó được truyền vào
    print("Xin chào",name) 
name = input("Nhập tên của bạn?")  
print_name(name)  

Kết quả:

ket qua 3 JPG

8. Xem các module có sẵn trong Python

Để xem danh sách các module có sẵn trong Python thì ta sử dụng lệnh sau:

print (help('modules') )

Kết quả nó sẽ trả về danh sách như sau:

__future__          _threading_local    getpass             sched
_abc                _tkinter            gettext             secrets
_aix_support        _tracemalloc        glob                select
_ast                _uuid               graphlib            selectors
_asyncio            _warnings           gzip                setuptools
_bisect             _weakref            hashlib             shelve
_blake2             _weakrefset         heapq               shlex
_bootlocale         _winapi             helloworld          shutil
_bootsubprocess     _xxsubinterpreters  hmac                signal
_bz2                _zoneinfo           html                site
_codecs             abc                 http                smtpd
_codecs_cn          aifc                idlelib             smtplib
_codecs_hk          antigravity         imaplib             sndhdr
_codecs_iso2022     argparse            imghdr              socket
_codecs_jp          array               imp                 socketserver
_codecs_kr          ast                 importlib           sqlite3
_codecs_tw          asynchat            inspect             sre_compile
_collections        asyncio             io                  sre_constants
_collections_abc    asyncore            ipaddress           sre_parse
_compat_pickle      atexit              itertools           ssl
_compression        audioop             json                stat
_contextvars        base64              keyword             statistics
_csv                bdb                 lib2to3             string
_ctypes             binascii            linecache           stringprep
_ctypes_test        binhex              locale              struct
_datetime           bisect              logging             students
_decimal            builtins            lzma                subprocess
_distutils_hack     bz2                 mailbox             sunau
_elementtree        cProfile            mailcap             symbol
_functools          calendar            marshal             symtable
_hashlib            cgi                 math                sys
_heapq              cgitb               mimetypes           sysconfig
_imp                chunk               mmap                tabnanny
_io                 cmath               modulefinder        tarfile
_json               cmd                 msilib              telnetlib
_locale             code                msvcrt              tempfile
_lsprof             codecs              multiprocessing     test
_lzma               codeop              netrc               textwrap
_markupbase         collections         nntplib             this
_md5                colorsys            nt                  threading
_msi                compileall          ntpath              time
_multibytecodec     concurrent          nturl2path          timeit
_multiprocessing    configparser        numbers             tkinter
_opcode             contextlib          opcode              token
_operator           contextvars         operator            tokenize
_osx_support        copy                optparse            trace
_overlapped         copyreg             os                  traceback
_peg_parser         crypt               parser              tracemalloc
_pickle             csv                 pathlib             tty
_py_abc             ctypes              pdb                 turtle
_pydecimal          curses              pickle              turtledemo
_pyio               dataclasses         pickletools         types
_queue              datetime            pip                 typing
_random             dbm                 pipes               unicodedata
_sha1               decimal             pkg_resources       unittest
_sha256             difflib             pkgutil             urllib
_sha3               dis                 platform            uu
_sha512             distutils           plistlib            uuid
_signal             doctest             poplib              venv
_sitebuiltins       easy_install        posixpath           warnings
_socket             email               pprint              wave
_sqlite3            encodings           profile             weakref
_sre                ensurepip           pstats              webbrowser
_ssl                enum                pty                 winreg
_stat               errno               py_compile          winsound
_statistics         faulthandler        pyclbr              wsgiref
_string             filecmp             pydoc               xdrlib
_strptime           fileinput           pydoc_data          xml
_struct             fnmatch             pyexpat             xmlrpc
_symtable           formatter           queue               xxsubtype
_testbuffer         fractions           quopri              zipapp
_testcapi           ftplib              random              zipfile
_testconsole        functools           re                  zipimport
_testimportmultiple gc                  reprlib             zlib
_testmultiphase     genericpath         rlcompleter         zoneinfo
_thread             getopt              runpy   

Mình chạy trên Python 3.8.

Như vậy là mình đã hướng dẫn xong cách sử dụng lệnh import trong Python để gọi đến một module nào đó. Ngoài ra bạn cũng biết cách tạo mới module và gọi đến một module vừa tạo đó.

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

Cùng chủ đề
0