นำเข้าโมดูลเข้า Python ด้วยตัวอย่าง
มีโมดูลอะไรบ้าง Python?
โมดูลคือไฟล์ที่มีรหัสหลาม รหัสสามารถอยู่ในรูปแบบของตัวแปร ฟังก์ชัน หรือคลาสที่กำหนด ชื่อไฟล์จะกลายเป็นชื่อโมดูล
ตัวอย่างเช่น หากชื่อไฟล์ของคุณคือ guru99.py ชื่อโมดูลก็จะเป็น guru99- ด้วยฟังก์ชันการทำงานของโมดูล คุณสามารถแบ่งโค้ดของคุณออกเป็นไฟล์ต่างๆ แทนที่จะเขียนทุกอย่างไว้ในไฟล์เดียว
เป็นสิ่งที่ Python นำเข้าโมดูล?
ไฟล์ถือเป็นโมดูลในหลาม หากต้องการใช้โมดูล คุณต้องนำเข้าโดยใช้ การนำเข้า คำหลัก ฟังก์ชั่นหรือตัวแปรที่อยู่ในไฟล์สามารถใช้ในไฟล์อื่นได้โดยการนำเข้าโมดูล ฟังก์ชันนี้มีให้บริการในภาษาอื่น เช่น typescript Javaสคริปต์, java, ruby ฯลฯ
วิธีสร้างและนำเข้าโมดูลมา Python?
ตอนนี้เราจะสร้างโมดูลและนำเข้าไปยังไฟล์อื่น
นี่คือขั้นตอนการสร้างและนำเข้าโมดูลตามที่แสดงในภาพหน้าจอ:
ทำตามขั้นตอนที่กำหนดเพื่อสร้างโมดูลในหลาม
โครงสร้างโฟลเดอร์ที่ใช้ในการทดสอบโค้ดมีดังนี้:
modtest/ test.py display.py
ขั้นตอน 1) สร้างไฟล์และตั้งชื่อว่า test.py
ขั้นตอน 2) ภายใน test.py ให้สร้างฟังก์ชันชื่อ display_message()
Def display_message():
return "Welcome to Guru99 Tutorials!"
ขั้นตอน 3) ตอนนี้สร้างไฟล์อื่น display.py
ขั้นตอน 4) ภายใน display.py นำเข้าไฟล์ moduletest.py ดังแสดงด้านล่าง:
import test
ขณะนำเข้า คุณไม่จำเป็นต้องพูดถึง test.py แต่ระบุแค่ชื่อไฟล์เท่านั้น
ขั้นตอน 5) จากนั้นคุณสามารถเรียกใช้ฟังก์ชัน display_message() จาก test.py ภายใน display.py คุณต้องใช้ module_name.function_name
ตัวอย่างเช่น test.display_message()
Import test print(test.display_message())
ขั้นตอน 6) เมื่อคุณรัน display.py คุณจะได้รับสิ่งต่อไปนี้ Output:
Welcome to Guru99 Tutorials!
การนำเข้าคลาสเข้า Python
ก่อนหน้านี้ เราได้เห็นโมดูลธรรมดาๆ ที่มีฟังก์ชันแล้ว ที่นี่จะสร้างคลาสและอ้างอิงคลาสภายในไฟล์อื่น
โครงสร้างโฟลเดอร์เพื่อทดสอบโค้ดมีดังนี้:
myproj/ Car.py display.py
สร้างไฟล์ชื่อ Car.py โดยมีโค้ดต่อไปนี้:
ชื่อไฟล์ : 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)
ในไฟล์ Car.py มีแอตทริบิวต์ brand_name, model และ manu_year ฟังก์ชันที่กำหนดไว้ภายในคลาสคือ car_details(), get_Car_brand(), get_Car_model()
ตอนนี้ให้เราใช้ไฟล์ Car.py เป็นโมดูลในไฟล์อื่นที่เรียกว่า display.py
ชื่อไฟล์ : 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())
Output:
BMW Car brand is BMW Car model is Z5 Car manufacture year is 2020 Car brand is BMW Car model is Z5
ดังนั้นเราจึงสามารถเข้าถึงตัวแปรและฟังก์ชันทั้งหมดจาก Car.py โดยใช้โมดูล Car
การใช้โมดูล from to import
คุณสามารถนำเข้าเพียงส่วนเล็กๆ ของโมดูล เช่น เฉพาะฟังก์ชันที่จำเป็นและชื่อตัวแปรจากโมดูล แทนที่จะนำเข้าโค้ดแบบเต็ม
เมื่อคุณต้องการนำเข้าเฉพาะสิ่งที่เฉพาะเจาะจง คุณสามารถใช้คำสำคัญ "จาก" เพื่อนำเข้าสิ่งที่คุณต้องการได้
ดังนั้นไวยากรณ์คือ
from module import your function_name , variables,... etc.
โครงสร้างโฟลเดอร์ที่ใช้ในการทดสอบโค้ดมีดังนี้:
modtest/ test.py display.py
ใน test.py มี 2 ฟังก์ชันดังรูป:
ชื่อไฟล์ : test.py
defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
ตอนนี้คุณต้องการฟังก์ชัน display_message() สามารถเข้าถึงฟังก์ชันหรือตัวแปรที่คุณกำลังนำเข้าได้โดยตรงดังที่แสดงด้านล่าง:
ชื่อไฟล์ : display.py
from test import display_message print(display_message())
Output:
Welcome to Guru99 Tutorials!
ตอนนี้หากคุณใช้ฟังก์ชัน display_message1() มันจะเกิดข้อผิดพลาดว่าฟังก์ชันไม่ได้ถูกกำหนดไว้ดังที่แสดงด้านล่าง:
from test import display_message print(display_message1())
Output:
Traceback (most recent call last): File "display.py", line 3, in <module> print(display_message1()) Name Error: name 'display_message1' is not defined
การนำเข้าทุกอย่างจากโมดูล
การนำเข้าช่วยให้คุณสามารถนำเข้าโมดูลทั้งหมดได้โดยใช้การนำเข้าตามด้วยชื่อโมดูล เช่น ชื่อไฟล์หรือไลบรารีที่จะใช้
ไวยากรณ์:
Import module
หรือโดยการใช้
from module import *
โครงสร้างโฟลเดอร์ที่ใช้ในการทดสอบโค้ดมีดังนี้:
modtest/ test.py display.py
ต่อไปนี้เป็นรายละเอียดโค้ดภายใน test.py
my_name = "Guru99" my_address = "Mumbai" defdisplay_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
การใช้โมดูลนำเข้า
การใช้เพียงชื่อโมดูลนำเข้าเพื่ออ้างอิงถึงตัวแปรและฟังก์ชันภายในโมดูลนั้นจะต้องนำหน้าด้วยชื่อโมดูล
ตัวอย่าง
ชื่อไฟล์ : display.py
Import test print(test.display_message()) print(test.display_message1()) print(test.my_name) print(test.my_address)
การทดสอบชื่อโมดูลใช้เพื่ออ้างถึงฟังก์ชันและตัวแปรภายในการทดสอบโมดูล
Output:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
ใช้การนำเข้า *
เรามาดูตัวอย่างการใช้งานกัน นำเข้า *. การใช้ นำเข้า *สามารถเข้าถึงฟังก์ชันและตัวแปรได้โดยตรง ดังตัวอย่างด้านล่าง:
from test import * print(display_message()) print(display_message1()) print(my_name) print(my_address)
Output:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
ฟังก์ชัน dir( )
dir() เป็นฟังก์ชันในตัวในหลาม dir() ส่งคืนคุณสมบัติและวิธีการทั้งหมด รวมถึงคุณสมบัติในตัวของวัตถุที่กำหนด
ดังนั้นเมื่อใช้ dir() กับโมดูล มันจะให้ตัวแปรและฟังก์ชันต่างๆ ที่มีอยู่ในโมดูล
นี่คือตัวอย่างการทำงานของ dir() บนโมดูล เรามีคลาสชื่อ Car.py ให้เรานำเข้า Car และกำหนดให้ dir() เพื่อดูผลลัพธ์
โครงสร้างโฟลเดอร์ที่จะทดสอบโค้ดจะเป็นดังนี้:
test prop/ Car.py test.py
ชื่อไฟล์: 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)
ชื่อไฟล์: test.py
import Car class_contents = dir(Car) print(class_contents)
ผลลัพธ์จะให้ชื่อของคลาสและฟังก์ชันทั้งหมดที่กำหนดไว้ใน Car.py
คุณยังสามารถลองใช้ dir() กับโมดูลในตัวที่มีอยู่ Python- ให้เราลองเหมือนกัน JSON โมดูลดังแสดงในตัวอย่างด้านล่าง มันจะแสดงคุณสมบัติและวิธีการทั้งหมดที่มีอยู่ใน JSON โมดูล.
Import json json_details = dir(json) print(json_details)
Output:
['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']
แบบรวดเร็ว
แพ็คเกจคือไดเร็กทอรีที่มีโมดูลทั้งหมดกำหนดอยู่ภายใน เพื่อทำก Python ล่ามถือว่ามันเป็นแพ็คเกจ ไดเร็กทอรีของคุณควรมีไฟล์ init.py init.py ทำให้ไดเร็กทอรีเป็นแพ็คเกจ นี่คือเค้าโครงของแพ็คเกจที่เรากำลังจะดำเนินการ
ชื่อแพ็คเกจคือ แพ็คเกจของฉันหากต้องการเริ่มทำงานกับแพ็คเกจ ให้สร้างไดเรกทอรีชื่อ package/ จากนั้นสร้างไฟล์ว่างชื่อ __init__.py ภายในไดเรกทอรี สร้างไฟล์เพิ่มอีก 3 ไฟล์ ได้แก่ module1.py, module2.py และ module3.py และกำหนดฟังก์ชันตามที่แสดงในภาพหน้าจอ ต่อไปนี้คือรายละเอียดของ module1.py, module2.py และ 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")
การขอ แพ็คเกจพร้อมใช้งานแล้ว ตอนนี้เรียกแพ็คเกจภายในไฟล์ใด ๆ ของคุณดังที่แสดงด้านล่าง :test.py:
ที่นี่ mypackage.module1 จะถูกนำเข้าและตั้งชื่อนามแฝงเป็น รุ่น1. ในทำนองเดียวกัน คุณสามารถใช้โมดูลอื่น module2.py และ module3.py จากแพ็คเกจของฉันได้
import mypackage.module1 as mod1 print(mod1.mod1_func1()) print(mod1.mod1_func2()) print(mod1.mod1_func2())
Output:
Welcome to Module1 function1 None Welcome to Module1 function2 None Welcome to Module1 function2 None
เราเพิ่งสาธิตแพ็คเกจด้วยโมดูลธรรมดาที่มีฟังก์ชันอยู่ข้างใน ตามโปรเจ็กต์ของคุณ คุณยังสามารถจัดแพ็คเกจโดยมีแพ็คเกจย่อยได้ด้วย โฟลเดอร์ย่อย/ มีโมดูลที่มีคลาสกำหนดไว้
Python เส้นทางการค้นหาโมดูล
ระหว่างการประหารชีวิต เมื่อเจอกับหลาม ชื่อโมดูลนำเข้าล่ามพยายามค้นหาโมดูล ค้นหาโมดูลในรายการโมดูลบิวด์อิน Later โดยรวมแล้วไดเร็กทอรีที่กำหนดไว้ภายใน sys.path
สรุปแล้วล่ามจะทำการค้นหาต่อไปนี้เพื่อค้นหาโมดูล:
- ในไดเร็กทอรีปัจจุบันของคุณ
- ในในรายการโมดูลบิวด์อิน
- ภายในไดเร็กทอรี sys.path
คุณสามารถรับรายละเอียดของ sys.path ได้โดยการนำเข้าโมดูล sys และพิมพ์ sys.path จากนั้นจะแสดงรายชื่อไดเรกทอรีดังแสดงด้านล่าง:
importsys print(sys.path)
Output:
['Python Latest\\task2', 'Users\\AppData\\Local\\Programs\\Python\ \Python37\\python37.zip', 'Users\\AppData\\Local\\Programs\\Python\\P ython37\\DLLs']
คุณยังสามารถแก้ไขเส้นทางและเก็บไดเร็กทอรีตามความต้องการของคุณ
การใช้นามแฝงโมดูลในการนำเข้า
คุณยังสามารถแปลงชื่อโมดูลให้เป็นรูปแบบที่สั้นลงได้ด้วยการตั้งชื่อนามแฝง นามแฝงสามารถทำได้โดยใช้คำหลัก
ไวยากรณ์:
import filename as alias name
โครงสร้างโฟลเดอร์ที่จะทดสอบโค้ดจะเป็นดังนี้:
Mod test/ test.py display.py
ต่อไปนี้เป็นโค้ดภายใน test.py
my_name = "Guru99" my_address = "Mumbai" def display_message(): return "Welcome to Guru99 Tutorials!" def display_message1(): return "All about Python!"
ตอนนี้จะใช้นามแฝงสำหรับ test.py ใน display.py
Import test as t print(t.display_message()) print(t.display_message1()) print(t.my_name) print(t.my_address)
นามแฝงที่ใช้สำหรับโมดูลทดสอบคือ t ดังนั้นฟังก์ชันและตัวแปรจาก test.py จึงสามารถอ้างอิงได้โดยใช้นามแฝง t
Output:
Welcome to Guru99 Tutorials! All about Python! Guru99 Mumbai
การนำเข้าแบบสัมบูรณ์และแบบสัมพัทธ์ใน Python
ตอนนี้คุณรู้วิธีนำเข้าไฟล์เป็นโมดูลภายในไฟล์อื่นแล้ว ให้เราดูวิธีจัดการไฟล์ที่มีอยู่ในโฟลเดอร์ ไฟล์ในโฟลเดอร์สามารถนำเข้าได้โดยใช้การนำเข้าแบบสัมบูรณ์หรือการนำเข้าแบบสัมพันธ์
พิจารณาว่าคุณมีโครงสร้างโฟลเดอร์โครงการของคุณ ดังที่แสดงด้านล่าง:
โฟลเดอร์รูทคือโปรเจ็กต์ของฉัน / . มีสองโฟลเดอร์ย่อย package1 และ package2
โฟลเดอร์ package1 มีสองโมดูล ได้แก่ module1.py และ module2.py
โฟลเดอร์ package2 มีหนึ่งคลาส myclass.py, sub-package subpkg พร้อม module3.py และ module4.py สุดท้าย
- ใน module1.py มีฟังก์ชันที่เรียกว่า myfunc1
- ใน module2.py มีฟังก์ชันที่เรียกว่า myfunc2
- ใน module3.py มีฟังก์ชันที่เรียกว่า myfunc3
- ใน module4.py มีฟังก์ชันที่เรียกว่า myfunc4
ใช้การนำเข้าแบบสัมบูรณ์
สำหรับการนำเข้าแบบสัมบูรณ์ คุณจะต้องเพิ่มเส้นทางทั้งหมดของโมดูลจากโฟลเดอร์รูทโปรเจ็กต์โดยตรง
ตอนนี้เรามาดูวิธีการใช้การนำเข้าแบบสัมบูรณ์เพื่ออ้างถึงฟังก์ชันที่มีอยู่ในแต่ละโมดูล
หากต้องการทำงานกับ functionmyfunc1 คุณจะต้องนำเข้าดังนี้:
from package1.module1 import myfunc1 or from package1 import module1 module1.myfunc1()
ในการทำงานกับฟังก์ชัน myfunc3 คุณจะต้องนำเข้าดังนี้:
from package1.subpkg.module3 import myfunc3 or from package1.subpkg import module3 module3.myfunc3()
ข้อดีและข้อเสียของการใช้การนำเข้าแบบสัมบูรณ์
ข้อดีของการใช้การนำเข้าแบบสัมบูรณ์มีดังนี้
- ง่ายต่อการติดตามโมดูลเพื่อตรวจสอบโค้ด
- ใช้งานง่ายและตรงไปตรงมามาก
- หากโปรเจ็กต์ถูกย้ายไปยังเส้นทางอื่น การนำเข้าจะยังคงเหมือนเดิม
ข้อเสียของการใช้การนำเข้าแบบสัมบูรณ์
นี่คือข้อเสียของการใช้การนำเข้าแบบสัมบูรณ์:
ข้อเสีย:
- เส้นทางการนำเข้าอาจยาวมากในกรณีที่โมดูลซ้อนกัน และหากชื่อของโมดูลยาว
การใช้การนำเข้าแบบสัมพันธ์
เมื่อพิจารณาถึงโครงสร้างโฟลเดอร์เดียวกันที่กล่าวถึงด้านล่าง เราจะดูวิธีการนำเข้าโครงสร้างเดียวกันโดยใช้การนำเข้าแบบสัมพันธ์
ในการนำเข้าแบบสัมพันธ์ โมดูลที่จะนำเข้าจะสัมพันธ์กับตำแหน่งปัจจุบันซึ่งเป็นตำแหน่งที่มีคำสั่งการนำเข้าอยู่
วากยสัมพันธ์
ในการนำเข้าแบบสัมพันธ์ คุณต้องเพิ่มจุด (.) ก่อนชื่อโมดูลเมื่อนำเข้าโดยใช้ จาก.
มันจะเป็น 2 จุด (..) ก่อนชื่อโมดูลหากโมดูลอยู่ในระดับหนึ่งขึ้นไปจากตำแหน่งปัจจุบัน
เมื่ออ้างอิงจากรูปโครงสร้างโฟลเดอร์ที่กล่าวไว้ข้างต้น เรามีโมดูลพร้อมฟังก์ชันที่เราจำเป็นต้องอ้างอิงถึงดังต่อไปนี้
- ใน module1.py มีฟังก์ชันที่เรียกว่า myfunc1
- ใน module2.py มีฟังก์ชันที่เรียกว่า myfunc2
- ใน module3.py มีฟังก์ชันที่เรียกว่า myfunc3
- ใน module4.py มีฟังก์ชันที่เรียกว่า myfunc4
หากต้องการทำงานกับ functionmyfunc1 คุณจะต้องนำเข้าดังนี้:
from .module1 import myfunc1
หากต้องการทำงานกับฟังก์ชัน myfunc3 คุณจะต้องนำเข้าดังนี้:
from .subpkg.module3 import myfunc3
ข้อดีของการนำเข้าแบบสัมพันธ์
ข้อดี:
- มันง่ายที่จะทำงานกับการนำเข้าแบบสัมพันธ์
- จากตำแหน่งปัจจุบัน การนำเข้าสามารถย่อให้สั้นลงเมื่อเปรียบเทียบกับการนำเข้าแบบสัมบูรณ์
ข้อเสียของการนำเข้าแบบสัมพัทธ์
ข้อเสีย:
- การใช้การนำเข้าแบบสัมพันธ์ทำให้ยากต่อการสืบย้อนว่าโค้ดนั้นอยู่ที่ใด
สรุป
- นำเข้ามา Python ช่วยให้คุณอ้างอิงถึงโค้ด เช่น .functions/objects ที่เขียนในไฟล์อื่น นอกจากนี้ยังใช้เพื่อนำเข้าไลบรารี/แพ็กเกจ Python ที่ติดตั้งโดยใช้ pip(ตัวจัดการแพ็กเกจ Python) และคุณจำเป็นต้องใช้ในโค้ดของคุณ
- ฟังก์ชันการนำเข้ามีให้บริการในภาษาอื่นๆ เช่น typescript Javaสคริปต์, java, ruby ฯลฯ
- โมดูลคือ python คือโค้ดที่เขียนอยู่ภายในไฟล์ เช่น (test.py) ภายในไฟล์ของคุณ คุณสามารถกำหนดตัวแปร ฟังก์ชัน หรือคลาสของคุณได้ ไฟล์ทั้งหมดกลายเป็นโมดูลและสามารถนำเข้าภายในไฟล์อื่นเพื่ออ้างอิงถึงโค้ดได้
- ด้วยฟังก์ชันการทำงานของโมดูล คุณสามารถแบ่งโค้ดของคุณออกเป็นไฟล์ต่างๆ แทนที่จะเขียนทุกอย่างไว้ในไฟล์เดียว Laterเมื่อใช้การนำเข้า คุณสามารถอ้างอิงถึงโค้ดภายในไฟล์ที่คุณต้องการได้
- Python มีโมดูลในตัวและยังมีไลบรารี/แพ็คเกจภายนอกที่ติดตั้งโดยใช้ไฟล์ ตัวจัดการแพ็คเกจหลาม (pip) เช่น pandas, NumPy ฯลฯ เรียกว่าโมดูล
- คุณสามารถนำเข้าเพียงส่วนเล็กๆ ของโมดูล เช่น เฉพาะฟังก์ชันที่จำเป็นและชื่อตัวแปรจากโมดูล แทนที่จะนำเข้าโค้ดแบบเต็ม
- คุณยังสามารถแปลงชื่อโมดูลให้เป็นรูปแบบที่สั้นลงได้ด้วยการตั้งชื่อนามแฝง นามแฝงสามารถทำได้โดยใช้คำหลัก
- แพ็คเกจคือไดเร็กทอรีที่มีโมดูลทั้งหมดกำหนดอยู่ภายใน เพื่อทำก Python ล่ามถือว่ามันเป็นแพ็คเกจ ไดเร็กทอรีของคุณควรมี __init.pyfile init.py ทำให้ไดเร็กทอรีเป็นแพ็คเกจ นี่คือเค้าโครงของแพ็คเกจที่เรากำลังจะดำเนินการ
- ระหว่างการประหารชีวิต เมื่อเจอกับหลาม ชื่อโมดูลนำเข้าล่ามพยายามค้นหาโมดูล ค้นหาโมดูลในรายการโมดูลบิวด์อิน Later โดยรวมแล้วไดเร็กทอรีที่กำหนดไว้ภายใน sys.path
- สำหรับการนำเข้าแบบสัมบูรณ์ คุณจะต้องเพิ่มเส้นทางทั้งหมดของโมดูลจากโฟลเดอร์รูทโปรเจ็กต์โดยตรง
- ในการนำเข้าแบบสัมพันธ์ โมดูลที่จะนำเข้าจะสัมพันธ์กับตำแหน่งปัจจุบันซึ่งเป็นตำแหน่งที่มีคำสั่งการนำเข้าอยู่



