از بجگی به فوتبال و اینترنت گردی علاقه داشتم و به تازگی روی به برنامه نویسی آوردم. خوشحال میشم دنبالم کنید...
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 "programming"
نکته ای که باید توجه کنید، اینجاست که اگر کدتون رو به صورت اسکریپتی اجرا کنید، __name__ برابر با __main__ هستش ولی اگه ماژولی اجرا کنید، __name__ برابر با اسم فایل میشه.
خب حالا تا اینجا ما فهمیدیم کار __name__ چیه ... یه ذره قضیه رو پیچیده تر کنیم. شاید شما بخواید تعیین کنید که اگه برنامه تون به صورت اسکریپتی اجرا شد، یک خروجی چاپ کنه و اگه به صورت ماژولی اجرا شد، یک خروجی دیگه.
راهکار برای این مثالی که زدم، تیتر مقاله ای هستش که نوشتم. شما باید داخل فایل programming.py شرط بگذارید:
if __name__ = '__main__':
print(" I'm Programmer ")
else:
print(" I'm Football Player ")
تو برنامه های بزرگتر، شاید شما بخواین تعیین کنید که اگر برنامه به صورت ماژولی اجرا شد، یک سری از فانکشن هایی که نوشتید، اجرا نشه و بسیار کاربردی خواهد بود.
مطلبی دیگر از این انتشارات
راهنمایی برای استخدام مدیر محصول
مطلبی دیگر از این انتشارات
فرقهگرایی معنوی مدرن یا کاسبی پرسود معاصر؟
مطلبی دیگر از این انتشارات
پشت پرده بررسی «بروکر اینگات» در فارکس سرویسز!