এটি পাওয়া যায় যে যদি পাইথন কোড সাধারণত চালানো হয় এবং তারপর যদি এটি একটি পাইথন ফাংশনে চালানো হয় তবে পরবর্তী ক্ষেত্রে এটি দ্রুত চলে। আমি জানতে চাই কেন পাইথন কোড একটি ফাংশনে দ্রুত চলে।
এটি সাধারণত পাওয়া যায় যে পাইথন ফাংশনে গ্লোবাল ভেরিয়েবলের তুলনায় স্থানীয় ভেরিয়েবল সংরক্ষণ করা দ্রুত। এটি নীচের হিসাবে ব্যাখ্যা করা যেতে পারে।
স্থানীয়/গ্লোবাল ভেরিয়েবল স্টোরের সময় ছাড়াও, অপকোড পূর্বাভাস ফাংশনটিকে দ্রুততর করে তোলে।
CPython হল আসল পাইথন বাস্তবায়ন আমরা Python.org থেকে ডাউনলোড করি। এটিকে পরবর্তী পাইথন বাস্তবায়ন থেকে আলাদা করার জন্য এবং পাইথন প্রোগ্রামিং ভাষা থেকে ভাষা ইঞ্জিনের বাস্তবায়নকে আলাদা করার জন্য এটিকে CPython বলা হয়।
CPython C ভাষায় প্রয়োগ করা হয়। CPython আমাদের পাইথন কোডকে বাইটকোডে কম্পাইল করে এবং সেই বাইটকোডকে একটি মূল্যায়ন লুপে ব্যাখ্যা করে।
যখন একটি ফাংশন কম্পাইল করা হয়, তখন স্থানীয় ভেরিয়েবলগুলি একটি নির্দিষ্ট আকারের অ্যারেতে সংরক্ষণ করা হয় (ডিক্ট নয়) এবং ভেরিয়েবলের নামগুলি ইনডেক্সে বরাদ্দ করা হয়। এটি সম্ভব কারণ আপনি গতিশীলভাবে একটি ফাংশনে স্থানীয় ভেরিয়েবল যোগ করতে পারবেন না। তারপরে একটি স্থানীয় ভেরিয়েবল পুনরুদ্ধার করা হল আক্ষরিক অর্থে তালিকায় একটি পয়েন্টার লুকআপ এবং PyObject-এ একটি রিফকাউন্ট বৃদ্ধি যা অপ্রয়োজনীয়৷
এটিকে একটি গ্লোবাল লুকআপের সাথে তুলনা করুন, যা হ্যাশ এবং আরও অনেক কিছু জড়িত একটি সত্য ডিক্ট অনুসন্ধান। ঘটনাক্রমে, এই কারণেই যদি আপনি একটি ভেরিয়েবলকে বৈশ্বিক হতে চান তাহলে আপনাকে গ্লোবাল নির্দিষ্ট করতে হবে:আপনি যদি কখনও একটি স্কোপের ভিতরে একটি ভেরিয়েবলকে বরাদ্দ করেন, তবে কম্পাইলার তার অ্যাক্সেসের জন্য STORE_FAST ইস্যু করবে যদি না আপনি এটি না করতে বলেন৷
যাইহোক, গ্লোবাল লুকআপগুলি এখনও বেশ অপ্টিমাইজ করা হয়েছে৷ অ্যাট্রিবিউট লুকআপ সত্যিই ধীর গতির!