অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজ টার্নারি অপারেটর সাপোর্ট করে, যা মূলত একটি কন্ডিশনাল এক্সপ্রেশন ডিফাইন করে।
সদৃশভাবে পাইথনে টার্নারি অপারেটর একটি বাইনারি কন্ডিশনের ফলাফলের ওপর ভিত্তি করে একটি ভ্যালু রিটার্ন করতে ব্যবহৃত হয়। এটি বাইনারি ভ্যালু (কন্ডিশন) ইনপুট হিসেবে নেয়, তাই এটি "if-else" কন্ডিশন ব্লকের মতো দেখায়। কিন্তু এটি একটি ভ্যালুও রিটার্ন করে তাই একটি ফাংশনের মতো আচরণ করে।
সিনট্যাক্স
[on_true] if [expression] else [on_false]
দুটি ইন্টিজার তুলনা করার একটি সহজ প্রোগ্রাম লিখি:
ক. পাইথন if-else স্টেটমেন্ট ব্যবহার করে -
>>> x, y = 5, 6
>>> if x > y:
print("x")
else:
print("y")
y
খ. টার্নারি অপারেটর ব্যবহার করে
>>> x, y = 5, 6
>>> print("x" if x > y else "y")
y
টার্নারি অপারেটর দিয়ে আমরা এক লাইনে কোড লিখতে পারি। পাইথন মূলত প্রথমে কন্ডিশন ইভ্যালুয়েট করে, যদি true হয় - প্রথম এক্সপ্রেশন ইভ্যালুয়েট করে, অন্যথায় দ্বিতীয় কন্ডিশন ইভ্যালুয়েট করে।
>>> def find_max(a, b):
return a if (a > b) else b
>>> find_max(5, 6)
6
টার্নারি অপারেটর ইমপ্লিমেন্ট করার উপায়
নিচে টার্নারি অপারেটর ইমপ্লিমেন্ট করার বিভিন্ন উপায় দেওয়া হলো।
ক. পাইথন টাপল ব্যবহার করে
>>> a, b = random(), random() >>> (b, a)[a > b] 0.5497848117028667
উপরেরটি সমতুল্য -
>>> (b, a)[True] 0.5065247098746795
কিন্তু আপনি যদি বিভ্রান্ত হন যে রিটার্ন হওয়া ভ্যালু 'a'-র নাকি 'b'-র। উপরের কোডটি পুনর্লিখন করি।
>>> (f"b:{b}", f"a:{a}")[a > b]
'b:0.5497848117028667'
খ. পাইথন ডিকশনারি ব্যবহার করে
>>> a, b = random(), random()
>>> {False: f"b:{b}", True: f"a:{a}"}[a > b]
'a:0.8089581560973976'
আমরা কি-ভ্যালু জোড়া ইন্টারচেঞ্জ করতে পারি -
>>> {True: f"a:{a}", False: f"b:{b}"}[a > b]
'a:0.8089581560973976'
গ. ল্যাম্বডা ব্যবহার করে
আমরা পাইথন ল্যাম্বডা ফাংশন ব্যবহার করে টার্নারি অপারেটর হিসেবে কাজ করতে পারি -
>>> (lambda: f"a:{a}", lambda: f"b:{b}")[a > b]()
'b:0.6780078581465793'
নেস্টেড পাইথন টার্নারি অপারেটর
চেইন করে এই অপারেটরগুলো ব্যবহার করা যাক -
>>> from random import random >>> x = random() >>> "Less than zero" if x < 0 else "between 0 and 5" if a >= 0 and a <= 5 else "Greater than five"
আউটপুট
'between 0 and 5'
x-এর আসল মান চেক করা যাক -
>>> x 0.08009251123993566