ไม่เหมือนกับภาษาโปรแกรมอื่นๆ ที่ python ไม่ได้ออกแบบมาเพื่อเริ่มการทำงานของโค้ดจากฟังก์ชันหลักอย่างชัดเจน ตัวแปรพิเศษที่เรียกว่า __name__ จัดเตรียมฟังก์ชันการทำงานของฟังก์ชันหลัก เนื่องจากเป็นตัวแปรที่สร้างขึ้นในภาษาไพ ธ อน เราจึงสามารถเขียนโปรแกรมเพื่อดูค่าของตัวแปรนี้ได้ดังนี้
print type(__name__) print __name__
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
<type 'str'> __main__
ดังที่คุณเห็นด้านบน ค่าของตัวแปร __name__ เป็นประเภทข้อมูลสตริงและเท่ากับ ___main__
ด้านล่างนี้คือคุณสมบัติหลักสองประการของตัวแปร __name__
1. เมื่อคุณเรียกใช้สคริปต์ไพ ธ อนแบบสแตนด์อโลนที่เขียนอย่างดีซึ่งไม่ได้อ้างถึงสคริปต์อื่น ค่าของตัวแปร __name__ จะเท่ากับ __main__
มาเขียนโปรแกรมชื่อ standalone.py . กัน เพื่อแสดงคุณลักษณะนี้
def func1(): print 'The value of __name__ is ' + __name__ if __name__ == '__main__': func1()
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
The value of __name__ is __main__
ตามที่คาดไว้ ตัวแปร __name__ จะประเมินเป็น __main__ ดังนั้นผลลัพธ์ที่ได้
2. คุณลักษณะที่สองเกี่ยวกับการนำเข้าสคริปต์หลามตัวหนึ่งไปยังอีกสคริปต์หนึ่ง ในสถานการณ์เช่นนี้ ดูเหมือนว่าจะมีขอบเขตที่แตกต่างกันสองขอบเขตซึ่งถือได้ว่าเป็นฟังก์ชัน main() ขอบเขตแรกอาจเป็นตัวแปร __main__ ของโปรแกรมที่กำลังทำงานอยู่ และส่วนที่สองคือขอบเขตของตัวแปร __main__ ของสคริปต์ที่นำเข้าซึ่งใช้ในโปรแกรมปัจจุบัน
ดังนั้นจะใช้ตัวแปร __main__ ตัวใด
เมื่อคุณเรียกใช้ฟังก์ชันจากสคริปต์ที่นำเข้า ตัวแปร __name__ จะประเมินเป็นชื่อจริงของสคริปต์และไม่เท่ากับ __main__
แต่เมื่อคุณทราบค่าของตัวแปรชื่อจากโปรแกรมปัจจุบัน โดยไม่อ้างอิงสคริปต์ที่นำเข้ามา มันจะประเมินเป็น __main__ ตามที่คาดไว้ เนื่องจากเป็นขอบเขตของโปรแกรมที่เยื้องระดับ 0
โปรแกรมด้านล่างแสดงตัวอย่างนี้
ตัวอย่าง
import standalone as sa print('Running the imported script') sa.func1() print('\n') print('Running the current script') print 'The value of __name__ is ' + __name__
ผลลัพธ์
การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -
Running the imported script The value of __name__ is standalone Running the current script The value of __name__ is __main__
ประโยชน์ของวิธีนี้คือเมื่อโค้ดใช้ __name__ =="__main__":ตัวแปล python จะตรวจสอบว่ากำลังแยกวิเคราะห์สคริปต์ที่เรียกใช้งานอยู่หรือไม่ หรือแยกวิเคราะห์สคริปต์ภายนอกอื่นชั่วคราว วิธีนี้โปรแกรมเมอร์มีความสามารถในการควบคุมพฤติกรรมของส่วนต่างๆ ของโปรแกรมโดยเลือกเรียกใช้บรรทัดของโค้ดจากสคริปต์ภายนอกตลอดจนสคริปต์ที่เรียกใช้งานในปัจจุบันโดยขึ้นอยู่กับสถานการณ์