يجب أن تكون قد صادفت إذا __name__ == بناء "main" في بايثون. لكن هل تعرف الغرض بالضبط؟

في بعض لغات البرمجة ، تُعد الطريقة الرئيسية بمثابة نقطة الدخول الوحيدة لتنفيذ البرنامج. أثناء الانتقال من اللغات الأخرى إلى Python ، المصطلح إذا __name__ == "__main__" قد يبدو أنها تنجز نفس المهمة. في بايثون ، هذا ليس هو الحال.

ال إذا __name__ == "__main__" يسمح المصطلح بتنفيذ رمز معين عند تشغيل الملف كبرنامج نصي. كما أنه يتأكد من عدم تنفيذ نفس التعليمات البرمجية عند استيراد الملف كوحدة نمطية.

فهم السلوك المتغير __name__

ال __اسم__ متغير مضمن في بايثون. إنه يمثل اسم الوحدة أو البرنامج النصي الذي يتم استخدامه فيه. عندما يتم تنفيذ البرنامج النصي باعتباره البرنامج الرئيسي ، يتم تعيين قيمته على __رئيسي__. إذا قمت باستيراد البرنامج النصي كوحدة نمطية ، فسيتم تعيين قيمة المتغير على الاسم الفعلي للوحدة.

قد يكون هذا محيرًا في البداية ، ولكن ألق نظرة على المثال التالي:

قم بإنشاء برنامج نصي وقم بتسميته تحياتي. سيحتوي هذا البرنامج النصي على وظيفة تحيي المستخدم وتطبع قيمة ملف __اسم__ عامل. سيطلب أيضًا من المستخدم إدخال اسمه.

instagram viewer
defتحية(اسم):
مطبعة(و "مرحبا ، {اسم}!")

مطبعة("قيمة __name__:"، __اسم__)

لو __name__ == "__رئيسي__":
اسم المستخدم = الإدخال ("من فضلك أدخل إسمك: ")
تحية (اسم المستخدم)
آخر:
مطبعة("تم استيراد" تحيات "الوحدة.")

تشغيل تحياتي سيعرض البرنامج النصي الإخراج التالي:

قيمة __اسم__ عوائد متغيرة مثل __رئيسي__ لأن النص يتم تنفيذه مباشرة.

الآن قم بإنشاء برنامج نصي آخر وقم بتسميته script2.py. ثم قم باستيراد ملف تحيات البرنامج النصي كوحدة نمطية.

يستورد تحيات

مطبعة("تنفيذ نص التحيات ...")
تحياتي."أليس")

استدعاء تحية وظيفة من تحية وحدة يعطي الناتج التالي.

قيمة __اسم__ تغييرات متغيرة على الاسم الفعلي للوحدة المستوردة. في هذه الحالة، تحيات.

هذه القيمة هي ما المصطلح إذا __name__ == "__main__" يبحث عن تحديد ما إذا كان الملف يعمل كبرنامج نصي أو يتم استيراده كوحدة نمطية.

متى تستخدم if __name__ == "__main__" إنشاء؟

يمكنك إضافة ملف إذا __name__ == "__main__" بناء في أي نص. ولكن هناك بعض السيناريوهات حيث يمكن أن يكون استخدامه أكثر فائدة. ستتعرف على هذه السيناريوهات باستخدام برنامج الآلة الحاسبة البسيط أدناه.

# الحاسبة

defيضيف(أ ، ب):
يعود أ + ب

defطرح او خصم(أ ، ب):
يعود أ - ب

defتتضاعف(أ ، ب):
يعود أ * ب

defيقسم(أ ، ب):
لو ب! = 0:
يعود أ / ب
آخر:
يعود"خطأ: القسمة على الصفر!"

لو __name__ == "__رئيسي__":
مطبعة("مرحبًا بك في الحاسبة!")
مطبعة("حدد عملية:")
مطبعة("1. يضيف")
مطبعة("2. طرح او خصم")
مطبعة("3. تتضاعف")
مطبعة("4. يقسم")

الاختيار = int (المدخلات ("أدخل اختيارك (1-4):"))

num1 = تعويم (إدخال ("أدخل الرقم الأول:"))
num2 = تعويم (إدخال ("أدخل الرقم الثاني:"))

لو الاختيار == 1:
النتيجة = جمع (num1، num2)
مطبعة(و "مجموع {عدد 1} و {عدد 2} يكون: {نتيجة}")
أليف الاختيار == 2:
النتيجة = طرح (num1، num2)
مطبعة(و "الفرق بين {عدد 1} و {عدد 2} يكون: {نتيجة}")
أليف الاختيار == 3:
النتيجة = ضرب (num1، num2)
مطبعة(و "منتج {عدد 1} و {عدد 2} يكون: {نتيجة}")
أليف الاختيار == 4:
النتيجة = قسمة (num1، num2)
مطبعة(و "تقسيم {عدد 1} بواسطة {عدد 2} يكون: {نتيجة}")
آخر:
مطبعة("اختيار غير صالح!")

