عملگر سه‌‌گانه(ternary) در پایتون

امیرحسین بیگدلو 12 ماه قبل

 #  عملگر سه‌گانه در پایتون

بسیاری از زبان‌های برنامه نویسی از عملگر سه گانه پشتیبانی میکنند. هدف از عملگر سه گانه حذف عبارات if-else ساده است تا خوانایی کد بیشتر شود. اما پایتون عملگر سه گانه ندارد. به جای آن پایتون شکل خاصی از عبارات if-else را توسعه داده که میتواند جایگزین خوبی برای عملگر سه گانه باشد. در این حالت میتوانید عبارات if-else را در یک خط بنویسید.

 

ساختار عبارت if-else تک خطی پایتون به شکل زیر است:

[when_true] if [condition] else [when_false]

 

اگر condition مقدار True برگرداند، عبارت when_true اجرا خواهد شد، در غیر اینصورت when_false اجرا خواهد شد.

 

دوره پیشنهادی: دوره آموزش پایتون (python)

 

 #  مثالی از عملگر سه‌گانه در پایتون

فرض کنید قرار است کدی بنویسیم که یک عدد را از کاربر گرفته و تشخصی دهد که عدد زوج است یا فرد. برای ساخت این برنامه میتوانیم از عبارت if-else استفاده کنیم:

x = int(input("Please enter an integer:\n"))
 
if x % 2 == 0:
    int_type = 'even'
else:
    int_type = 'odd'
 
print(f'You entered {x} which is an {int_type} integer.')

 

کل برنامه بالا 6 خط است که 4 خط آن عبارت if-else است. در اینجا میتوانید از عملگر سه گانه پایتون یا همان عبارات if-else تک خطی استفاده کنید:

x = int(input("Please enter an integer:\n"))
 
int_type = 'even' if x % 2 == 0 else 'odd'
 
print(f'You entered {x} which is an {int_type} integer.')

 

در این حالت توانستیم تعداد خطوط کد را نصف کنیم. دقت کنید که اگر شرایط آزمایش ساده است میتوانید از عبارات if-else تک خطی استفاده کنید. اگر قرار است حالت‌های پیچیده را بررسی کنید، از همان if-else های معمولی استفاده کنید.

 

 

 #  عملگر سه‌گانه در tuple

نوع داده تاپل نیز از عملگر سه گانه پشتیبانی میکند. حالت کلی آن به شکل زیر است:

(when_true, when_false)[condition]

 

اگر condition مقدار True برگرداند، اولین مقدار اجرا شده و در غیر اینصورت مقدار دوم اجرا خواهد شد.

 

بیایید مثال بالا را با این روش بازنویسی کنیم:

x = int(input("Please enter an integer:\n"))
 
int_type = ('even', 'odd')[x % 2]
 
print(f'You entered {x} which is an {int_type} integer.')

 

 

 #  if-else بهتر است یا tuple؟

زمانی که از بلاک if-else استفاده میکنیم، ابتدا condition بررسی میشود. اما در زمان استفاده از tuple ابتدا المان‌ها اجرا شده و سپس condition بررسی میشود. پس اگر قرار است شرایط پیچیده و سنگینی را بررسی کنید بهتر است از if-else تک خطی استفاده کنید.

 

به مثال زیر دقت کنید:

def foo(s):
    print(f'foo called with parameter {s}')
    return s
 
 
flag = True
 
if flag:
    result = foo('if')
else:
    result = foo('else')
 
result = foo('ternary-if') if flag else foo('ternary-else')
 
result = (foo('tuple-true'), foo('tuple-false'))[flag]
 
print('Done')

 

خروجی کد بالا به شکل زیر است:

foo called with parameter if
foo called with parameter ternary-if
foo called with parameter tuple-true
foo called with parameter tuple-false
Done

 

با دقت در خروجی بالا میتوان نتیجه گرفت که استفاده از if-else بهینه تر است.

 

منبع: سوال stackoverflow

مطالب مشابه



مونگارد