การโหลดซ้ำ () - โหลดโมดูลที่นำเข้าก่อนหน้านี้หรือโมดูลที่โหลดซ้ำ สิ่งนี้มีประโยชน์ในสถานการณ์ที่คุณเรียกใช้สคริปต์ทดสอบซ้ำๆ ระหว่างเซสชันแบบโต้ตอบ โดยจะใช้เวอร์ชันแรกของโมดูลที่เรากำลังพัฒนาอยู่เสมอ แม้ว่าเราจะทำการเปลี่ยนแปลงโค้ดแล้วก็ตาม ในสถานการณ์นั้น เราจำเป็นต้องตรวจสอบให้แน่ใจว่ามีการโหลดโมดูลใหม่
อาร์กิวเมนต์ที่ส่งผ่านไปยัง reload() ต้องเป็นอ็อบเจ็กต์โมดูลที่นำเข้ามาก่อนสำเร็จ
ไวยากรณ์
import importlib importlib.reload(sys)
ตัวอย่าง
>>> import sys >>> import importlib >>> importlib.reload(sys) <module 'sys' (built-in)>
อย่างไรก็ตาม หากคุณกำลังพยายามโหลดโมดูลที่ไม่เคยนำเข้ามาก่อน คุณอาจได้รับข้อผิดพลาด
>>> import importlib >>> importlib.reload(sys) Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> importlib.reload(sys) NameError: name 'sys' is not defined
มีข้อควรทำความเข้าใจเล็กน้อย เมื่อทำการโหลดซ้ำ () -
-
โค้ดของโมดูล Python ถูกคอมไพล์ใหม่และโค้ดระดับโมดูลดำเนินการใหม่ โดยกำหนดชุดของอ็อบเจ็กต์ใหม่ที่เชื่อมโยงกับชื่อในพจนานุกรมของโมดูลโดยใช้ตัวโหลดซ้ำซึ่งเดิมโหลดโมดูลไว้ อย่างไรก็ตาม ฟังก์ชัน init ของโมดูลจะไม่ถูกโหลดอีก
-
ออบเจ็กต์เก่าจะถูกเรียกคืนหลังจากจำนวนการอ้างอิงลดลงเหลือศูนย์เท่านั้น
-
ชื่อในเนมสเปซโมดูลจะถูกเปลี่ยนเป็นวัตถุใหม่ถ้ามี
-
การอ้างอิงอื่นๆ ของอ็อบเจ็กต์เก่า (เช่น ชื่อภายนอกโมดูล) ไม่จำเป็นต้องอ้างถึงอ็อบเจ็กต์ใหม่และต้องได้รับการอัปเดตในแต่ละเนมสเปซที่เกิดขึ้นหากจำเป็น