الشِفرة ذات المستوى الأعلى

7.3 الشِفرة ذات المستوى الأعلى

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على

  • تحديد الشِفرة التي تُشغَّل كتأثير جانبي للاستيراد.
  • شرح الغرض من if __name__ == "__main__".

الآثار الجانبية

تُعرّف الوَحدات الدوال والثوابت لاستخدامها في البرامج الأخرى. عند استيراد وَحدة، يتم تشغيل جميع الشِفرة الموجودة في الوَحدة من الأعلى إلى الأسفل. إذا لم تُصمّم الوَحدة بعناية، فقد يتم تشغيل شِفرة غير مقصودة كتأثير جانبي. تكون الشِفرة غير المقصودة عادةً في المستوى الأعلى، خارج تعريفات الدوال.

نقطة تحقق

شِفرة اختبار الكرة

مفاهيم تطبيقية

الآثار الجانبية

1.
أي سطر سيتسبب في تأثير جانبي عند الاستيراد؟
1
import math
2
3
print("Defining sphere function")
4
5
def sphere(radius):
6
  """Gets the volume of a sphere."""
7
  return 4/3 * math.pi * radius**3
  1. السطر 1
  2. السطر 3
  3. السطر 5
2.
تتسبب الوَحدة volume.py التالية في تأثير جانبي.
import math

def sphere(radius):
  """Gets the volume of a sphere."""
  return 4/3 * math.pi * radius**3

for r in range(10000000):
  volume = sphere(r)
  1. صحيح
  2. خطأ
3.
تتسبب الوَحدة greeting.py التالية في تأثير جانبي.
name = input("What is your name? ")
print(f"Nice to meet you, {name}!")
live = input("Where do you live? ")
print(f"{live} is a great place.")
  1. صحيح
  2. خطأ

استخدام __name__

غالبًا ما تتضمن وَحدات بايثون التعليمة if __name__ == "__main__" لمنع الآثار الجانبية. تكون هذه التعليمة صحيحة عند تشغيل الوَحدة كبرنامج، وخطأ عند استيراد الوَحدة.

نقطة تحقق

الوحدة الرئيسية

مفاهيم تطبيقية

استخدام __name__

4.
ما الناتج عند تشغيل الوَحدة test.py التالية؟
import math

print(math.__name__)
print(__name__)
  1. >math
    test
    
  2. __main__
    test
    
  3. math
    __main__
    
5.
ما الناتج عند استيراد الوَحدة test.py التالية؟
import math

print(math.__name__)
print(__name__)
  1. math
    test
    
  2. __main__
    test
    
  3. math
    __main__
    
6.
ما السطر المفيد لمنع الآثار الجانبية عند الاستيراد؟
  1. if __name__ == "main":
  2. if __name__ == __main__:
  3. if __name__ == "__main__":

استكشاف إضافي

المُتغيِّرات التي تبدأ وتنتهي بشرطتين سفليتين مزدوجتين لها معنى خاص في بايثون. تُسمى الشرطتان السفليتان المزدوجتان بشكل غير رسمي مُتغيِّرات "دندر" أو "سحرية". تتضمن الأمثلة الأخرى __doc__ (سلسلة التوثيق للوَحدة) و __file__ (اسم الملف للوَحدة).

جرّب بنفسك

الآثار الجانبية

هذا التمرين هو استمرار لتمرين "الاستيرادات المفقودة". سابقًا، أضفت تعليمات الاستيراد المفقودة إلى أعلى البرنامج. الآن، عدّل البرنامج لمنع الآثار الجانبية عند استيراد البرنامج كوحدة:

  1. أضف if __name__ == "__main__" في النهاية.
  2. انقل جميع شِفرة الاختبار تحت تعليمة if تلك.

يجب أن يعمل البرنامج بدون أخطاء وينتج نفس الإخراج كما كان من قبل.

جرّب بنفسك

اختبار التحويل

هذا التمرين هو استمرار لتمرين "وَحدة التحويل". سابقًا، كتبت الدوال cel2fah و fah2cel و km2mi و mi2km. اكتب شِفرة اختبار في نهاية conversion.py (الملف الأصلي) لكل من هذه الدوال. يجب ألا تعمل شِفرة الاختبار كتأثير جانبي عند استيراد conversion بواسطة برامج أخرى. عند تشغيل conversion.py كبرنامج رئيسي، يجب أن يكون خرج الاختبار كالتالي:

    0 C is 32 F
    5 C is 41 F
    10 C is 50 F
    15 C is 59 F
    20 C is 68 F

    20 F is -7 C
    25 F is -4 C
    30 F is -1 C
    35 F is 2 C
    40 F is 4 C
    
    1 km is 0.6 mi
    2 km is 1.2 mi
    3 km is 1.9 mi
    4 km is 2.5 mi
    5 km is 3.1 mi
    
    5 mi is 8.0 km
    6 mi is 9.7 km
    7 mi is 11.3 km
    8 mi is 12.9 km
    9 mi is 14.5 km