Skip to main content

পাইথনে Yield কিভাবে কাজ করে ?


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

Popular posts from this blog

[Python] *args vs **Kwargs

পাইথনে ফাংশন আর্গুমেন্ট *args ও **kwargs আমরা মাঝে মাঝেই পাইথনের ফাংশনের প্যারামিটার হিসাবে *args, ** kwargs কে দেখতে পাই । তো এগুলো আসলে কি ? এবং এগুলো কিভাবে কাজ করে ? এই দুইটা বুঝতে হলে প্রথমে আমাদের আর্গুমেন্ট কি সেটা বুঝতে হবে । আর্গুমেন্ট কোন ফাংশন কল করার সময় আমার ফাংশনে যে ভেলু pass করি করি সেটা কে বলা হয় আর্গুমেন্ট । পাইথনে দুই ধরনের আর্গুমেন্ট আছে, Keyword Argument. Positional Argument. Keyword Argument যে সকল আর্গুমেন্টের সাথে তার আইডেন্টিফায়ার থাকে সেসব আর্গুমেন্ট কে keyword argument বলে । উদাহরণ দিলে পরিষ্কার হয়ে যাবে। মনে করেন আমাদের এইরকম একটা ফাংশন আছে, উপরে আমরা ৪ নং লাইনে ফাংশন কল করার সময় যে দুইটা আর্গুমেন্ট pass করলাম সেটাকে বলা হয় keyword argument. এখানে name = 'Arif' এ name এবং age = 24 এর age আর্গুমেন্ট দুইটির আইডেন্টিফায়ার । কারণ name, age দিয়ে আমরা আলাদা ভাবে দুইটা আর্গুমেন্টকে আইডেন্টিফাই করতে পারছি । Positional Argument যে আর্গুমেন্ট গুলো keyword argument না সেগুলো কে positional argument বলে । এই ধরনের আর্গুমেন্টের কোন আইডেন্টি...