بيان تبديل بايثون

المُقدّمة

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

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

قبل الإصدار 3.10

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

على سبيل المثال ، ضع في اعتبارك الكود التالي:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

في هذا الكود ، نستخدم عبارة if-else لتحديد أي فرع من الكود يجب تنفيذه بناءً على قيمة المتغير value. إذا value تساوي "foo" ، سيتم تنفيذ أول فرع من الكود. لو value يساوي "شريط" ، سيتم تنفيذ الفرع الثاني من الكود. خلاف ذلك ، فإن الكود الموجود في ملف else سيتم تنفيذ الكتلة.

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

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

على سبيل المثال ، ضع في اعتبارك الكود التالي:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

في هذا الكود ، قمنا بتعريف قاموس يسمى switch، بمفاتيح تمثل القيم الممكنة للمتغير value. لكل مفتاح ، قمنا بتعيين دالة lambda كقيمة ، والتي تحتوي على فرع الكود المقابل. لتنفيذ الفرع المناسب من الكود ، نستخدم الامتداد get() طريقة القاموس ، والتي تسمح لنا بتحديد قيمة افتراضية لاستخدامها إذا كان المفتاح المحدد غير موجود في القاموس.

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

مع إدخال عبارة Python switch في Python v3.10 ، أصبح لدى المبرمجين الآن طريقة أكثر ملاءمة وبديهية للتحكم في تدفق برامجهم بناءً على قيمة متغير أو تعبير معين. في القسم التالي ، سوف نستكشف كيفية استخدام بيان تبديل فعلي في بايثون.

match/case البيان (بعد الإصدار 3.10)

بعد Python v3.10 ، يتم التعامل مع بيان switch باستخدام match كلمة رئيسية. تُستخدم هذه الكلمة الأساسية لإنشاء تعبير مطابقة النمط ، والذي يسمح لك باختبار قيمة متغير أو تعبير معين مقابل سلسلة من الأنماط. إذا تم العثور على تطابق ، يتم تنفيذ فرع الكود المقابل.

على سبيل المثال ، ضع في اعتبارك الكود التالي:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

تحقق من دليلنا العملي العملي لتعلم Git ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling Git وفي الواقع تعلم ذلك!

في هذا الكود نستخدم match الكلمة الأساسية لإنشاء تعبير مطابقة النمط ، والذي يختبر قيمة المتغير value ضد سلسلة من الأنماط. لو value تساوي "foo" ، سيتم تنفيذ أول فرع من الكود. لو value يساوي "شريط" ، سيتم تنفيذ الفرع الثاني من الكود. خلاف ذلك ، سيتم تنفيذ الكود الموجود في كتلة else.

وقع خلال

أحد الاختلافات الرئيسية بين عبارات التبديل في Python وعبارات التبديل التقليدية في اللغات الأخرى هي لغة Python match البيان لا يدعم السقوط. بعبارة أخرى ، بمجرد العثور على تطابق وتنفيذ فرع الكود المقابل ، فإن ملف match ينتهي التعبير ولا يوجد رمز آخر في match تم تنفيذ البيان. في لغات أخرى ، يتم تحقيق ذلك عادةً باستخدام ملف break الكلمة الأساسية ، وهي غير مطلوبة أو مدعومة هنا.

إذا كنت ترغب في تحقيق نفس السلوك مثل الخطأ في بيان التبديل التقليدي ، فيمكنك استخدام | عامل لتتناسب مع حالات متعددة. يسمح لك هذا المشغل بتحديد أنماط متعددة في ملف واحد case، ويمكن مطابقة أي من الأنماط لبدء تنفيذ هذا الفرع.

على سبيل المثال ، ضع في اعتبارك الكود التالي:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

هنا ، إذا كانت قيمة value تساوي "نعم" or "y" ، سيتم تنفيذ أول فرع من الكود. هذا يعادل السلوك غير المباشر في بيان التبديل التقليدي.

الافتراضات

كما لاحظت من الأمثلة أعلاه ، يتم التعامل مع الحالة "الافتراضية" باستخدام شرطة سفلية (_). يعتبر هذا "حرف البدل" ويطابق جميع القيم. إذا كانت إحدى الحالات السابقة تتطابق مع القيمة ، فسيتم تخطي فرع الكود الافتراضي ولا يتم تنفيذه.

وفي الختام

كما ترى ، فإن بيان Python match (المعروف أيضًا باسم “switch”) يوفر طريقة قوية وملائمة للتحكم في تدفق برنامجك. سواء كنت جديدًا في Python أو مطورًا متمرسًا ، يمكن أن تساعدك عبارة التبديل في كتابة تعليمات برمجية أنظف وأكثر كفاءة.

الطابع الزمني:

اكثر من ستاكابوز