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

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

Mô-đun là một tệp có mã python. Mã có thể ở dạng biến, hàm hoặc lớp được xác định. 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. Hàm hoặc cá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 ở các ngôn ngữ khác, như bản thảo, JavaScript, 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ô-đ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 display.py nhập tệp moduletest.py, như hiển thị bên dưới:

import test

Trong khi nhập, bạn không cần phải đề cập đến test.py mà chỉ cần đề cập đế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 thực thi display.py, bạn sẽ nhận được thông tin 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 có chức năng. Ở đây sẽ tạo một lớp và giới thiệ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.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 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

Vì 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 mô-đun Car.

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

Bạn chỉ có thể nhập một phần nhỏ của mô-đun, tức là chỉ các hàm được yêu cầu và tên biến từ mô-đun thay vì nhập mã đầy đủ.

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.py
	display.py	

Trong 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 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ư dưới đây:

Tên tập tin: display.py

from test import display_message
print(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ẽ báo lỗi rằng hàm này không được xác định như hiển thị 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

Nhập cho phép bạn nhập mô-đun đầy đủ bằng cách sử dụng tính nă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.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

Chỉ cần nhập tên mô-đun, để tham chiếu đến các biến và chức năng bên trong mô-đun, nó phải thêm tiền tố vào tên mô-đun.

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ỉ hàm và các 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( )

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 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, hàm có 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 để 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 Python. Chúng ta hãy thử điều tương tự trên json mô-đun như trong ví dụ dưới đây. Nó sẽ hiển thị tất cả các thuộc tính và phương thức có sẵn trong 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 coi nó như một gói, thư mục của bạn phải có tệp init.py. init.py biến thư mục thành một gói. Đây là cách bố trí của gói mà chúng tôi sẽ làm việc.

Gói trong Python

Tên của gói là gói hàng 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à package/. Bên trong thư mục, hãy tạo một tệp trống có tên là __init__.py. Tạo thêm 3 tệp module1.py, module2.py và module3.py và định nghĩa các hàm như trong ảnh chụp màn hình. Sau đây là thông tin chi tiết về 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 bên trong bất kỳ tệp nào của bạn như hiển thị bên dưới :test.py:

Ở đây, mypackage.module1 được nhập và đặt 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 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 tôi vừa trình diễn gói này bằng một mô-đun đơn giản có 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ó các mô-đun với các lớp được xác định.

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

Trong quá trình thực thi, khi gặp con trăn nhập tên mô-đun, 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. Later nói chung, các thư mục được xác định 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
  3. Bên trong thư mục sys.path

Bạn có thể lấy thông tin 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ư hiển thị 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 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 để 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ờ sẽ sử dụng 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)

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 gọi bằng 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à dự án/. Nó có hai thư mục con pack1 và pack2.

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 có module3.py và module4.py cuối cùng.

  • Trong module1.py, có một hàm gọi là myfunc1.
  • Trong module2.py, có một hàm gọi là myfunc2.
  • Trong module3.py, có một hàm gọi là myfunc3.
  • Trong module4.py, có một hàm gọi là myfunc4.

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 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 tuyệt đối để tham chiếu đến các hàm 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  myfunc1
or
from package1 import module1
module1.myfunc1()  

Để làm việc với hàm myfunc3, bạn sẽ cần nhập 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:

  • 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, việc nhập khẩu vẫn 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 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ẽ xem cách nhập tương tự bằng cách 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 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ó 2 dấu chấm (..) trước tên mô-đun nếu mô-đun ở cấp cao hơn vị trí hiện tại.

Tham khảo hình cấu trúc thư mục được đề cập ở trên, chúng ta có các module sau cùng với chức năng của chúng mà chúng ta cần tham khảo.

  • Trong module1.py, có một hàm gọi là myfunc1.
  • Trong module2.py, có một hàm gọi là myfunc2.
  • Trong module3.py, có một hàm gọi là myfunc3.
  • Trong module4.py, có một hàm gọi là myfunc4.

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

  • 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

Nhược điểm:

  • Sử dụng các lần nhập tương đối, rất khó để tìm lại vị trí của mã

Tổng kết

  • Nhập vào Python giúp bạn tham chiếu đến mã, tức là .functions/objects đượ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 có sẵn bằng các ngôn ngữ khác như bản thảo, JavaScript, java, ruby, v.v.
  • Một mô-đun là python là mã được viết bên trong tệp, ví dụ (test.py). 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 một tệp khác để tham khảo 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. Later, bằng cách sử dụng tính nă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 và cả các thư viện/gói bên ngoài được cài đặt bằng cách sử dụng quản lý gói python (pip), ví dụ: pandas, 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 được yêu cầu và tên biến từ mô-đun thay vì nhập mã đầy đủ.
  • 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 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 coi nó như một gói, thư mục của bạn phải có tệp __init.py. init.py biến thư mục thành một gói. Đây là cách bố trí của gói mà chúng tôi sẽ làm việc.
  • Trong quá trình thực thi, khi gặp con trăn nhập tên mô-đun, 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. Later nói chung, các thư mục được xác định 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 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.