Các mô-đun trong Python là gì?
Mô-đun là một tệp có mã python. Mã có thể ở dạng biến, hàm hoặc lớp được định nghĩa. Tên tệp trở thành tên mô-đun.
Ví dụ: nếu tên tệp của bạn là guru99.py, tên mô-đun sẽ là guru99 . Với chức năng mô-đun, bạn có thể chia mã của mình thành các tệp khác nhau thay vì viết mọi thứ bên trong một tệp.
Trong hướng dẫn này, bạn sẽ học:
- Các mô-đun trong Python là gì?
- Mô-đun nhập Python
- Làm cách nào để tạo và nhập một mô-đun bằng Python?
- Nhập một lớp bằng Python
- Sử dụng từ để nhập mô-đun
- Nhập mọi thứ từ mô-đun
- Sử dụng mô-đun nhập
- Sử dụng nhập *
- Hàm dir ()
- Các gói
- PythonModuleSearchPath
- Sử dụng bí danh mô-đun trong quá trình nhập
- Nhập tuyệt đối và tương đối trong Python
- Sử dụngAbsoluteImports
- UsingRelativeImports
Mô-đun nhập Python là gì?
Một tệp được coi là một mô-đun trong python. Để sử dụng mô-đun, bạn phải nhập mô-đun đó bằng từ khóa nhập . Hàm hoặc các biến có bên trong tệp có thể được sử dụng trong tệp khác bằng cách nhập mô-đun. Chức năng này có sẵn ở các ngôn ngữ khác, như typecript, JavaScript, java, ruby, v.v.
Làm cách nào để tạo và nhập một mô-đun bằng Python?
Bây giờ chúng ta sẽ tạo một mô-đun và nhập nó vào một tệp khác.
Đây là quy trình để tạo và nhập mô-đun như được hiển thị trong ảnh chụp màn hình:
Làm theo các bước được cung cấp để tạo mô-đun trong python.
Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:
modtest/test.pydisplay.py
Bước 1) Tạo tệp và đặt tên là test.py
Bước 2) Bên trong test.py tạo một hàm có tên là display_message ()
Def display_message():return "Welcome to Guru99 Tutorials!"
Bước 3) Bây giờ tạo một tệp display.py.
Bước 4) Bên trong display.py nhập tệp moduletest.py, như được hiển thị bên dưới:
import test
Trong khi nhập, bạn không phải đề cập đến test.py mà chỉ cần nhắc đến tên của tệp.
Bước 5)
Sau đó, bạn có thể gọi hàm display_message () từ test.py bên trong display.py, bạn cần sử dụng module_name. functions_name.
Ví dụ test.display_message ().
Import testprint(test.display_message())
Bước 6)
Khi bạn thực thi display.py, bạn sẽ nhận được kết quả sau:
Welcome to Guru99 Tutorials!
Nhập một lớp bằng Python
Trước đó, chúng ta đã thấy một mô-đun đơn giản với một hàm. Tại đây sẽ tạo một lớp và tham chiếu lớp bên trong một tệp khác.
Cấu trúc thư mục để kiểm tra mã như sau:
myproj/Car.pydisplay.py
Tạo một tệp có tên Car.py với mã sau:
Tên tệp: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
Trong tệp Car.py, có các thuộc tính brand_name, model và manu_year. Các hàm được định nghĩa bên trong lớp là car_details (), get_Car_brand (), get_Car_model ().
Bây giờ, hãy để chúng tôi sử dụng tệp Car.py làm mô-đun trong một tệp khác có tên là display.py.
Tên tệp: display.py
import Carcar_det = Car.Car("BMW","Z5", 2020)print(car_det.brand_name)print(car_det.car_details())print(car_det.get_Car_brand())print(car_det.get_Car_model())
Đầu ra:
BMWCar brand is BMWCar model is Z5Car manufacture year is 2020Car brand is BMWCar model is Z5
Vì vậy, chúng tôi có thể truy cập tất cả các biến và hàm từ Car.py bằng cách sử dụng mô-đun Xe.
Sử dụng từ để nhập mô-đun
Bạn chỉ có thể nhập một phần nhỏ của mô-đun, tức là chỉ các hàm bắt buộc và tên biến từ mô-đun thay vì nhập toàn bộ mã.
Khi bạn chỉ muốn nhập những thứ cụ thể, bạn có thể sử dụng từ khóa "from" để nhập những thứ bạn muốn.
Vì vậy, cú pháp là
from module import your function_name , variables,… etc.
Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:
modtest/test.pydisplay.py
Trong test.py có 2 chức năng như hình:
Tên tệp: test.py
defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Bây giờ bạn muốn có hàm display_message (). Hàm hoặc biến mà bạn đang nhập có thể được truy cập trực tiếp như hình dưới đây:
Tên tệp: display.py
from test import display_messageprint(display_message())
Đầu ra:
Welcome to Guru99 Tutorials!
Bây giờ nếu bạn tình cờ sử dụng hàm display_message1 (), nó sẽ xuất hiện một lỗi rằng hàm không được xác định như hình dưới đây:
from test import display_messageprint(display_message1())
Đầu ra:
Traceback (most recent call last):File "display.py", line 3, inprint(display_message1())Name Error: name 'display_message1' is not defined
Nhập mọi thứ từ mô-đun
Nhập cho phép bạn nhập toàn bộ mô-đun bằng cách sử dụng nhập theo sau là tên mô-đun, tức là tên tệp hoặc thư viện sẽ được sử dụng.
Cú pháp:
Import module
Hoặc bằng cách sử dụng
from module import *
Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:
modtest/test.pydisplay.py
Sau đây là các chi tiết mã bên trong test.py
my_name = "Guru99"my_address = "Mumbai"defdisplay_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Sử dụng mô-đun nhập
Chỉ sử dụng tên mô-đun nhập, để tham chiếu đến các biến và chức năng bên trong mô-đun, nó phải đặt tiền tố bằng tên mô-đun.
Thí dụ
Tên tệp: display.py
Import testprint(test.display_message())print(test.display_message1())print(test.my_name)print(test.my_address)
Kiểm tra tên mô-đun được sử dụng để tham chiếu đến chức năng và các biến bên trong kiểm tra mô-đun.
Đầu ra:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Sử dụng nhập *
Hãy để chúng tôi xem một ví dụ sử dụng import * . Sử dụng hàm nhập * , các hàm và biến có thể truy cập trực tiếp, như thể hiện trong ví dụ dưới đây:
from test import *print(display_message())print(display_message1())print(my_name)print(my_address)
Đầu ra:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Hàm dir ()
Dir () là một hàm tích hợp trong python. Dir () trả về tất cả các thuộc tính và phương thức, bao gồm cả các thuộc tính có sẵn của đối tượng đã cho.
Vì vậy, khi dir () được sử dụng trên mô-đun, nó sẽ cung cấp cho bạn các biến, các hàm có mặt bên trong mô-đun.
Đây là một ví dụ hoạt động của dir () trên một mô-đun. Chúng ta có một lớp tên là Car.py, hãy nhập Car và gán cho dir () để xem kết quả.
Cấu trúc thư mục để kiểm tra mã sẽ như sau:
test prop/Car.pytest.py
Tên tệp: Car.py
class Car:brand_name = "BMW"model = "Z4"manu_year = "2020"def __init__(self, brand_name, model, manu_year):self.brand_name = brand_nameself.model = modelself.manu_year = manu_yeardef car_details(self):print("Car brand is ", self.brand_name)print("Car model is ", self.model)print("Car manufacture year is ", self.manu_year)def get_Car_brand(self):print("Car brand is ", self.brand_name)def get_Car_model(self):print("Car model is ", self.model)
Tên tệp: test.py
import Carclass_contents = dir(Car)print(class_contents)
Đầu ra cung cấp cho chúng ta tên của lớp và tất cả các hàm được định nghĩa trong Car.py.
Bạn cũng có thể thử sử dụng dir () trên một mô-đun tích hợp sẵn bằng Python. Chúng ta hãy thử tương tự trên mô-đun json như trong ví dụ bên dưới. Nó sẽ hiển thị tất cả các thuộc tính và phương thức có sẵn trong mô-đun json .
Import jsonjson_details = dir(json)print(json_details)
Đầu ra:
['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_encoder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'load', 'loads', 'scanner']
Các gói
Một gói là một thư mục với tất cả các mô-đun được định nghĩa bên trong nó. Để làm cho trình thông dịch Python coi nó như một gói, thư mục của bạn phải có init.pyfile. Init.py tạo thư mục dưới dạng một gói. Đây là bố cục của gói mà chúng ta sẽ làm việc trên.
Tên của gói là gói của tôi . Để bắt đầu làm việc với gói, hãy tạo một thư mục có tên là gói /. Bên trong thư mục, tạo một tệp trống có tên __init__.py. Tạo thêm 3 tệp module1.py, module2.py và module3.py và xác định các chức năng như trong ảnh chụp màn hình. Đây là chi tiết của module1.py, module2.py và module3.py
module1.py
def mod1_func1():print("Welcome to Module1 function1")def mod1_func2():print("Welcome to Module1 function2")def mod1_func3():print("Welcome to Module1 function3")
module2.py
def mod2_func1():print("Welcome to Module2 function1")def mod2_func2():print("Welcome to Module2 function2")def mod2_func3():print("Welcome to Module2 function3")
module3.py
def mod3_func1():print("Welcome to Module3 function1")def mod3_func2():print("Welcome to Module3 function2")def mod3_func3():print("Welcome to Module3 function3")
Các gói s sẵn sàng để sử dụng. Bây giờ hãy gọi gói bên trong bất kỳ tệp nào của bạn như được hiển thị bên dưới: test.py:
Ở đây, mypackage.module1 được nhập và có tên bí danh là mod1. Tương tự, bạn có thể sử dụng các mô-đun khác module2.py và module3.py từ gói của tôi.
import mypackage.module1 as mod1print(mod1.mod1_func1())print(mod1.mod1_func2())print(mod1.mod1_func2())
Đầu ra:
Welcome to Module1 function1NoneWelcome to Module1 function2NoneWelcome to Module1 function2None
Chúng tôi vừa trình diễn gói với một mô-đun đơn giản với các chức năng bên trong nó. Theo dự án của bạn, bạn cũng có thể đóng gói với các gói phụ. Thư mục con / có mô-đun với các lớp được xác định.
Đường dẫn tìm kiếm mô-đun Python
Trong quá trình thực thi, khi python gặp tên mô-đun nhập , trình thông dịch sẽ cố gắng định vị mô-đun. Nó tìm kiếm mô-đun trong danh sách mô-đun tích hợp. Cuối cùng, các thư mục được định nghĩa bên trong sys.path.
Tóm lại, trình thông dịch thực hiện tìm kiếm sau để xác định vị trí mô-đun:
- Trong thư mục hiện tại của bạn.
- Trong danh sách mô-đun tích hợp
- Bên trong các thư mục sys.path
Bạn có thể lấy chi tiết của sys.path bằng cách nhập mô-đun sys và in sys.path. Nó sẽ cung cấp cho bạn danh sách các thư mục như hình dưới đây:
importsysprint(sys.path)
Đầu ra:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\Python37\\DLLs']
Bạn cũng có thể sửa đổi đường dẫn và giữ các thư mục theo yêu cầu của bạn.
Sử dụng bí danh mô-đun trong quá trình nhập
Bạn cũng có thể chuyển đổi tên mô-đun sang dạng ngắn hơn bằng cách đặt tên bí danh cho nó. Bí danh có thể được thực hiện bằng cách sử dụng từ khóa.
Cú pháp:
import filename as alias name
Cấu trúc thư mục để kiểm tra mã sẽ như sau:
Mod test/test.pydisplay.py
Sau đây là mã bên trong test.py
my_name = "Guru99"my_address = "Mumbai"def display_message():return "Welcome to Guru99 Tutorials!"def display_message1():return "All about Python!"
Bây giờ sẽ sử dụng một bí danh cho test.py trong display.py
Import test as tprint(t.display_message())print(t.display_message1())print(t.my_name)print(t.my_address)
Bí danh được sử dụng cho mô-đun thử nghiệm là t. Vì vậy, hàm và các biến từ test.py có thể được tham chiếu bằng bí danh t.
Đầu ra:
Welcome to Guru99 Tutorials!All about Python!Guru99Mumbai
Nhập tuyệt đối và tương đối trong Python
Bây giờ bạn biết cách nhập tệp dưới dạng mô-đun bên trong tệp khác. Bây giờ chúng ta hãy xem cách quản lý các tệp có sẵn trong các thư mục. Các tệp trong thư mục có thể được nhập bằng cách sử dụng nhập tuyệt đối hoặc tương đối.
Hãy xem xét bạn có cấu trúc thư mục dự án của mình, như được hiển thị bên dưới:
Thư mục gốc là dự án của tôi /. Nó có hai thư mục con package1 và package2.
Thư mục package1 có hai mô-đun, module1.py và module2.py.
Thư mục package2 có một lớp myclass.py, một gói con subpkg với module3.py và module4.py cuối cùng.
- Trong module1.py, có một functioncalledmyfunc1.
- Trong module2.py, có một functioncalledmyfunc2.
- Trong module3.py, có một functioncalledmyfunc3.
- Trong module4.py, có một functioncalledmyfunc4.
Sử dụng nhập khẩu tuyệt đối
Đối với Nhập tuyệt đối, bạn cần thêm toàn bộ đường dẫn của mô-đun của mình ngay từ thư mục gốc của dự án.
Bây giờ chúng ta hãy xem cách sử dụng nhập khẩu tuyệt đối để tham khảo các chức năng có trong mỗi mô-đun.
Để làm việc với functionmyfunc1, bạn sẽ cần nhập như sau:
from package1.module1 import myfunc1orfrom package1 import module1module1.myfunc1()
Để làm việc với hàm myfunc3, bạn sẽ cần nhập như sau:
from package1.subpkg.module3 import myfunc3orfrom package1.subpkg import module3module3.myfunc3()
Ưu điểm và nhược điểm của việc sử dụng hàng nhập khẩu tuyệt đối
Dưới đây là những lợi thế của việc sử dụng hàng nhập khẩu tuyệt đối:
- Việc truy tìm lại các mô-đun để kiểm tra mã trở nên dễ dàng.
- Dễ sử dụng và rất đơn giản.
- Nếu dự án được chuyển sang một con đường khác, các nhập sẽ vẫn như cũ.
Nhược điểm của việc sử dụng hàng nhập khẩu tuyệt đối
Dưới đây là những bất lợi của việc sử dụng hàng nhập khẩu tuyệt đối:
Nhược điểm:
- Đường dẫn nhập có thể rất dài trong trường hợp, các mô-đun được lồng vào nhau và nếu tên của các mô-đun dài.
Sử dụng nhập khẩu tương đối
Xem xét cấu trúc thư mục tương tự được đề cập bên dưới, chúng ta sẽ thấy cách nhập giống nhau bằng cách sử dụng nhập tương đối.
Trong nhập tương đối, mô-đun được nhập có liên quan đến vị trí hiện tại là vị trí có câu lệnh nhập.
Cú pháp:
Trong nhập tương đối, bạn cần thêm dấu chấm (.) Trước tên mô-đun khi nhập bằng from .
Sẽ có 2 dấu chấm (…) trước tên mô-đun nếu mô-đun đang ở mức một cấp so với vị trí hiện tại.
Tham khảo hình cấu trúc thư mục đã đề cập ở trên, chúng ta có các mô-đun sau với chức năng của chúng, chúng ta cần tham khảo.
- Trong module1.py, có một functioncalledmyfunc1.
- Trong module2.py, có một functioncalledmyfunc2.
- Trong module3.py, có một functioncalledmyfunc3.
- Trong module4.py, có một functioncalledmyfunc4.
Để làm việc với functionmyfunc1, bạn sẽ cần nhập như sau:
from .module1 import myfunc1
Để làm việc với hàm myfunc3, bạn sẽ cần nhập như sau:
from .subpkg.module3 import myfunc3
Ưu điểm của Nhập khẩu Tương đối
Ưu điểm:
- Nó là dễ dàng để làm việc với hàng nhập khẩu tương đối.
- Từ vị trí hiện tại, nhập khẩu có thể được rút ngắn so với nhập khẩu tuyệt đối.
Nhược điểm của Nhập khẩu Tương đối
Nhược điểm:
- Sử dụng nhập khẩu tương đối, rất khó để truy tìm lại vị trí của mã
Tóm lược:
- Nhập bằng Python giúp bạn tham chiếu đến mã, tức là .functions / object được viết trong một tệp khác. Nó cũng được sử dụng để nhập các thư viện / gói python được cài đặt bằng pip (trình quản lý gói python) và sau đó bạn cần sử dụng trong mã của mình.
- Chức năng nhập khả dụng ở các ngôn ngữ khác như typecript, JavaScript, java, ruby, v.v.
- Mô-đun là python là mã được viết bên trong tệp, ví dụ (test.py). Bên trong tệp của bạn, bạn có thể xác định các biến, hàm hoặc lớp của mình. Toàn bộ tệp sẽ trở thành một mô-đun và có thể được nhập vào bên trong tệp khác để tham chiếu đến mã.
- Với chức năng mô-đun, bạn có thể chia mã của mình thành các tệp khác nhau thay vì viết mọi thứ bên trong một tệp. Sau đó, bằng cách sử dụng nhập, bạn có thể tham khảo mã bên trong tệp bạn cần.
- Python có các mô-đun tích hợp của nó và các thư viện / gói bên ngoài được cài đặt bằng trình quản lý gói python (pip), ví dụ: gấu trúc, NumPy, v.v. được gọi là mô-đun.
- Bạn chỉ có thể nhập một phần nhỏ của mô-đun, tức là chỉ các hàm và tên biến được yêu cầu từ mô-đun thay vì nhập toàn bộ mã.
- Bạn cũng có thể chuyển đổi tên mô-đun sang dạng ngắn hơn bằng cách đặt tên bí danh cho nó. Bí danh có thể được thực hiện bằng cách sử dụng từ khóa.
- Một gói là một thư mục với tất cả các mô-đun được định nghĩa bên trong nó. Để làm cho trình thông dịch Python coi nó như một gói, thư mục của bạn phải có __init.pyfile. Init.py tạo thư mục dưới dạng một gói. Đây là bố cục của gói mà chúng ta sẽ làm việc trên.
- Trong quá trình thực thi, khi python gặp tên mô-đun nhập , trình thông dịch sẽ cố gắng định vị mô-đun. Nó tìm kiếm mô-đun trong danh sách mô-đun tích hợp. Cuối cùng, các thư mục được định nghĩa bên trong sys.path.
- Đối với Nhập tuyệt đối, bạn cần thêm toàn bộ đường dẫn của mô-đun của mình ngay từ thư mục gốc của dự án.
- Trong nhập tương đối, mô-đun được nhập có liên quan đến vị trí hiện tại là vị trí có câu lệnh nhập.