পাইথন ফাংশন একাধিক মান রিটার্ন করতে পারে। এই মানগুলো সরাসরি ভেরিয়েবলে স্টোর করা যায়। একটি ফাংশন শুধু একটি ভেরিয়েবল রিটার্ন করার বাধ্যে নেই, এটি শূন্য, এক, দু বা অধিক মান রিটার্ন করতে পারে।
এটি পাইথনের ডিফল্ট প্রোপার্টি যা C++ বা Java-এর মতো অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজে উপলব্ধ নয়।
ফাংশন থেকে একাধিক মান রিটার্ন করতে, আমরা আমাদের প্রয়োজন অনুযায়ী টাপল, লিস্ট বা ডিকশনারি অবজেক্ট রিটার্ন করতে পারি।
পদ্ধতি ১: টাপল ব্যবহার করে
def func(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return (y0, y1, y2)
তবে, রিটার্ন করার মান সংখ্যা বেড়ার সাথে সাথে উপরের প্রোগ্রাম সমস্যাযুক্ত হয়ে ওঠে। যদি ছয় বা সাত মান রিটার্ন করতে চাই? নিশ্চিতই টাপল করতে পারি, কিন্তু ক কোন মান কোথায় সেটা ভুলে যাওয়া সহজ। অপরদিকে, যেখান থেকে রিসিভ করব সেখানে আনপ্যাক করা একটু গুলগুলিয়া।
পদ্ধতি ২: ডিকশনারি ব্যবহার করে
একটি ভালো সমাধান হল ডিকশনারি ব্যবহার করা।
def func(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return {'y0': y0, 'y1': y1, 'y2': y2}
এখন, আমাদের রিটার্নড অবজেক্টের একটি নির্দিষ্ট মেম্বার প্রজেক্ট আউট করার মেকানিজম আছে।
উদাহরণস্বরূপ:
result['y1']
পদ্ধতি ৩: ক্লাস ব্যবহার করে
অন্য একটি অপশন হল ক্লাস ব্যবহার করা, যেখানে আমরা একটি স্পেশালাইজড স্ট্রাকচার রিটার্ন করতে পারি।
class ReturnValue(object):
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return ReturnValue(y0, y1, y2)
পদ্ধতি ৪: লিস্ট ব্যবহার করে
আরেকটি পদ্ধতি হল লিস্ট ব্যবহার করা।
def func(x):
result = [x + 1]
result.append(x * 3)
result.append(y0 ** 3)
return result
পদ্ধতি ৫: জেনারেটর ব্যবহার করে
যদি অনেক বেশি মান রিটার্ন করতে হয় তবে সিকোয়েন্স ব্যবহার করলে সিস্টেম রিসোর্স বেশি খরচ হতে পারে। সেক্ষেত্রে yield ব্যবহার করে এক-এক করে মান রিটার্ন করার অপশন নেওয়া যায়।
def func(x):
y0 = x + 1
yield y0
yield x * 3
yield y0 ** 3
কোন পদ্ধতিটি একাধিক মান রিটার্ন করার জন্য সেরা?
এটি সম্পূর্ণ আপনার পছন্দ বা রিকোয়ারমেন্টের ওপর নির্ভর করে, কোন মেথড আপনার ভালো লাগে। আপনি ডিকশনারি রুট বেছে নিতে পারেন কারণ এতে কম সেট-আপ ওয়ার্ক লাগে। অথবা ক্লাস রুট বেছে নিতে পারেন কারণ এটি ডিকশনারি কী রিপ্রেজেন্ট করে সেটা लेकर কনফিউশন এড়াতে সাহায্য করতে পারে। অথবা এক-এক করে মান যিল্ড করার জন্য জেনারেটর বেছে নিতে পারেন।