لغة Python لديها أسلوب كتابة يسمى العوامل الثلاثية (العوامل الشرطية) التي يمكنها وصف عملية مثل عبارة if في سطر واحد.
يتم شرح ما يلي هنا ، جنبًا إلى جنب مع نموذج التعليمات البرمجية.
- الكتابة الأساسية للعوامل الثلاثية
if ... elif ... else ...
صف هذا في سطر واحد- الجمع بين قائمة الترميز الشامل والمعاملات الثلاثية
- مزيج من الدوال المجهولة (تعبيرات لامدا) والعوامل الثلاثية
راجع المقالة التالية للحصول على مزيد من المعلومات حول بيان if العادي.
الكتابة الأساسية للعوامل الثلاثية
في بايثون ، يمكن كتابة العامل الثلاثي على النحو التالي
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
إذا كنت تريد تبديل القيم وفقًا للشروط ، فما عليك سوى كتابة كل قيمة كما هي.
Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd
a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even
إذا كنت تريد تبديل المعالجة وفقًا للشروط ، فقم بوصف كل تعبير.
a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3
a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4
التعبيرات التي لا تُرجع قيمة (التعبيرات التي تُرجع بلا) مقبولة أيضًا. اعتمادًا على الشرط ، يتم تقييم أحد التعبيرات ويتم تنفيذ العملية.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
يعادل الكود التالي المكتوب بعبارة if العادية.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
يمكن أيضًا ربط التعبيرات الشرطية المتعددة باستخدام عوامل تشغيل منطقية (و ، أو ، إلخ).
a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even
a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd
if ... elif ... else ...وصف سطر واحد
if ... elif ... else ...
لا توجد طريقة خاصة لكتابة هذا في سطر واحد. ومع ذلك ، يمكن تحقيق ذلك باستخدام عامل ثلاثي آخر في التعبير الذي يتم تقييمه عندما يكون التعبير الشرطي للعامل الثلاثي خاطئًا. صورة تداخل العوامل الثلاثية.
ومع ذلك ، قد يكون من الأفضل عدم استخدامه على نطاق واسع لأنه يقلل من إمكانية القراءة.
a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive
a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
يمكن تفسير التعبير الشرطي التالي بالطريقتين التاليتين ، ولكن يتم التعامل معه على أنه السابق (1).
A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C
مثال ملموس على النحو التالي. يعتبر التعبير الأول كما لو كان الثاني.
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative
result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero
الجمع بين قائمة الترميز الشامل والمعاملات الثلاثية
من الاستخدامات المفيدة للعامل الثلاثي عند معالجة القوائم في تدوين قائمة الفهم.
من خلال الجمع بين عامل التشغيل الثلاثي وتدوين استيعاب القائمة ، من الممكن استبدال عناصر القائمة أو إجراء بعض العمليات الأخرى وفقًا للظروف.
l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
لمزيد من المعلومات حول تدوين القائمة ، راجع المقالة التالية.
مزيج من الدوال المجهولة (تعبيرات لامدا) والعوامل الثلاثية
العامل الثلاثي ، الذي يمكن وصفه بإيجاز حتى في وظيفة مجهولة (تعبير lambda) ، مفيد.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
لاحظ أنه على الرغم من عدم ارتباطه بالمعامل الثلاثي ، إلا أن المثال أعلاه يعين اسمًا لتعبير lambda. لذلك ، قد تنشئ أدوات الفحص التلقائي مثل اصطلاح تشفير Python PEP8 تحذيرًا.
وذلك لأن PEP8 يوصي باستخدام def عند تعيين أسماء للوظائف.
مفهوم PEP8 على النحو التالي
- تُستخدم تعبيرات Lambda لتمرير الكائنات القابلة للاستدعاء كوسائط ، على سبيل المثال ، دون تسميتها
- في تعبيرات lambda ، استخدم def للتعريف بالاسم