اگر دانلود ویدیو شروع نشد، روی ویدیو راست کلیک کرده و گزینه Save Video As را انتخاب کنید.
ویدیو آشنایی با if name == main در پایتون
August 2022
در پایتون امکان این وجود دارد که بتوانیم یه 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 رو گرفت و فانکشن دیگه اجرا نشد.
اگر ویدیو بالا را دوست داشتید پیشنهاد میکنیم به مطالب زیر هم سر بزنید:
چقدر زمان میبرد تا پایتون را یاد بگیریم؟
آموزش برنامهنویسی شی گرا در پایتون
Kourosh
March 2023پاسخ به نظر
سلام
امیدوارم که حالتون عالی باشه
واقعا یکی از کامل ترین، با کیفیت ترین و بی نظیر ترین آموزگار های پایتون هستید و من به شخصه خیلی چیز ها از شما یاد گرفتم
کار ام رو خیلی راحت کردید و هر چیزی که نیاز داشتم رو توی آموزش ها و دوره هاتون گفته بودید
خدقوت میگم بهتون
ممنونم واقعا
پاسخ به نظر
مالک جهان آبادی
September 2022پاسخ به نظر
مرسی استاد
پاسخ به نظر
حاتمیان
July 2022پاسخ به نظر
واقعا ازتون ممنونم شاید 20 تا ویدیو دیدم هیچ کدوم واضح نبود توضیح شون.موفق باشید
پاسخ به نظر
محمدرضا
October 2021پاسخ به نظر
دمت گرم بابت اینهمه ویدئوی خوب.یکی از بهترین مراجع پایتون
پاسخ به نظر
سیامک
October 2021پاسخ به نظر
سلام استاد
این روشی که گفتید فقط اسم ماژول رو به ما میده، اگر بخواهیم اسم پکیج رو داشته باشیم چی باید بنویسیم ؟ یا اگر بخواهیم کل مسیر رو داشته باشیم چی باید بنویسیم ؟ مثلا پکیج فلان ماژول فلان و ...
پاسخ به نظر
امیرحسین بیگدلو
October 2021سلام
print(__file__)
سیامک
October 2021سلام استاد
روشی که گفتید رو امتحان کردم (__file__)، فقط اسم فایل رو بهمون میده
اسم پکیج رو نمیده ، برای پگیج راهی وجود داره ؟
امیرحسین بیگدلو
October 2021سلام
اسم فایل رو نمیده، کل مسیر رو میده.
منظورت از پکیج چیه؟
یه مثال بزن من بفهمم
سیامک
October 2021سلام
استاد روشی که گفتید __file__ فقط اسم اون فایلی رو میده که ما داریم run می کنیم ، منظورم از پکیج اسم فولدر هست
مثلا یه فولدر میسازیم به اسم A و سپس(init__.py__) توی فولدر A می سازیم که البته شما فرمودین تو ورژن های جدیدتر نیازی به فایل (init__.py__) نیست برای ساخت پکیج پایتونی و بعد توی همون فولدر مثلا یه فایل می سازیم test.py
حالا اگر تو test.py ، اینو پرینت بگیریم (__fil__) , فقط برامون test.py را چاپ می کنه و دیگه اسم اون فولدر رو که A هست چاپ نمیکنه ، منظورم از اسم پکیج هم همون A هست
مگه به اونA اسم پکیج نمیگن ؟
امیرحسین بیگدلو
October 2021آهان. اینو بزن ببین کارت راه میوفته:
from pathlib import Path
x= Path(__file__).parent
print(x)
امیرحسین بیگدلو
October 2021بالایی کل دایرکتوری رو میاورد. این فقط اسم دایرکتوری پدر:
import os
x = os.path.basename(os.path.dirname(__file__))
print(x)
سیامک
October 2021هر دو تارو امتحان کردم
هیچکدوم کار نکرد
اولی فقط یه نقطه چاپ میکنه
دومی هم چیزی چاپ نمیکنه ( استرینگ خالی هست )
امیرحسین بیگدلو
October 2021:/
اینا رو چه جوری اجرا میکنی؟
ali
July 2021پاسخ به نظر
ببخشید یه سوا تو فایل secend اگه print(f'__name__ => {__name__}')
بنویسم main رو چاپ میکنه دوباره چرا؟
پاسخ به نظر
arman
July 2021پاسخ به نظر
ممنون از شما ، خیلی کمک کرد بهم.
پاسخ به نظر
Elaheh
May 2021پاسخ به نظر
کاش کل پایتون را میشد این جوری یاد گرفت . مثل اب خوردن میشد والا
مرسی
پاسخ به نظر
فرامرز
March 2021پاسخ به نظر
ممنون از آموزش ها
فقط متوجه نشدم چرا import کردید اجرا شد؟ مگر بعد از import نباید یک تابع را call کنیم تا اجرا بشه؟!!!
پاسخ به نظر
امیرحسین بیگدلو
March 2021چی اجرا شد؟ بعد ایمپورت چیزی اجرا نشد که
As
January 2021پاسخ به نظر
همه جا این توضیحه هست
پاسخ به نظر
nima s
August 2020پاسخ به نظر
خیلی خوب توضیح دادید ممنون
پاسخ به نظر
امیرحسین بیگدلو
August 2020نظر لطف شماست
hajar
May 2020پاسخ به نظر
خیلی خوب بود ممنون
پاسخ به نظر
امیرحسین بیگدلو
May 2020خواهش میشه