شكل بديل لعامل Python الثلاثي

أنا اكتشفت مؤخرا بديلا لبناء معيار من " expression_on_true إذا المسند آخر expression_on_false "، وأنا لم أر في الدلائل:

(expression_on_false, expression_on_true)[predicate]

صورة

كيف تعمل


  1. بين قوسين ، يتم الإعلان عن مجموعة مكونة من عنصرين.
  2. في الأقواس المربعة ، يتم حساب القيمة الأصلية.
  3. يتم الوصول إلى مجموعة في المؤشر 1 (إذا كانت قيمة المسند صحيحة) أو 0 (إذا كانت قيمة المسند خاطئة)

لنلقي نظرة على مثال


لنفترض أن لدينا ل ، ونحن بحاجة إلى طباعة "ايجابية" إذا كان الرقم لا يقل عن الصفر، أو "الفعل Nagative" إذا كان الرقم أقل من الصفر.


>>> a = 101
>>> ("negative", "positive")[a >= 0]
'positive'
>>> a = -42
>>> ("negative", "positive")[a >= 0]
'negative'
>>> a = 0
>>> ("negative", "positive")[a >= 0]
'positive'

في الحالة الأولى ، 101> = 0 ، لذا فإن المسند يرجع True. عند الفهرسة ، يتحول True إلى 1 ، لذلك تنتقل المكالمة إلى العنصر باستخدام الفهرس 1. في الحالة الثانية ، نفس الشيء: المسند خطأ ، تنتقل المكالمة إلى العنصر باستخدام الفهرس 0.

البناء ("سلبي" ، "إيجابي") [a> = 0] على الأقل وليس أقصر بكثير من "إيجابي" إذا كان>> 0 آخر "إيجابي" ، ولكن ما زلت أجد هذه الميزة مثيرة للاهتمام

ملحوظة


(بفضل Dasdy )
إذا بدلاً من الثوابت ، استبدلنا التعبيرات في المجموعة ، والتي يجب تنفيذ واحد منها فقط ، فإن هذا البناء يفقد معناه.

All Articles