पायथन मानक पुस्तकालय में डिस मॉड्यूल मानव-पठनीय रूप में इसे अलग करके पायथन बाइटकोड के विश्लेषण के लिए उपयोगी विभिन्न कार्य प्रदान करता है। यह अनुकूलन करने में मदद करता है। बाइटकोड दुभाषिया का एक संस्करण-विशिष्ट कार्यान्वयन विवरण है।
डिस () फ़ंक्शन
फ़ंक्शन डिस () किसी भी पायथन कोड स्रोत यानी मॉड्यूल, क्लास, मेथड, फंक्शन या कोड ऑब्जेक्ट का डिसबैलेंस्ड रिप्रेजेंटेशन जेनरेट करता है।
>>> def hello():print ("hello world")>>> import dis>>> dis.dis(hello)2 0 LOAD_GLOBAL 0 (प्रिंट) 3 LOAD_CONST 1 ('हैलो वर्ल्ड') 6 CALL_FUNCTION 1 (1 स्थितीय, 0 कीवर्ड जोड़ी) 9 POP_TOP 10 LOAD_CONST 0 (कोई नहीं) 13 RETURN_VALUE
बाइटकोड विश्लेषण एपीआई को बाइटकोड वर्ग में परिभाषित किया गया है। इसका कंस्ट्रक्टर बाइटकोड ऑब्जेक्ट देता है जिसमें बाइटकोड का विश्लेषण करने के लिए निम्नलिखित तरीके होते हैं
बाइटकोड ()
हे कंस्ट्रक्टर। किसी फ़ंक्शन, जनरेटर, विधि, स्रोत कोड की स्ट्रिंग या कोड ऑब्जेक्ट से संबंधित बाइटकोड का विश्लेषण करें। यह कई कार्यों के लिए एक सुविधाजनक आवरण है
स्ट्रिंग में x के लिए 'प्रिंट', ऑफसेट =0, start_line =2, is_jump_target =गलत) निर्देश (opname ='LOAD_CONST', opcode =100, arg =1, argval ='हैलो वर्ल्ड', argrepr ="'हैलो वर्ल्ड'", ऑफ़सेट =3, start_line =कोई नहीं, is_jump_target =False) निर्देश (opname ='CALL_FUNCTION', opcode =131, arg =1, argval =1, argrepr ='1 पोजिशनल, 0 कीवर्ड पेयर', ऑफ़सेट =6, start_line =कोई नहीं, is_jump_target =गलत) निर्देश (opname ='POP_TOP', opcode =1, arg =कोई नहीं, argval =कोई नहीं, argrepr ='', ऑफ़सेट =9, start_line =कोई नहीं, is_jump_target =False) निर्देश (opname ='LOAD_CONST', opcode =100, arg =0, argval =कोई नहीं, argrepr ='कोई नहीं', ऑफ़सेट =10, start_line =कोई नहीं, is_jump_target =False) निर्देश (opname ='RETURN_VALUE', opcode =83, arg =कोई नहीं, argval =कोई नहीं, argrepr ='', ऑफ़सेट =13, start_line =कोई नहीं, is_jump_target =False)code_info()
यह फ़ंक्शन पायथन कोड ऑब्जेक्ट की जानकारी देता है।
>>> dis.code_info(hello)"Name:hello\nफाइलनाम:\nआर्ग्युमेंट काउंट:0\nकेडब्ल्यू-ओनली आर्गुमेंट्स:0\nस्थानीय लोगों की संख्या:0\nस्टैक साइज:2\nफ्लैग्स:अनुकूलित, NEWLOCALS, NOFREE\nस्थिरांक:\n 0:कोई नहीं\n 1:'हैलो वर्ल्ड'\nनाम:\n 0:प्रिंट"
show_code()
यह फ़ंक्शन पायथन मॉड्यूल, फ़ंक्शन या वर्ग की विस्तृत कोड जानकारी प्रिंट करता है।
>>> dis.show_code(hello)Name:helloFilename:Argument count:0Kw-only तर्क:0स्थानीय लोगों की संख्या:0Stack आकार:2Flags:OPTIMIZED, NEWLOCALS, NOFREEConstants:0:कोई नहीं 1:' हैलो वर्ल्ड'नाम:0:प्रिंट करें
डिसेबल ()
यह फ़ंक्शन एक कोड ऑब्जेक्ट को अलग करता है और आउटपुट को निम्नलिखित कॉलम में विभाजित करता है -
-
पंक्ति संख्या, प्रत्येक पंक्ति के पहले निर्देश के लिए
-
वर्तमान निर्देश, के रूप में दर्शाया गया है -->,
-
एक लेबल वाला निर्देश, जिसे>>,
. के साथ दर्शाया गया है -
निर्देश का पता,
-
ऑपरेशन कोड नाम,
-
संचालन पैरामीटर, और
-
कोष्ठक में पैरामीटर की व्याख्या।
>>> codeInString ='a =5\nb =6\nsum =a + b \ nprint("sum =",sum)'>>> codeObejct =compile(codeInString, 'sumstring', 'exec')>>> dis.disassembly(codeObejct)
आउटपुट
1 0 LOAD_CONST 0 (5) 3 STORE_NAME 0 (a)2 6 LOAD_CONST 1 (6) 9 STORE_NAME 1 (b)3 12 LOAD_NAME 0 (a) 15 LOAD_NAME 1 (b) 18 BINARY_ADD 19 STORE_NAME 2 (योग) 4 22 LOAD_NAME 3 (प्रिंट) 25 LOAD_CONST 2 ('योग =') 28 LOAD_NAME 2 (योग) 31 CALL_FUNCTION 2 (2 स्थितीय, 0 कीवर्ड जोड़ी) 34 POP_TOP 35 LOAD_CONST 3 (कोई नहीं) 38 RETURN_VALUE
get_instructions()
यह फ़ंक्शन आपूर्ति किए गए फ़ंक्शन, विधि, स्रोत कोड स्ट्रिंग या कोड ऑब्जेक्ट में निर्देशों पर एक पुनरावर्तक देता है। इटरेटर आपूर्ति कोड में प्रत्येक ऑपरेशन का विवरण देते हुए टुपल्स नामक निर्देश की एक श्रृंखला उत्पन्न करता है।
>>> it=dis.get_instructions(code)>>> for i इसमें:प्रिंट (i) इंस्ट्रक्शन (opname ='LOAD_CONST', opcode =100, arg =0, argval =", लाइन 2>, argrepr ='<कोड ऑब्जेक्ट हैलो 0x02A9BA70 पर, फ़ाइल "<डिससेप्लर>", लाइन 2>', ऑफ़सेट =0, start_line =2, is_jump_target =False) निर्देश (opname ='LOAD_CONST', opcode =100, arg =1, argval ='hello', argrepr ="'hello'", ऑफ़सेट =3, start_line =कोई नहीं, is_jump_target =False) निर्देश (opname ='MAKE_FUNCTION', opcode =132, arg =0, argval =0, argrepr ='', ऑफ़सेट =6, start_line =कोई नहीं, is_jump_target =False) निर्देश (opname ='STORE_NAME', opcode =90, arg =0, argval ='hello', argrepr =' हैलो', ऑफसेट =9, start_line =कोई नहीं, is_jump_target =गलत) निर्देश (opname ='LOAD_CONST', opcode =100, arg =2, argval =कोई नहीं, argrepr ='कोई नहीं', ऑफ़सेट =12, start_line =कोई नहीं, is_jump_target =गलत) निर्देश (opname ='RETURN_VALUE', opcode =83, arg =कोई नहीं, argval =कोई नहीं, argrepr ='', ऑफ़सेट =15, start_line =कोई नहीं, is_jump_target =False)
कार्यों की जानकारी नीचे दिखाए गए मापदंडों के साथ टपल जैसी वस्तु के रूप में होती है -
निर्देश वें> <वें शैली ="पाठ-संरेखण:केंद्र;"> बाइटकोड संचालन के लिए विवरण वें> | |
---|---|
ऑपकोड | संचालन के लिए संख्यात्मक कोड, नीचे सूचीबद्ध ओपकोड मानों और ओपकोड संग्रह में बाइटकोड मानों के अनुरूप। |
opname | ऑपरेशन के लिए मानव पठनीय नाम |
आर्ग | संचालन के लिए संख्यात्मक तर्क (यदि कोई हो), अन्यथा कोई नहीं |
अर्गवल | समाधानित arg मान (यदि ज्ञात हो), अन्यथा arg . के समान |
आर्गरेप्र | ऑपरेशन तर्क का मानव पठनीय विवरण |
ऑफसेट | बाइटकोड अनुक्रम के भीतर संचालन का सूचकांक शुरू करें |
शुरू_लाइन | इस ऑपोड द्वारा शुरू की गई लाइन (यदि कोई हो), अन्यथा कोई नहीं |
is_jump_target | सच है अगर अन्य कोड यहां कूदता है, अन्यथा गलत |