Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन बाइटकोड के लिए डिस्सेबलर

पायथन मानक पुस्तकालय में डिस मॉड्यूल मानव-पठनीय रूप में इसे अलग करके पायथन बाइटकोड के विश्लेषण के लिए उपयोगी विभिन्न कार्य प्रदान करता है। यह अनुकूलन करने में मदद करता है। बाइटकोड दुभाषिया का एक संस्करण-विशिष्ट कार्यान्वयन विवरण है।

डिस () फ़ंक्शन

फ़ंक्शन डिस () किसी भी पायथन कोड स्रोत यानी मॉड्यूल, क्लास, मेथड, फंक्शन या कोड ऑब्जेक्ट का डिसबैलेंस्ड रिप्रेजेंटेशन जेनरेट करता है।

>>> 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
सच है अगर अन्य कोड यहां कूदता है, अन्यथा गलत

  1. चयन क्रम के लिए पायथन कार्यक्रम

    इस लेख में, हम Python 3.x में सिलेक्शन सॉर्ट और उसके कार्यान्वयन के बारे में जानेंगे। या पहले। चयन क्रम . में एल्गोरिथम, एक सरणी को पुनरावर्ती रूप से अनसोल्ड भाग से न्यूनतम तत्व ढूंढकर और शुरुआत में सम्मिलित करके सॉर्ट किया जाता है। किसी दिए गए सरणी पर चयन क्रम के निष्पादन के दौरान दो उप-सरणी बनते

  1. विंडोज़ पर पायथन प्रोग्रामिंग के लिए आईडीई

    इस लेख में, हम विंडोज़ के लिए पायथन पर उपलब्ध विभिन्न आईडीई के बारे में जानेंगे। पिचर्म इंटरएक्टिव पायथन कंसोल वेब ढांचे के लिए समर्थन तेज़ अपवर्तन समय कम विकास जुपिटर नोटबुक लगभग हर पायथन मॉड्यूल के साथ संगतता कम जगह और हार्डवेयर आवश्यकताएं इनबिल्ट टर्मिनल और कर्नेल सुविधाएं विज़ेट की एक विस्त

  1. पायथन कोड के लिए अनुकूलन युक्तियाँ?

    हालांकि हम सभी जानते हैं कि अजगर अन्य अनुपालन वाली भाषाओं की तरह तेज या कुशल नहीं है। हालाँकि, कई बड़ी कंपनियाँ हैं जो हमें दिखाती हैं कि पायथन कोड बहुत बड़े कार्यभार को संभाल सकता है जो दर्शाता है कि यह इतना धीमा नहीं है। इस खंड में, हम कुछ युक्तियों को देखने जा रहे हैं जिन्हें ध्यान में रखना चाहिए