เมื่อตัวแปลภาษา Python อ่านไฟล์ต้นฉบับ (Source File) จะทำการรันโค้ดทั้งหมดที่อยู่ในไฟล์นั้น ก่อนรัน ตัวแปลจะกำหนดตัวแปรพิเศษบางตัว โดยเฉพาะ __name__
ค่าของ __name__
- รันไฟล์โดยตรง:
__name__ == "__main__" - ถูกนำเข้า (Import) เป็นโมดูล:
__name__จะเป็นชื่อโมดูล (เช่น"mymodule")
จุดประสงค์
รูปแบบนี้ช่วยให้โค้ดบางส่วนทำงานเฉพาะเมื่อรันไฟล์โดยตรง ไม่ทำงานเมื่อถูก import ไปใช้ในที่อื่น เหมาะสำหรับ:
- ทดสอบโมดูล (Unit Testing)
- รันสคริปต์บรรทัดคำสั่ง (CLI)
- โค้ดสาธิต (Demo Code)
ตัวอย่าง
# one.py
def func():
print("func() in one.py")
print("Root of one.py")
if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported")
# two.py
import one
print("Root of two.py")
one.func()
if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported")
ผลลัพธ์
$ python one.py
Root of one.py
one.py is being run directly
$ python two.py
Root of one.py
one.py is being imported
Root of two.py
func() in one.py
two.py is being run directly