Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

กำลังโหลดโมดูลใน Python ใหม่หรือไม่


การโหลดซ้ำ () - โหลดโมดูลที่นำเข้าก่อนหน้านี้หรือโมดูลที่โหลดซ้ำ สิ่งนี้มีประโยชน์ในสถานการณ์ที่คุณเรียกใช้สคริปต์ทดสอบซ้ำๆ ระหว่างเซสชันแบบโต้ตอบ โดยจะใช้เวอร์ชันแรกของโมดูลที่เรากำลังพัฒนาอยู่เสมอ แม้ว่าเราจะทำการเปลี่ยนแปลงโค้ดแล้วก็ตาม ในสถานการณ์นั้น เราจำเป็นต้องตรวจสอบให้แน่ใจว่ามีการโหลดโมดูลใหม่

อาร์กิวเมนต์ที่ส่งผ่านไปยัง 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 ของโมดูลจะไม่ถูกโหลดอีก

  • ออบเจ็กต์เก่าจะถูกเรียกคืนหลังจากจำนวนการอ้างอิงลดลงเหลือศูนย์เท่านั้น

  • ชื่อในเนมสเปซโมดูลจะถูกเปลี่ยนเป็นวัตถุใหม่ถ้ามี

  • การอ้างอิงอื่นๆ ของอ็อบเจ็กต์เก่า (เช่น ชื่อภายนอกโมดูล) ไม่จำเป็นต้องอ้างถึงอ็อบเจ็กต์ใหม่และต้องได้รับการอัปเดตในแต่ละเนมสเปซที่เกิดขึ้นหากจำเป็น