آشنایی با if name == main در پایتون

در پایتون امکان این وجود دارد که بتوانیم یه function رو جوری برنامه ریزی کنیم که فقط در صورتی که به صورت مستقیم صدا زده شد اجرا شود

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

به طور کلی __name__ دو تا مقدار میگیره:

1. اگه شما یک ماژول رو به صورت مستقیم run کنید مقدار __main__ رو میگیره.

2. و اگه جای دیگه import کرده باشیدش اسم اون ماژول رو میگیره.

یه دونه فایل دارم به اسم first.py که کد زیر رو داخلش نوشتم:

print(__name__)

اگه این فایل رو اجرا کنید مقدار زیر رو به شما نشون میده:

__main__

دیدید که چون فایل رو به صورت مستقیم run کردیم این مقدار رو به ما نشون داد.

حالا یه فایل دیگه میسازم به اسم second.py و ماژول first.py رو import میکنم:

import first

الآن اگه شما ماژول second رو صدا بزنید این نتیجه رو میبینید:

first

دقت کنید که دستور print داخل ماژول first اجرا شد.

خب حالا فهمیدید که __name__ چه طوری کار میکنه.

و میرسیم سر اصل مطلب:

if __name__ == "__main__"

این جمله مشخص میکنه که آیا یک ماژول داره به صورت مستقیم run میشه یا جایی دیگه import شده.

کد زیر رو داخل ماژول first مینویسم:

def show():
     print('Hello...')

if __name__ == "__main__":
     show()

یه فانکشن ساده داریم که Hello رو چاپ میکنه. و داخل شرط if هم اون فانکشن رو صدا زدیم.

الآن اگه شما ماژول first رو اجرا کنید Hello چاپ میشه.

اما اگه ماژول second رو اجرا کنید چیزی چاپ نمیشه.(فقط دقت کنید که توی ماژول second ماژول first رو import کرده باشین). چی شد؟

زمانی که ماژول first رو صدا زدید __name__ مقدار __main__ رو گرفت و فانکشن show اجرا شد اما زمانی که ماژول second رو صدا زدید __name__ مقدار first رو گرفت و فانکشن دیگه اجرا نشد.

برای اطلاعات بیشتر ویدیو رو تماشا کنید