Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Module trong Python: Cách tạo và sử dụng Module có sẵ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 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.
Bài viết này được đăng tại [free tuts .net]
Để 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:
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)
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")
Chạy file chính helloworld.py
lên thì bạn sẽ thấy kết quả như sau:
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.
# 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:
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 import
và from ... 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.
from < module-name> import <name 1>, <name 2>..,<name n>
Ví dụ: Xem cách sử dụng from-import dưới đây.
#Đ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
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ả:
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 đó.