Yield কি সেটা বোঝার জন্য Generator বোঝা লাগবে । আবার Generator কি সেটা বোঝার জন্য Iterables বুঝতে হবে । কি প্রথমেই মাথা ঘুরে গেল ? আচ্ছা মাথা ঘুরলে ঘুরতে দেন :D আমরা শুরু করে দেই ।
Iterables কি ?
আমরা যখন কোন লিস্ট ক্রিয়েট করি । আমরা লিস্টের আইটেম গুলি একটা একটা করে রিড করতে পারি । এটাকেই বলা হচ্ছে iteration
code:
এখানে my_list হল iterable . যখন আমরা list comprehension ব্যবহার করে কোন লিস্ট ক্রিয়েট করি সেটাও একটা iterable ।
code :
Python এ যেসব জিনিস iterable যেমন: টাপল, লিস্ট, ফাইল, স্ট্রিং, .... ইত্যাদি কে আমরা for .... in ...: দিয়ে রিড করতে পারবো । ডাটা খুব সহজেই রিড করার জন্য এইটা খুব কাজে দেয় । কিন্তু এর একটা সমস্যা আছে । সেটা হল । এইটা সব সময় লিস্টের আইটেম গুলিকে মেমরি তে ষ্টোর করে রাখে । এখন আমাদের সবসময় মেমরি তে লিস্ট আইটেম গুলি সেভ করে নাও রাখা লাগতে পারে । তো এইটা আমরা কি ভাবে সমাধান করবো ?
Generators কি ?
Generators গুলো হল একধরনের iterators । কিন্তু আমরা কেবল একবারই generator এ iterate করতে পারি । এর কারণ হল generator সব ভেলু কে মেমরি তে ষ্টোর করে রাখে না ।
code :
এটা ঠিক আগের মতই । এখানে শুধু [ ] এর পরিবর্তে ( ) ব্যবহার করা হয়েছে । কিন্তু এখানে কেবল একবারই আমরা for item in my_generator : ব্যবহার করতে পারবো । কারণ এইটা একটা generator এবং এইটা শুধু একবারই ব্যবহার করা যায় । এইটা কাজ করে এইভাবে প্রথমে শূন্য ( ০ ) ইনডেক্স এ যেটা আছে সেটা প্রসেস করে এবং সেটার ( ০ ) কথা ভুলে যায় । তারপর ১ এ যেটা আছে সেটা প্রসেস করে এবং সেটা ভুলে যায় । তারপর ২ এ যেটা আছে সটা প্রসেস করে এবং ২ এর কথা ভুলে যায় । এই ভাবে একটার পর একটা চলতে থাকে যতক্ষণ না সবগুলি রিড করা হয়ে যায় ।
Yield কি ?
Yield হল একটা keyword যেটা কিছুটা return এর মতো কাজ করে । কিন্তু return ও yield এর মধ্যে পার্থক্য হল কোন ফাংশন থেকে yield যেটা return করবে সেটা অবশ্যই একটা generator হবে । অর্থাৎ yield একটা generator রিটার্ন করে ।
code:
উপরে যে উদাহরণ দেয়া হল সেটা খুব সাধারণ একটা উদাহরণ । এটা খুব কাজে দেয় যখন আমরা জানি যে আমরা যে ফাংশন ক্রিয়েট করেছি সেটা অনেক গুলো ভেলু রিটার্ন করে । এবং সেই ভালু গুলি আমাদের কেবল একবারই রিড করার প্রয়োজন হবে । এই ধরনের situation এটা ব্যবহার করে আমরা আমাদের মেমরি খরচ অনেক কমাতে পারি । কারণ ফাংশনের রিটার্ন করা এই বিশাল পরিমাণ ডাটা আমাদের কে মেমরি তে সেভ করে রাখতে হচ্ছে না :)
ধন্যবাদ :)
Comments
Post a Comment