پرسش

شرط if __name__ ==

What does if __name__ ==

شرط if __name__ == "__main__" در پایتون چه کاری انجام می‌ده؟

1403/05/28
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

شرط if __name__ == "__main__" توی پایتون به این درد می‌خوره که وقتی یه فایل پایتونی رو به صورت مستقیم اجرا می‌کنی، یه سری کدها اجرا بشن و وقتی اون فایل رو به عنوان یه ماژول توی یه برنامه دیگه ایمپورت می‌کنی، اون کدها اجرا نشن.

توضیحش این‌طوریه که هر فایل پایتونی یه متغیر مخصوص به خودش داره به اسم __name__. وقتی فایلی رو به صورت مستقیم اجرا می‌کنی، مقدار __name__ توی اون فایل برابر با "__main__" می‌شه. اما وقتی همون فایل رو توی یه فایل دیگه ایمپورت می‌کنی، مقدار __name__ برابر با اسم خود فایل می‌شه (بدون پسوند .py).

مثلاً فرض کن یه فایل به اسم my_script.py داری که توش کد زیر نوشته شده:

# my_script.py
def main():
    print("Hello, World!")
if __name__ == "__main__":
    main()

وقتی my_script.py رو مستقیم اجرا کنی (مثلاً با python my_script.py)، مقدار __name__ می‌شه "__main__" و تابع main() اجرا می‌شه و عبارت "Hello, World!" رو چاپ می‌کنه.

اما اگه همین فایل رو توی یه فایل دیگه ایمپورت کنی، مثلاً:

# another_script.py
import my_script

تو این حالت، my_script.py فقط ایمپورت می‌شه و تابع main() اجرا نمی‌شه، چون مقدار __name__ توی my_script.py برابر با "my_script" می‌شه، نه "__main__".

پس به طور خلاصه، استفاده از شرط if __name__ == "__main__" باعث می‌شه که کدهایی که داخل این شرط قرار می‌گیرن فقط وقتی اجرا بشن که فایل به صورت مستقیم اجرا بشه، نه وقتی که به عنوان یه ماژول ایمپورت می‌شه. این خیلی کاربردیه وقتی که می‌خوای فایل‌های پایتونی که می‌نویسی هم قابلیت اجرا به صورت مستقل رو داشته باشن و هم بشه اونا رو به عنوان ماژول توی پروژه‌های دیگه استفاده کرد.

با رعایت این نکته‌ها، می‌تونی کدهای تمیزتر و خواناتری بنویسی و از قابلیت‌های پایتون به نحو احسن استفاده کنی.

پاسخ: 1403/05/28
آخرین آپدیت: 1403/07/11