পাইথনের একটি লেখার শৈলী রয়েছে যাকে বলা হয় টারনারি অপারেটর (শর্তসাপেক্ষ অপারেটর) যা একটি লাইনে if স্টেটমেন্টের মতো একটি প্রক্রিয়া বর্ণনা করতে পারে।
নমুনা কোড সহ এখানে ব্যাখ্যা করা হয়েছে।
- টারনারি অপারেটরদের মৌলিক লেখা
if ... elif ... else ...
এক লাইনে এটি বর্ণনা করুন- তালিকা ব্যাপক স্বরলিপি এবং Ternary অপারেটর সমন্বয়
- বেনামী ফাংশন (ল্যাম্বডা এক্সপ্রেশন) এবং টারনারি অপারেটরগুলির সমন্বয়
স্বাভাবিক যদি বিবৃতি সম্পর্কে আরও তথ্যের জন্য নিম্নলিখিত নিবন্ধটি দেখুন।
টারনারি অপারেটরদের মৌলিক লেখা
পাইথনে, টারনারি অপারেটরটি নিম্নরূপ লেখা যেতে পারে
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
একটি normal 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
তালিকা ব্যাপক স্বরলিপি এবং Ternary অপারেটর সমন্বয়
লিস্ট কম্প্রিহেনশন নোটেশনে তালিকা প্রক্রিয়াকরণের সময় টারনারি অপারেটরের একটি দরকারী ব্যবহার।
টারনারি অপারেটর এবং তালিকা বোঝার স্বরলিপি একত্রিত করে, শর্তগুলির উপর নির্ভর করে একটি তালিকার উপাদানগুলি প্রতিস্থাপন করা বা অন্য কিছু প্রক্রিয়াকরণ করা সম্ভব।
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]
তালিকা বোঝার স্বরলিপি সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত নিবন্ধটি দেখুন।
বেনামী ফাংশন (ল্যাম্বডা এক্সপ্রেশন) এবং টারনারি অপারেটরগুলির সমন্বয়
টারনারি অপারেটর, যা একটি বেনামী ফাংশনেও সংক্ষিপ্তভাবে বর্ণনা করা যেতে পারে (ল্যাম্বডা এক্সপ্রেশন), দরকারী।
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
উল্লেখ্য যে, যদিও টারনারি অপারেটরের সাথে সম্পর্কহীন, উপরের উদাহরণটি ল্যাম্বডা এক্সপ্রেশনে একটি নাম বরাদ্দ করে। তাই, পাইথনের কোডিং কনভেনশন PEP8 এর মতো স্বয়ংক্রিয় চেকিং টুল একটি সতর্কতা তৈরি করতে পারে।
এর কারণ হল PEP8 ফাংশনে নাম বরাদ্দ করার সময় def ব্যবহার করার সুপারিশ করে।
PEP8 এর ধারণাটি নিম্নরূপ
- ল্যাম্বডা এক্সপ্রেশনগুলি কলযোগ্য বস্তুকে আর্গুমেন্ট হিসাবে পাস করতে ব্যবহার করা হয়, উদাহরণস্বরূপ, তাদের নাম না রেখে
- ল্যাম্বডা এক্সপ্রেশনে, নাম দ্বারা সংজ্ঞায়িত করতে def ব্যবহার করুন