เมื่อล่าม Python อ่านไฟล์ต้นฉบับ โปรแกรมจะดำเนินการโค้ดทั้งหมดที่พบในไฟล์นั้น
ก่อนที่จะรันโค้ด มันจะกำหนดตัวแปรพิเศษสองสามตัว ตัวอย่างเช่น หากล่ามไพธอนกำลังเรียกใช้โมดูลนั้น (ไฟล์ต้นทาง) เป็นโปรแกรมหลัก โปรแกรมจะตั้งค่าตัวแปร __name__ พิเศษให้มีค่า "__main__" หากไฟล์นี้ถูกนำเข้าจากโมดูลอื่น __name__ จะถูกตั้งค่าเป็นชื่อของโมดูล
เหตุผลหนึ่งสำหรับการทำเช่นนี้คือบางครั้งคุณเขียนโมดูล (ไฟล์ .py) ซึ่งสามารถดำเนินการได้โดยตรง นอกจากนี้ยังสามารถนำเข้าและใช้ในโมดูลอื่นได้อีกด้วย เมื่อทำการตรวจสอบหลัก คุณสามารถให้โค้ดนั้นรันได้เฉพาะเมื่อคุณต้องการเรียกใช้โมดูลในฐานะโปรแกรม และไม่รันโค้ดเมื่อมีคนต้องการนำเข้าโมดูลของคุณและเรียกใช้ฟังก์ชันของคุณเอง
ตัวอย่างเช่น หากคุณมี 2 ไฟล์ one.py และ two.py ด้วยรหัสต่อไปนี้:
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 in one.py one.py is being imported Root of in two.py func() in one.py two.py is being run directly