नहीं, यह नहीं है ।
CPython बाइट कोड का संकलन केवल एक छोटे से पीपहोल ऑप्टिमाइज़र के माध्यम से पारित किया जाता है जिसे केवल मूल अनुकूलन करने के लिए डिज़ाइन किया गया है ( इन अनुकूलन पर अधिक के लिए परीक्षण सूट में test_peepholer.py देखें )।
वास्तव में क्या होने जा रहा है, इस पर एक नज़र डालने के लिए, dis
उत्पन्न निर्देशों को देखने के लिए * का उपयोग करें । पहले फ़ंक्शन के लिए, असाइनमेंट युक्त:
from dis import dis
dis(func)
2 0 LOAD_CONST 1 (42)
2 STORE_FAST 0 (a)
3 4 LOAD_FAST 0 (a)
6 RETURN_VALUE
जबकि, दूसरे समारोह के लिए:
dis(func2)
2 0 LOAD_CONST 1 (42)
2 RETURN_VALUE
पहले में दो और (तेज़) निर्देशों का उपयोग किया जाता है: STORE_FAST
और LOAD_FAST
। ये fastlocals
वर्तमान निष्पादन फ्रेम की सरणी में एक त्वरित स्टोर और मूल्य को हड़प लेते हैं । फिर, दोनों मामलों में, एक RETURN_VALUE
प्रदर्शन किया जाता है। इसलिए, दूसरे को निष्पादित करने के लिए आवश्यक कम आदेशों के कारण कभी-कभी थोड़ा तेज होता है।
सामान्य तौर पर, यह ध्यान रखें कि CPython संकलक इसके द्वारा किए जाने वाले अनुकूलन में रूढ़िवादी है। यह नहीं है और अन्य संकलक के रूप में स्मार्ट होने की कोशिश नहीं करता है (जो सामान्य रूप से, साथ काम करने के लिए बहुत अधिक जानकारी है)। मुख्य डिजाइन लक्ष्य, स्पष्ट रूप से सही होने के अलावा, ए) इसे सरल रखें और बी) इन्हें संकलित करने में जितना संभव हो उतना तेज हो ताकि आप यह भी ध्यान न दें कि एक संकलन चरण मौजूद है।
अंत में, आपको इस तरह के छोटे मुद्दों के साथ खुद को परेशान नहीं करना चाहिए। गति में लाभ छोटे, निरंतर और, इस तथ्य से शुरू किए गए ओवरहेड द्वारा बौना है कि पायथन की व्याख्या की गई है।
* dis
एक छोटा पायथन मॉड्यूल है जो आपके कोड को असम्बद्ध करता है, आप इसका उपयोग पायथन बाइटकोड को देखने के लिए कर सकते हैं जिसे वीएम निष्पादित करेगा।
नोट: जैसा कि @Jorn Vernee द्वारा एक टिप्पणी में कहा गया है, यह पायथन के CPython कार्यान्वयन के लिए विशिष्ट है। यदि वे चाहें तो अन्य कार्यान्वयन अधिक आक्रामक अनुकूलन कर सकते हैं, सीपीथॉन नहीं करता है।
dis.dis(..)
दोनों का उपयोग करते हैं तो आप देखते हैं कि अंतर है , इसलिए हाँ। लेकिन अधिकांश वास्तविक दुनिया के अनुप्रयोगों में फ़ंक्शन के प्रसंस्करण की देरी की तुलना में इसका ओवरहेड इतना अधिक नहीं है।