bytecodes से पहले नंबर मूल द्विआधारी bytecodes में ऑफसेट हैं:
>>> func.__code__.co_code
'd\x01\x00}\x00\x00d\x00\x00S'
कुछ bytecodes में अतिरिक्त जानकारी (तर्क) के साथ आते है कि प्रभावित करती है कि किस प्रकार प्रत्येक बाईटकोड काम करता है, ऑफसेट bytestream में क्या स्थिति में आपको बताता है बाइटकोड मिला था।
LOAD_CONST
बाइटकोड (ASCII d
, हेक्स 64) इसके बाद बाइटकोड से जुड़े स्थिर के संदर्भ में दो अतिरिक्त बाइट एन्कोडिंग किया जाता है, उदाहरण के लिए। नतीजतन, STORE_FAST
ऑपोड (ASCII }
, हेक्स 7 डी) इंडेक्स 3.
dis
module documentation सूचीबद्ध करता है जो प्रत्येक निर्देश का अर्थ है। LOAD_CONST
के लिए, यह कहता है:
स्टैक पर co_consts[consti]
धक्का देता है।
जो co_consts
संरचना को संदर्भित करता है जो हमेशा कोड ऑब्जेक्ट के साथ मौजूद होता है; संकलक निर्माण करती है कि:
>>> func.__code__.co_consts
(None, 1)
कि संरचना (बाईटकोड एनकोड एक 1 में 01 00 बाइट्स), और dis
से opcode भार सूचकांक 1 कि ऊपर देखा गया है आप के लिए; यह मान 1
है। स्थानीय co_varnames[var_num]
में
स्टोर टीओएस:
अगले निर्देश, STORE_FAST
रूप में वर्णित है।
यहां TOS स्टैक के शीर्ष को संदर्भित करता है; ध्यान दें कि LOAD_CONST
बस स्टैक पर कुछ धक्का दिया, 1
मान। co_varnames
एक और संरचना है; यह स्थानीय चर नाम का संदर्भ है, opcode संदर्भ सूचकांक 0:
>>> func.__code__.co_varnames
('x',)
dis
भी है कि ऊपर देखा और नाम आप अपने कोड में इस्तेमाल किया x
है।इस प्रकार, इस ओपोड ने 1
को x
में संग्रहीत किया।
सूचकांक 0 से ढेर,
RETURN_VALUE
द्वारा पीछा किया पर
एक और LOAD_CONST
भार None
:
समारोह के फोन करने वाले को टीओएस के साथ रिटर्न।
इसलिए यह निर्देश स्टैक के शीर्ष (None
स्थिरांक के साथ) लेता है और इस कोड ब्लॉक से वापस आता है। None
स्पष्ट return
कथन के बिना फ़ंक्शंस के लिए डिफ़ॉल्ट वापसी मान है।
आप dis
उत्पादन, से कुछ लाइन नंबर छोड़े गए:
>>> dis.dis(func)
2 0 LOAD_CONST 1 (1)
3 STORE_FAST 0 (x)
6 LOAD_CONST 0 (None)
9 RETURN_VALUE
नोट पहली पंक्ति पर 2
; वह मूल स्रोत में पंक्ति संख्या है जिसमें पाइथन कोड शामिल है जिसका उपयोग इन निर्देशों के लिए किया गया था। पायथन कोड ऑब्जेक्ट्स में co_lnotab
और co_firstlineno
विशेषताएँ हैं जो आपको मूल स्रोत में लाइन नंबरों पर बाइटकोड को मानचित्रित करने देती हैं। dis
एक डिस्सेप्लर प्रदर्शित करते समय यह आपके लिए करता है।
मुझे यकीन नहीं है कि क्या आप यह जवाब पढ़ते हैं http://stackoverflow.com/a/12673195/973699 – DevC
@DevC मैंने यह प्रश्न पढ़ा, लेकिन समस्या यह थी कि मैं बस एक बहुत ही सरल "फ़ंक्शन" के लिए स्पष्टीकरण चाहता था , जैसा कि मैंने अपने प्रश्न में उल्लेख किया है, ताकि मैं कम से कम बाइट कोड में क्या हो रहा है इसका थोड़ा सा विचार प्राप्त कर सकूं। –