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

উবুন্টু তে Oracle SQL Developer ইন্সটল + এর সাথে MySQL Database Connecte করার উপায়

Oracle SQL Developer Tool Install করার জন্য আপনর  সিস্টেমে অবশ্যই জাভা - ৮ ইন্সটল করা থাকবে হবে । যদি জাভা - ৮  ইন্সটল করা না থাকে তবে  এই  লিঙ্ক  থেকে ইন্সটল করতে পারবেন । Part-1 : [ Install Oracle SQL Developer Tool ] উবুন্টুর জন্য Linux RPM  ফাইল টি ডাউনলোড করে নিন । এখন ডাউনলোড ফাইল টি Downloads ফোল্ডারে কপি করে রাখুন । এখন - Open Terminal (Ctrl + Alt + T) cd Downloads এখানে যদি আপনি ls command চালান তবে আপনি Downloads ফোল্ডারের আন্ডারে sqldeveloper_file_name.rpm নামে একটি .rpm ফাইল দেখতে পাবেন । এখন নিচের কমান্ড গুলা চালান  sudo apt-get install -y alien sudo alien --scripts sqldeveloper_file_name.rpm ২য় কমান্ডটি রান করলে .rpm ফাইল থেকে একটা .deb ফাইল জেনারেট হবে । এখন .deb ফাইলটি ইন্সটল করার জন্য এই কমান্ড রান করেন    sudo dpkg -i sqldeveloper_file_name.deb Part-2 : [ Connect to MySQL Database ] প্রথমে Connector/J  ডাউনলোড করে নিন । আপনি  Platform Independent ভার্সন ডাউনলোড করবেন । এখ...

[ UVa ] 10048 - Audiophobia

আমাকে কোন একটা শহরের একটা জায়গা থেকে অন্য একটা জায়গায় যেতে হবে । আমি বিভিন্ন রাস্তা ব্যাবহার করে আমার  কাঙ্ক্ষিত জায়গায় যেতে পারি । কিন্তু আমাকে এমন রাস্তা ব্যাবহার করে যেতে হবে যে রাস্তা দিয়ে গেলে আমাকে সবথেকে কম decibels এর শব্দ শুনতে হবে ।   এই সমস্যা টি সমাধান করার জন্য আমাদের কে  গ্রাফের ইনফরমেশন দেয়া হবে সেগুলো নিয়ে একটা Minimum Spanning Tree বানাতে হবে ।  এখন এই MST র উপর query করতে হলে আমাদের কে DFS/BFS চালাতে হবে ।  এইখান থেকে আমরা যে একটা নোড থেকে অন্য একটা নোডে যাওয়ার রাস্তা পাব তার মধ্যে খুজে দেখব কোন এজের ওয়েট সবথেকে বেশি । সেটাই আমাদের কে প্রিন্ট করেত হবে ।  যদি কোন রাস্তা না থাকে তবে no path প্রিন্ট করতে হবে ।  কোড : হ্যাপি কোডিং :)

Eclipse এ PyDev অফলাইনে কিভাবে ইন্সটল করা যায় ?

আমরা যদি Eclipse এ পাইথন ডেভেলপ করতে চাই তবে আমাদের PyDev ইন্সটল প্লাগিন ইন্সটল করা থাকতে হবে । PyDev ইন্সটল করার সবথেকে সহজে উপায় হল Eclipse এর Install New Software অপশন ব্যবহার করে ইন্সটল করা । কিন্তু এইটা মাঝে মাঝে সমস্যা হয় । কাজ করে না । এই জন্য আমরা PyDev প্লাগিন ম্যানুয়ালি ইন্সটল করতে পারব । এবং এটা করার জন্য আমরা যেটা করতে পারি সেটা হল : এই প্লাগিনের সর্বশেষ জিপ ভার্সন টি ডাউনলোড করুন  এখান থেকে জিপ ফাইল টি আনজিপ করুন । আনজিপ করলে আমরা features ও plugins নামে ২ ফাইল পাব  । এই ফাইল ২ টি কপি করে আমরা Eclipse সফটওয়্যারের dropins ফোল্ডারে পেস্ট করে দিব । এখন আমাদের Eclipse যদি চালু করা থাকে তবে Eclipse রিস্টার্ট দিব ।  আমাদের ইন্সটল ঠিক ভাবে হয়েছে কি না সেটা দেখার জন্য আমরা Window -> Preferences এ গিয়ে দেখব PyDev আছে কি না । যদি থাকে তবে এখন আপনি Eclipse এ পাইথনের জন্য কোড লিখতে পারবেন । ধন্যবাদ :)