পাইথন কোড ফাংশনের ভেতর গ্লোবাল স্কোপের চেয়ে দ্রুত চলে। এর দুটি মূল কারণ: লোকাল ভেরিয়েবল স্টোরেজ অপ্টিমাইজেশন এবং অপকোড প্রেডিকশন।
১. লোকাল ভেরিয়েবল স্টোরেজ: ফিক্সড-সাইজ অ্যারে
- ফাংশন কম্পাইল হওয়ার সময় লোকাল ভেরিয়েবলগুলো একটি ফিক্সড-সাইজ অ্যারে-এ স্টোর হয় (ডিকশনারি নয়)।
- ভেরিয়েবল নামগুলো ইনডেক্সে ম্যাপ হয়।
- লোকাল ভেরিয়েবল এক্সেস = পয়েন্টার লুকআপ + রেফ কাউন্ট ইনক্রিমেন্ট — খুব দ্রুত।
- গ্লোবাল ভেরিয়েবল এক্সেস = ডিকশনারি হ্যাশ লুকআপ — আপেক্ষিক ধীর।
২. অপকোড প্রেডিকশন (Opcode Prediction)
- CPython (স্ট্যান্ডার্ড পাইথন ইমপ্লিমেন্টেশন) বাইটকোড ইন্টারপ্রেট করে।
- ফাংশনের ভেতর কিছু বাইটকোড ইনস্ট্রাকশন (যেমন
LOAD_FAST,STORE_FAST) স্পেশালাইজড এবং প্রেডিক্টেবল। - ইন্টারপ্রেটর লুপ এই ইনস্ট্রাকশনগুলো দ্রুত এক্সিকিউট করতে পারে।
CPython কী?
CPython হলো পাইথন ওয়েবসাইট থেকে ডাউনলোড করা স্ট্যান্ডার্ড পাইথন ইমপ্লিমেন্টেশন, যা C ভাষায় লেখা। এটি পাইথন কোডকে বাইটকোডে কম্পাইল করে এবং একটি ইভ্যালুয়েশন লুপে ইন্টারপ্রেট করে।
প্রায়োগিক টিপস
- লুপ বা পারফরম্যান্স-ক্রিটিক্যাল কোড ফাংশনের ভেতর রাখুন।
- গ্লোবাল ভেরিয়েবল কম ব্যবহার করুন।
globalকিওয়ার্ড ব্যবহার করলে কম্পাইলারSTORE_FASTবদলেSTORE_GLOBALব্যবহার করে (ধীর হয়)।