السيناريو الأول هو عندما تريد تشغيل برنامج نصي بشكل مستقل وتنفيذ إجراءات محددة. يسمح هذا للبرنامج النصي بالعمل كبرنامج مستقل. ال إذا __name__ == "__main__" يسمح البناء للمستخدمين بالتفاعل مع الآلة الحاسبة باستخدام واجهة سطر الأوامر. يمنح هذا المستخدمين القدرة على استخدام وظائف البرنامج دون الحاجة إلى فهم أو تعديل الكود الأساسي.

لا يزال من الممكن تشغيل البرنامج بدون ملف إذا __name__ == "__main__" بناء وتحقيق نفس النتيجة ، لكن كودك سيفقد تنظيم الكود المعياري.

السيناريو الثاني هو عندما تريد الخاص بك رمز لتصميم معياري. يسمح هذا للبرامج الأخرى باستيراد البرنامج النصي الخاص بك كوحدة نمطية واستخدام وظائفه دون تشغيل وظائف غير ضرورية.

في حالة برنامج الآلة الحاسبة ، يمكن للبرامج الأخرى استيراد ملف آلة حاسبة الوحدة النمطية دون تشغيل واجهة CLI ومطالبات إدخال المستخدم. هذا يضمن إعادة استخدام الكود والتصميم المعياري. وبالتالي ، تمكين الآلة الحاسبة من الاندماج بسلاسة في التطبيقات الأكبر حجمًا.

يستورد آلة حاسبة

# استخدام الوظائف من وحدة الآلة الحاسبة
result_add = الحاسبة.5, 3)
مطبعة("نتيجة الإضافة:"، result_add)

result_subtract = الآلة الحاسبة.10, 4)
مطبعة("نتيجة الطرح:"، result_subtract)

السيناريو الثالث هو عندما تريد ذلك اختبار وتصحيح نص بايثون الخاص بك بشكل مستقل عن أي وحدات نمطية أو نصوص برمجية أخرى قد تستوردها. في مثال الآلة الحاسبة ، يسهل التركيز على اختبار وظائف الآلة الحاسبة دون تدخل من رمز خارجي.

يستورد آلة حاسبة

# اختبار وظائف الآلة الحاسبة
لو __name__ == "__رئيسي__":
# إضافة اختبار
النتيجة = الحاسبة. إضافة (5, 3)
مطبعة("نتيجة الإضافة:"، نتيجة)

# اختبار الطرح
النتيجة = الآلة الحاسبة.8, 4)
مطبعة("نتيجة الطرح:"، نتيجة)

# اختبار الضرب
النتيجة = الآلة الحاسبة.2, 6)
مطبعة("نتيجة الضرب:"، نتيجة)

يوضح الكود أعلاه كيفية تصحيح أخطاء نص الآلة الحاسبة بشكل مستقل.

متى يكون من غير الضروري استخدام إذا __name__ == "__main__" إنشاء؟

كما رأيت في السيناريوهات أعلاه ، فإن استخدام امتداد إذا __name__ == "__main__" الإنشاء هو التفريق بين البرنامج النصي الذي تقوم بتشغيله باعتباره البرنامج الرئيسي والبرنامج الذي تقوم باستيراده كوحدة نمطية. ومع ذلك ، هناك بعض الحالات التي يكون فيها استخدامه غير ضروري.

الحالة الأولى عندما يكون البرنامج النصي الخاص بك بسيطًا ولا يحتوي على أي وظائف أو وحدات قابلة لإعادة الاستخدام ولا تنوي استيراده. في هذه الحالة ، يجب عليك حذف هذا البناء حيث يتم تنفيذ البرنامج النصي بأكمله عند التشغيل. هذا أمر شائع بالنسبة للنصوص البرمجية لمرة واحدة والتي تؤدي غرضًا محددًا وليس المقصود منها إعادة الاستخدام أو الاستيراد.

الحالة الأخرى هي عندما تعمل في جلسة بايثون تفاعلية ، على سبيل المثال عند استخدام دفتر Jupyter. في جلسة تفاعلية ، تقوم بكتابة التعليمات البرمجية وتنفيذها مباشرةً في موجه الأوامر أو في غلاف Python التفاعلي. مثل Python REPL (حلقة قراءة-تقييم-طباعة). يتيح لك ذلك تجربة التعليمات البرمجية واختبار المقتطفات الصغيرة ، مما يمنحك نتائج فورية.

في هذه البيئات التفاعلية ، لا ينطبق مفهوم البرنامج النصي الذي يتم تشغيله كبرنامج رئيسي أو يتم استيراده كوحدة نمطية. أنت تقوم بتنفيذ مقتطفات التعليمات البرمجية مباشرة دون الحاجة إلى نقطة إدخال نصية تقليدية.

كيف تصبح على درجة الماجستير في بايثون؟

لكي تصبح محترفًا في أي لغة برمجة ، عليك أن تفهم كيف تعمل المفاهيم الأساسية للوظائف أو الأدوات. تمامًا كما تعلمت حول بنية if __name__ == "__main__" في هذه المقالة.

سيساعدك فهم المفاهيم الأساسية في معرفة كيف سيتصرف برنامجك بالضبط عند استخدامها. لا داعي للاندفاع ، فتعلم المفاهيم واحدًا تلو الآخر سيساعدك على التعمق في كل واحدة منها.