if __name__ == "__main__"

معمولا همچین عبارتی رو در قسمت انتهایی خیلی از اسکریپت های پایتون مشاهده می کنید. نحوه ی عملکرد این دستور در لایه های پایینی پایتون بسیار پیچیده است و به موضوع نحوه ی عملکرد این دستور وارد نمی شویم اما باید کارکرد آن را یاد بگیرید.

اسکریپت ها و ماژول های پایتون معمولا بخشی از یک برنامه ی بزرگتر هستند اما گاهی نیاز است که خود اسکریپت ها را اجرا کنیم و در کنار آن از آنها در اسکریپت یا برنامه ی اصلی به عنوان ماژول استفاده کنیم.

برای مثال فرض کنید که میخواهیم مجموع اعداد 1 تا 10 را محاسبه کنیم. اگر تابع را از طریق خط فرمان( command line ) اجرا کنیم نتایج در خروجی ترمینال( console ) نمایش داده می شوند؛ البته در جای دیگری از برنامه نیاز داریم که از نتیجه ی این جمع استفاده کنیم و باید آن را در برنامه اصلی داشته باشیم.

در مثال قبل دیدید که وارد کردن اسکریپت های دارای خروجی به برنامه ی اصلی چه حالتی خواهد داشت.

بیایید ابتدا اسکریپت مورد نظر را بنویسیم و سپس آن را اصلاح کنیم:

result = 0
for n in range(1, 11):  # Recall that this loops through 1 to 10, not including 11
    result += n
print(result)

این برنامه را در یک فایل به نام sum_to_10.py ذخیره می کنیم و اگر آنرا از طریق command line اجرا کنیم در خروجی 55 را میبینیم، دقیقا همانطوری که انتظار داشتیم. حالا اگر سعی کنیم تا تنها متغیر result را به یک برنامه ی پایتونی دیگر import کنیم، نتیجه ی اسکریپت دوباره در خروجی نمایش داده می شود؛ اما ما نمیخواهیم که این اتفاق رخ دهد و تنها به داشتن متغیر و مقدار آن در برنامه نیاز داریم:

from sum_to_10 import result

خروجی کد بالا برابر با 55 خواهد بود.

برای رفع این مشکل باید کاری کنیم که تنها زمانی که قصد اجرای مستقیم اسکریپت را داریم و اسکریپت برنامه ی اصلی(main) ماست نتیجه را نمایش دهیم. برای این کار یک بخش مجزا به اسکریپت sum_to_10.py اضافه میکنیم و آنرا به عنوان بخش اصلی (main) تعریف می کنیم و تابع print را در آن بخش قرار میدهیم:

result = 0
for n in range(1, 11):  # Recall that this loops through 1 to 10, not including 11
    result += n
if __name__ == '__main__':
    print(result)

حالا اگر sum_to_10.py را از طریق ترمینال اجرا کنیم مفسر( interpreter ) پایتون متغیر داخلی ویژه ی خود به نام __name__ را برابر با رشته ی '__main__' قرار می دهد و تابع print اجرا می شود. اگر هم تنها result را به برنامه ی دیگری وارد کنیم از آنجایی که دیگر sum_to_10.py به عنوان برنامه ی اصلی اجرا نمی شود علاوه بر دسترسی به متغیر و مقدار آن، هیچ عدد ناخواسته ای در خروجی اجرا نمی شود:

from sum_to_10 import result
result * 2

خروجی سلول کد بالا تنها برابر با 110 خواهد بود و 55 نمایش داده نخواهد شد.