عملگر سهگانه(ternary) در پایتون
# عملگر سهگانه در پایتون
بسیاری از زبانهای برنامه نویسی از عملگر سه گانه پشتیبانی میکنند. هدف از عملگر سه گانه حذف عبارات 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