জেনারেটরগুলি প্রয়োগ করা খুব সহজ, তবে বুঝতে কিছুটা কঠিন।
জেনারেটর ইটারেবল তৈরি করতে ব্যবহৃত হয়, তবে ভিন্ন পদ্ধতির সাথে। জেনারেটরগুলি এমন সাধারণ ফাংশন যা একবারে একটি করে বিশেষ উপায়ে ইটারেবল আইটেমগুলির সেট দেয়।
for স্টেটমেন্ট ব্যবহার করে আইটেমগুলির একটি সেটের উপর যখন একটি পুনরাবৃত্তি শুরু হয়, তখন জেনারেটরটি চালিত হয়। একবার জেনারেটরের ফাংশন কোড “yield” স্টেটমেন্টে পৌঁছানোর পরে, জেনারেটর সেট থেকে একটি নতুন মান ফিরিয়ে, লুপের জন্য তার এক্সিকিউশনটি ফেরত দেয়। জেনারেটরের ফাংশন যতগুলি মান (যতটা সম্ভব অসীম) তার ইচ্ছামতো তৈরি করতে পারে, যার ফলে প্রতিটি তার পরিবর্তে আসে।
return এবং yield এর মধ্যে পার্থক্য হল return লুপকে ব্রেক করে এবং yield লুপকে ব্রেক করে না শুধু যা yield করতে বলা হয়েছে তার মান বের করে আবার লুপে যায়।
এখানে একটি জেনারেটর ফাংশনের একটি সাধারণ উদাহরণ যা ৭ টি র্যানডম পূর্ণসংখ্যা ফেরত দেয়:
import random
def lottery():
# returns 6 numbers between 1 and 40
for i in range(6):
yield random.randint(1, 40)
# returns a 7th number between 1 and 15
yield random.randint(1,15)
for random_number in lottery():
print("And the next number is... %d!" %(random_number))
এই কোডের ফলাফল সম্পূর্ণ র্যানডম এখানে একটি ওেয়া হল:
And the next number is... 40!
And the next number is... 9!
And the next number is... 22!
And the next number is... 11!
And the next number is... 9!
And the next number is... 25!
And the next number is... 14! # The numbers are random
এই ফাংশনটি সিদ্ধান্ত নেয় যে কীভাবে নিজে থেকে এলোমেলো সংখ্যা তৈরি করা যায় এবং yield স্টেটমেন্টগুলি একবারে কার্যকর করা হয়, মূল for লুপে এক্সিকিউশন ফিরিয়ে আনার মাঝে বিরতি দিয়ে।