Nhập mô-đun vào Python với các ví dụ

⚡ Tóm tắt thông minh

Nhập vào Python Cho phép một tệp tin tái sử dụng các biến, hàm và lớp được định nghĩa trong một tệp tin khác. Một mô-đun chỉ đơn giản là một tệp tin .py, trong khi một gói (package) nhóm các mô-đun liên quan lại với nhau trong một thư mục được đánh dấu bằng tệp tin __init__.py.

  • 🔘 Mô-đun là gì? Module là một tệp .py duy nhất chứa các biến, hàm hoặc lớp.
  • ☑️ Từ khóa nhập khẩu: Lệnh `import` tải toàn bộ một mô-đun; `module_name.function_name` gọi các thành viên của mô-đun đó.
  • Nhập khẩu có chọn lọc: Lệnh `from module import name` chỉ lấy các hàm hoặc biến bạn cần.
  • 🧪 Bí danh: `import module as alias` rút ngắn các tên dài; `from module import *` hiển thị toàn bộ nội dung.
  • 🛠️ Gói và đường dẫn: __init__.py biến một thư mục thành một gói; sys.path liệt kê các vị trí tìm kiếm.
  • 🤖 Quy trình làm việc của AI: Các dự án học máy nhập NumPy, pandas và Py.Torch như các mô-đun.

Nhập mô-đun vào Python

Các phần bên dưới giải thích về các mô-đun, gói, các kiểu nhập khác nhau và cách thức hoạt động của nhập tuyệt đối và tương đối trong [tên phần mềm]. Python.

Các mô-đun trong là gì Python?

Một mô-đun là một tập tin có Python Mã nguồn. Mã nguồn có thể ở dạng biến, hàm hoặc một lớp được định nghĩa. Tên tệp tin trở thành tên mô-đun.

Ví dụ: nếu tên tệp của bạn là guru99.py thì 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.

Là gì Python mô-đun nhập khẩu?

Một tập tin được coi là một mô-đun trong PythonĐể sử dụng mô-đun, bạn phải nhập nó bằng cách sử dụng... nhập khẩu Từ khóa. Các hàm hoặc biến có 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 trong các ngôn ngữ khác như... TypeScript, JavaKịch bản, Java, Ruby, v.v.

Cách tạo và nhập mô-đun vào 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ư trong ảnh chụp màn hình:

Tạo và nhập mô-đun vào Python

Thực hiện theo các bước được đưa ra để tạo một mô-đun trong Python.

Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:

modtest/
	test.py
	display.py	

Bước 1) Tạo một 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 display_message()

Def display_message():
    return "Welcome to Guru99 Tutorials!"

Bước 3) Bây giờ hãy tạo một tệp khác display.py.

Bước 4) Bên trong file display.py, hãy nhập file test.py của module, như hình bên dưới:

import test

Khi nhập khẩu, bạn không cần phải đề cập đến tệp test.py mà chỉ 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.function_name.

Ví dụ: test.display_message().

Import test
print(test.display_message())

Bước 6) Khi bạn chạy tập tin display.py, bạn sẽ nhận được kết quả sau: Đầu ra:

Welcome to Guru99 Tutorials!

Nhập một lớp vào Python

Trước đó, chúng ta đã thấy một mô-đun đơn giản với một hàm. Ở đây, chúng ta sẽ tạo một lớp và tham chiếu đến lớp đó trong một tệp khác.

Cấu trúc thư mục để kiểm thử mã như sau:

myproj/
	Car.py
	display.py

Tạo một tệp có tên Car.py với mã sau:

Tên tập tin: Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def 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 tin 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ờ chúng ta hãy sử dụng tệp Car.py làm mô-đun trong một tệp khác có tên display.py.

Tên tập tin: display.py

import Car
car_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:

BMW
Car brand is  BMW
Car model is  Z5
Car manufacture year is  2020
Car brand is  BMW
Car model is  Z5

Như vậy, chúng ta 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 Car.

Sử dụng mô-đun từ để nhập

Bạn có thể chỉ 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ần thiết 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 gì 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.py
	display.py	

Trong file test.py có 2 hàm như sau:

Tên tập tin: test.py

defdisplay_message():
	return "Welcome to Guru99 Tutorials!"
	
def display_message1():
	return "All about Python!"

Bây giờ bạn cần 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 bên dưới:

Tên tập tin: display.py

