সংক্ষেপে, যখনই নিয়ন্ত্রণ আপনার প্রোগ্রামে রিটার্ন স্টেটমেন্টে পৌঁছায়, তখনই প্রোগ্রামের এক্সিকিউশন বন্ধ হয়ে যায় এবং বাকি স্টেটমেন্টগুলো কার্যকর করা হবে না।
যাইহোক, ফলনের ক্ষেত্রে, যখনই নিয়ন্ত্রণ আপনার প্রোগ্রামের ফলন বিবৃতিতে পৌঁছায়, তখন আপনার প্রোগ্রামের সম্পাদন স্থগিত করা হয় এবং পরে আমরা ফাংশনে অন্যান্য বিবৃতিগুলি চালিয়ে যেতে পারি।
আসুন উভয় বিবৃতি বিস্তারিতভাবে বুঝতে পারি।
ফলন
একটি ফাংশনে ফলন বিবৃতি ব্যবহার করে ফাংশনটিকে একটি জেনারেটর ফাংশন করে যা একটি লুপে ব্যবহার করা যেতে পারে। যখন ফাংশনটি চলছে এবং ফলন বিবৃতি কার্যকর হয়, তখন ফলনের পরের মানটি লুপে ফিরে যায় যা এটিকে বলে। পরের বার লুপ পুনরাবৃত্তি হলে, ফলন বিবৃতিগুলির সাথে সাথেই ফাংশন শুরু হয়৷
def func(): yield 1 yield 2 yield 3 for num in func(): print(num * num)
আউটপুট
1 4 9
উপরের প্রোগ্রামে, যে লুপটি ফাংশনটি চালু করে তা সম্পূর্ণ হবে যখন ফাংশন ফাংশনটি সম্পূর্ণ হবে – হয় ফাংশনের শেষ (func()) অথবা একটি রিটার্ন স্টেটমেন্ট পূরণ করে।
যাইহোক, একই জেনারেটর ফাংশন ব্যবহার করে এমন যেকোনো নতুন লুপ আবার শুরু থেকে ফাংশনটি কার্যকর করবে।
ফেরত
একটি ফেরত বিবৃতি,
-
একটি ফাংশনের সঞ্চালন বন্ধ করতে এবং ঐচ্ছিকভাবে কলারের কাছে একটি মান ফেরত দিতে ব্যবহৃত হয়। একটি ফাংশন যার একটি রিটার্ন আছে (কিন্তু একটি ফলন নয়) একটি লুপে ব্যবহার করা যাবে না (উপরের ফলনের বিপরীতে)।
-
যদি একটি ফাংশন যা পূর্বে নির্বাহ করা হয়েছে তাকে আবার কল করা হয়, ফাংশনটি শুরু থেকে কার্যকর করা শুরু করে (উপরের ফলন থেকে ভিন্ন)।
কখন রিটার্ন বা ফলন ব্যবহার করবেন?
রিসোর্স সীমাবদ্ধতার কারণে বা মেমরিতে সম্পূর্ণ সিকোয়েন্স সংরক্ষণ করতে না চাইলেও যখন আমরা একটি সিকোয়েন্সের উপর পুনরাবৃত্তি করতে চাই তখন ফলন ব্যবহার করার পরামর্শ দেওয়া হয়। অন্যান্য ক্ষেত্রে আমরা রিটার্ন স্টেটমেন্ট ব্যবহার করার কথা ভাবতে পারি।
পূর্ণসংখ্যার বর্গ তৈরি করতে ফলন বিবৃতি ব্যবহার করে আরেকটি প্রোগ্রাম দেখি।
def Square(): i = 1; # An Infinite loop to generate squares while True: yield i*i i += 1 # Next execution resumes from this point for num in Square(): if num > 100: break print(num)
আউটপুট
1 4 9 16 25 36 49 64 81 100
ফলন বিবৃতিটি সাধারণত চেষ্টার ট্রাই ক্লজে ব্যবহৃত হয় না …. অবশেষে ব্লক করুন কারণ কোন গ্যারান্টি নেই যে জেনারেটর পুনরায় চালু হবে, তাই কোন গ্যারান্টি নেই যে অবশেষে ব্লকটি কার্যকর হবে।