if __name__ = '__main__': در پایتون یعنی چی؟



سلام دوستان

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

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

اصلا __name__ چیست؟

پایتون یک سری متد و متغیر از پیش تعریف شده داره که یک سری کارهای خاص انجام میدن و فقط شما باید این متدها رو بشناسید تا ازش استفاده کنید. یکی از این متدها که باید بشناسید __name__ هستش که الان بررسیش می کنیم، در انتهای این مقاله، میفهمید که چی هستش و چی کار میکنه.

اول از همه باید تلفظ اسمش رو بدونید: تو پایتون به متغیرها و متدهای آماده (built-in) که با دو تا علامت _ _ (آندر اسکور یا آندرلاین خودمون) شروع و تموم میشه، میگن داندر (Dunder); پس تلفظش میشه داندر name.

داندر name چی کار میکنه؟

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

اینم قبلش اضافه کنم که پایتون، دو نوع اجرای کد داره:

  • اجرای اسکریپتی
  • اجرای ماژولی

فرض کنید یک برنامه ای نوشتید که ۵ تا فایل داره. مثلا یکی از این فایل ها رو داخل یک فایل دیگه import می کنید، به import کردن و استفاده از اون فایل در فایل دیگه، اجرای ماژولی میگن ولی اینکه هر فایل رو به طور مستقل run کنید، اجرای اسکریپتی میگن.

هدف از استفاده از __name__ هم دقیقا همینه که بفهمه شما کدتون رو دارین اسکریپتی Run می کنید یا ماژولی؟

به کد زیر توجه کنید:

# First File With Name programming.py

print(__name__)   # Run the Code and In Output, You See __main__


# Another File With Name status.py
import programming 

# If you run this code, you see the output is &quotprogramming&quot


نکته ای که باید توجه کنید، اینجاست که اگر کدتون رو به صورت اسکریپتی اجرا کنید، __name__ برابر با __main__ هستش ولی اگه ماژولی اجرا کنید، __name__ برابر با اسم فایل میشه.


خب حالا تا اینجا ما فهمیدیم کار __name__ چیه ... یه ذره قضیه رو پیچیده تر کنیم. شاید شما بخواید تعیین کنید که اگه برنامه تون به صورت اسکریپتی اجرا شد، یک خروجی چاپ کنه و اگه به صورت ماژولی اجرا شد، یک خروجی دیگه.

راهکار برای این مثالی که زدم، تیتر مقاله ای هستش که نوشتم. شما باید داخل فایل programming.py شرط بگذارید:


if __name__ = '__main__':
    print(&quot I'm Programmer &quot)
else:
    print(&quot I'm Football Player &quot)


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