بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
بعض الشرح عن __name__ و __main__ في بايثون .
لنبدأ :
هذا ما سنتكلم عنه بالتحديد سطر if و __name__ ...إلخ
هذا هو خط سير البرنامج لنتصور الأمر على انه صندوق بداخله أكواد وهذا هو الصندوق الأساسي (main) والذي يتم تنفيذ التعليمات داخله ,نلاحظ أن الصندوق الأساسي إسمه بالتحديد هكذا __main__ وممكن الحصول على إسمه من خلال متغير إسمه __name__ وهذا المتغير وفرته لنا لغة البرمجة بايثون أي يأتي بشكل مضمن معها ولا يجعل إسمه الغريب قليلا يربككم.
نلاحظ ان هذا المتغير يحمل قيمة هي نص عادي ,أي ان الصندوق الأساسي للبرنامج إسمه __main__ الامر بهذه البساطة ذات الشيء مثلا عندما تضع متغير لإسمك مثلا "myname="youcef .
الان لنتصور الدالة هي صندوق أخر داخل الصندوق الأساسي .
نلاحظ ذات المبدأ حصلنا أيضا على إسم الدالة التي كتبتها والتي سميتها print_hello .
الان بعد توضيح بعض الأمور نرجع للموضوع الأساسي بكل بساطة معنى اخر سطرين إذا كان المتغير __name__ يحمل قيمة __main__ بمعنى أخر إذا شغلنا البرنامج بشكل مباشر نفذ دالة ()ffffff
لأن عند تشغيل البرنامج أو السكربت أو ملف الكود بشكل مباشر نكون داخل الصندوق الأساسي أي ان قيمة __name__ ستكون __main__ لهذا إذا صح التعبير نحن نكون بالفعل داخل الصندوق الأساسي لهذا الملف أو السكربت في حال شغلناه بشكل مباشر ولم نستدعيه من مكان أخر عن طريق import .
نلاحظ إذا غيرنا __main__ لشيء اخر لن يتم تنفيذ دالة ()ffffff لأن قيمة متغير __name__ لن تكون print_hello بل ستكون __main__ .
أظن أصبح الأمر واضح .
الأن أحد أسباب لماذا قد نحتاج إضافة if و __name__ و...إلخ لنفترض اننا لم نستخدمهم ولنفترض أيضا أننا كتبنا برنامج فيه أيضا دوال سيتم إستدعائها داخل برامج أخرى ,الذي سيحصل أنه بمجرد إستدعاء ملف البرنامج من سكربت أو برنامج أخر سيتم تنفيذ كل شيء ومنها دوال print وهذا أمر ليس جيد , اﻷمر بسيط معنا الأن لاكن تصور مثلا أن بدل دوال print هناك أوامر إنشاء نافذة وأزرار و...إلخ .
لا تربككم الدلة التي إسمها ()main هي دالة مثلها مثل غيرها :D .
الحل كما في الصور في الأعلى كلها بذات المبدأ بشكل بسيط إذا تم تشغيل السكربت بشكل مباشر أي __name__ تساوي __main__ نفذ المطلوب قد يكون إستدعاء دوال أخرى او دالة واحدة أو التنفيذ المباشر أو أي شيء نحتاجه .