from test import display_message
print(display_message())

Đầu ra:

Welcome to Guru99 Tutorials!

Nếu bạn sử dụng hàm display_message1(), nó sẽ báo lỗi rằng hàm này chưa được định nghĩa như hình bên dưới:

from test import display_message
print(display_message1())

Đầu ra:

Traceback (most recent call last):
File "display.py", line 3, in <module>
print(display_message1())
Name Error: name 'display_message1' is not defined

Nhập mọi thứ từ mô-đun

Lệnh import cho phép bạn nhập toàn bộ mô-đun bằng cách sử dụng từ khóa import theo sau là tên mô-đun, tức là tên tệp hoặc thư viện cần 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.py
	display.py	

Sau đây là 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

Khi chỉ sử dụng tên mô-đun nhập khẩu, để tham chiếu đến các biến và hàm bên trong mô-đun, bạn phải thêm tên mô-đun vào trước chúng.

Ví dụ

Tên tập tin: display.py

Import test
print(test.display_message())
print(test.display_message1())
print(test.my_name)
print(test.my_address)

Tên mô-đun "test" được sử dụng để chỉ các hàm và biến bên trong mô-đun "test".

Đầu ra:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Sử dụng nhập *

Chúng ta hãy xem một ví dụ sử dụng nhập khẩu *. Sử dụng nhập khẩu *, các hàm và biến có thể truy cập trực tiếp, như trong ví dụ bên dưới:

from test import *

print(display_message())
print(display_message1())
print(my_name)
print(my_address)

Đầu ra:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Hàm dir( )

Hàm dir() là một hàm tích hợp sẵn trong PythonPhương thức `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 tích hợp sẵn của đối tượng được cung cấp.

Vì vậy, khi sử dụng hàm `dir()` trên mô-đun, nó sẽ trả về các biến và hàm có trong mô-đun đó.

Dưới đây là một ví dụ hoạt động của hàm `dir()` trên một module. Chúng ta có một lớp tên là `Car.py`, hãy nhập lớp `Car` và gán nó cho hàm `dir()` để xem kết quả.

Cấu trúc thư mục để test code sẽ như sau:

test prop/
	Car.py
	test.py	

Tên tập tin: Car.py

class Car:
	brand_name = "BMW"
	model = "Z4"
	manu_year = "2020"

	def __init__(self, brand_name, model, manu_year):
		self.brand_name = brand_name
		self.model = model
		self.manu_year = manu_year

	def 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 tin: test.py

import Car

class_contents = dir(Car)
print(class_contents)

Kết quả đầu ra cung cấp cho chúng ta tên của lớp và tất cả các hàm được xác định trong Car.py.

Bạn cũng có thể thử sử dụng dir() trên mô-đun tích hợp có sẵn trong PythonChúng ta hãy thử làm tương tự trên... json mô-đun như được hiển thị 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 mô-đun.

Import json
json_details = dir(json)
print(json_details)

Đầu ra:

['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu
iltins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__pac
kage__', '__path__', '__spec__', '__version__', '_default_decoder', '_default_en
coder', 'codecs', 'decoder', 'detect_encoding', 'dump', 'dumps', 'encoder', 'loa
d', 'loads', 'scanner']

Gói

Một gói là một thư mục chứa tất cả các mô-đun được xác định bên trong nó. Để thực hiện một Python Trình thông dịch sẽ coi nó như một gói, thư mục của bạn cần có tệp __init__.py. Tệp __init__.py biến thư mục đó thành một gói. Đây là cấu trúc của gói mà chúng ta sẽ làm việc.

Gói trong Python

Tên của gói là gói của tôiĐể bắt đầu làm việc với gói này, hãy tạo một thư mục có tên là mypackage/. Bên trong thư mục đó, tạo một tệp trống có tên là __init__.py. Tạo thêm 3 tệp nữa là module1.py, module2.py và module3.py và định nghĩa các hàm như được hiển thị trong ảnh chụp màn hình. Dưới đâ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")

gói Đã sẵn sàng để sử dụng. Bây giờ hãy gọi gói này bên trong bất kỳ tệp nào của bạn như được hiển thị bên dưới trong test.py:

Ở đây, mypackage.module1 được nhập và đặt tên bí danh là mode1Tương tự, bạn có thể sử dụng các mô-đun khác như module2.py và module3.py từ thư mục mypackage.

import mypackage.module1 as mod1

print(mod1.mod1_func1())
print(mod1.mod1_func2())
print(mod1.mod1_func2())

Đầu ra:

Welcome to Module1 function1
None
Welcome to Module1 function2
None
Welcome to Module1 function2
None

Chúng ta vừa minh họa gói này bằng một mô-đun đơn giản với các hàm bên trong. Tùy thuộc vào dự án của bạn, bạn cũng có thể tạo các gói có các gói con, tức là các thư mục con chứa các mô-đun với các lớp được định nghĩa.

Python Đường dẫn tìm kiếm mô-đun

Trong quá trình thực hiện, khi Python đi qua nhập tên mô-đunTrình thông dịch cố gắng định vị mô-đun. Nó tìm kiếm mô-đun trong danh sách mô-đun tích hợp sẵn, và sau đó trong tất cả các thư mục được định nghĩa bên trong sys.path.

Tóm lại, trình thông dịch sẽ thực hiện tìm kiếm sau để xác định vị trí mô-đun:

  1. Trong thư mục hiện tại của bạn.
  2. Trong danh sách mô-đun tích hợp sẵn.
  3. Bên trong các thư mục sys.path.

Bạn có thể lấy thông tin chi tiết về 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 bên dưới:

importsys
print(sys.path)

Đầu ra:

['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\
\Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P
ython37\\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 mình.

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 thành dạng ngắn gọn hơn bằng cách đặt cho nó một tên bí danh. Tên bí danh có thể được tạo bằng cách sử dụng... as từ khóa.

Cú pháp:

import filename as alias name

Cấu trúc thư mục để test code sẽ như sau:

Mod test/
	test.py
	display.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ờ chúng ta sẽ sử dụng một bí danh cho test.py trong display.py.

Import test as t

print(t.display_message())
print(t.display_message1())
print(t.my_name)
print(t.my_address)

Tên bí danh được sử dụng cho mô-đun kiểm thử là t. Vì vậy, các hàm và biến từ test.py có thể được tham chiếu bằng tên bí danh t.

Đầu ra:

Welcome to Guru99 Tutorials!
All about Python!
Guru99
Mumbai

Nhập khẩu tuyệt đối và tương đối ở Python

Bây giờ bạn đã biết cách nhập tệp dưới dạng mô-đun bên trong một tệp khác. Bây giờ chúng ta hãy xem cách quản lý các tập tin có sẵn trong các thư mục. Các tập tin 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ư hiển thị bên dưới:

Nhập khẩu tuyệt đối và tương đối ở Python

Thư mục gốc là myproject/. Nó có hai thư mục con là package1 và package2.

Thư mục package1 chứa 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 có module3.py và module4.py cuối cùng.

  • Trong file module1.py, có một hàm tên là myfunc1.
  • Trong file module2.py, có một hàm tên là myfunc2.
  • Trong file module3.py, có một hàm tên là myfunc3.
  • Trong file module4.py, có một hàm tên là myfunc4.

Sử dụng nhập khẩu tuyệt đối

Đối với việc nhập khẩu tuyệt đối, bạn cần thêm toàn bộ đường dẫn của mô-đun 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 import tuyệt đối để tham chiếu đến các hàm có trong mỗi module.

Để sử dụng hàm myfunc1, bạn cần nhập nó như sau:

from package1.module1  import  myfunc1
or
from package1 import module1
module1.myfunc1()  

Để sử dụng hàm myfunc3, bạn cần nhập nó như sau:

from package1.subpkg.module3  import  myfunc3
or
from package1.subpkg import module3
module3.myfunc3()  

Ưu điểm và nhược điểm của việc sử dụng nhập khẩu tuyệt đối

Dưới đây là những lợi thế của việc sử dụng nhập khẩu tuyệt đối:

  • Nó trở nên dễ dàng tracGửi lại các mô-đun để kiểm tra mã.
  • Dễ sử dụng và rất đơn giản.
  • Nếu dự án được chuyển sang một đường dẫn khác, các tệp nhập khẩu vẫn sẽ giữ nguyên.

Nhược điểm của việc sử dụng nhập khẩu tuyệt đối

Dưới đây là những nhược điểm của việc sử dụng import tuyệt đối:

  • Đường dẫn nhập khẩu có thể trở nên rất dài nếu các mô-đun được lồng nhau và tên mô-đun dài.

Sử dụng nhập khẩu tương đối

Với cấu trúc thư mục đã đề cập ở trên, chúng ta sẽ xem cách nhập các thư mục tương ứng bằng cách sử dụng nhập tương đối.

Trong kiểu nhập tương đối, mô-đun cần nhập sẽ được xác định dựa trên vị trí hiện tại, tức là vị trí chứa câu lệnh nhập.

cú pháp

Trong các lần 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 cách sử dụng từ.

Sẽ có hai dấu chấm (..) trước tên mô-đun nếu mô-đun đó nằm ở cấp cao hơn vị trí hiện tại.

Dựa vào sơ đồ 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 tương ứng mà chúng ta cần tham khảo.

  • Trong file module1.py, có một hàm tên là myfunc1.
  • Trong file module2.py, có một hàm tên là myfunc2.
  • Trong file module3.py, có một hàm tên là myfunc3.
  • Trong file module4.py, có một hàm tên là myfunc4.

Để sử dụng hàm myfunc1, bạn cần nhập nó như sau:

from  .module1  import  myfunc1

Để sử dụng hàm myfunc3, bạn cần nhập nó như sau:

from  .subpkg.module3  import  myfunc3

Ưu điểm của nhập khẩu tương đối

  • Thật 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, lượng nhập khẩu có thể được rút ngắn so với mức nhập khẩu tuyệt đối.

Nhược điểm của nhập khẩu tương đối

  • Sử dụng phương pháp nhập khẩu tương đối, rất khó để tracTrở lại nơi mã nguồn được lưu trữ.

Câu Hỏi Thường Gặp

Python Không thể tìm thấy mô-đun. Hãy xác nhận rằng tên tệp chính xác, nằm trong sys.path hoặc trong thư mục hiện tại và gói đã được cài đặt trong môi trường ảo đang hoạt động của bạn. Chạy lệnh pip install theo sau là tên gói đối với các mô-đun của bên thứ ba.

Hãy cài đặt nó trước bằng đánh rớt, Các Python Sử dụng trình quản lý gói, ví dụ như `pip install pandas`. Sau khi cài đặt vào môi trường của bạn, hãy nhập nó như bình thường bằng lệnh `import pandas`. Các mô-đun tích hợp sẵn như `json` không cần cài đặt.

Lỗi nhập vòng lặp xảy ra khi hai mô-đun nhập lẫn nhau, khiến một mô-đun chỉ được tải một phần. Khắc phục bằng cách hợp nhất mã dùng chung, nhập bên trong hàm cần nó, hoặc nhập toàn bộ mô-đun thay vì chỉ nhập các tên cụ thể.

Cơ chế bảo vệ đó chỉ chạy mã khi tệp được thực thi trực tiếp, chứ không phải khi được nhập khẩu. Nếu không có nó, mỗi lần nhập khẩu sẽ chạy lại các câu lệnh cấp cao nhất của mô-đun. Nó giúp tách biệt các hàm có thể tái sử dụng khỏi mã kiểm thử theo kiểu kịch bản.

STT Python Hàm này thực thi một mô-đun một lần, sau đó lưu trữ nó trong sys.modules và sử dụng lại đối tượng đó cho các lần nhập sau. Để buộc tải lại trong quá trình phát triển, hãy gọi importlib.reload(module).

Sử dụng importlib.import_module(“name”) khi tên mô-đun chỉ được biết trong quá trình chạy, ví dụ như khi tải plugin. Nó trả về đối tượng mô-đun, vì vậy bạn có thể truy cập các chức năng của nó giống như một lệnh import thông thường.

Mã máy học nhập các thư viện NumPy, pandas, scikit-learn, TensorFlow và Py.Torch dưới dạng các mô-đun. Các nhóm cũng chia các quy trình của riêng họ thành các mô-đun và gói có thể tái sử dụng, sau đó nhập các chức năng tiền xử lý và huấn luyện được chia sẻ giữa các tập lệnh.

Đúng vậy. GitHub Copilot và các trợ lý ảo sẽ đề xuất các dòng lệnh import khi bạn gõ, thêm các lệnh import còn thiếu và giúp giải quyết các lỗi import. Luôn luôn xác nhận rằng mô-đun đã được cài đặt và tên khớp với môi trường của bạn trước khi tin tưởng vào bất kỳ đề xuất nào.

Tóm tắt bài viết này với: