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

पायथन बाइटकोड के लिए डिसअसेंबलर (dis मॉड्यूल)

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

dis() फ़ंक्शन

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

>>> def hello():
...     print("hello world")
...
>>> import dis
>>> dis.dis(hello)
  2           0 LOAD_GLOBAL              0 (print)
              3 LOAD_CONST               1 ('hello world')
              6 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
              9 POP_TOP
             10 LOAD_CONST               0 (None)
             13 RETURN_VALUE

Bytecode क्लास

बाइटकोड विश्लेषण API Bytecode क्लास में परिभाषित है। इसका कंस्ट्रक्टर Bytecode ऑब्जेक्ट लौटाता है जिसमें बाइटकोड का विश्लेषण करने के लिए निम्न मेथड्स होते हैं:

Bytecode()

यह कंस्ट्रक्टर है। एक फ़ंक्शन, जनरेटर, मेथड, सोर्स कोड स्ट्रिंग, या कोड ऑब्जेक्ट से संबंधित बाइटकोड का विश्लेषण करता है। यह कई फ़ंक्शन्स के चारों ओर एक सुविधाजनक रैपर है।

>>> string = dis.Bytecode(hello)
>>> for x in string:
...     print(x)
Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=0, starts_line=2, is_jump_target=False)
Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval='hello world', argrepr="'hello world'", offset=3, starts_line=None, is_jump_target=False)
Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='1 positional, 0 keyword pair', offset=6, starts_line=None, is_jump_target=False)
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=9, starts_line=None, is_jump_target=False)
Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=10, starts_line=None, is_jump_target=False)
Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=13, starts_line=None, is_jump_target=False)

code_info()

यह फ़ंक्शन पायथन कोड ऑब्जेक्ट की जानकारी लौटाता है।

>>> dis.code_info(hello)
"Name: hello\nFilename: <pyshell#2>\nArgument count: 0\nKw-only arguments: 0\nNumber of locals: 0\nStack size: 2\nFlags: OPTIMIZED, NEWLOCALS, NOFREE\nConstants:\n 0: None\n 1: 'hello world'\nNames:\n 0: print"

show_code()

यह फ़ंक्शन पायथन मॉड्यूल, फ़ंक्शन या क्लास की विस्तृत कोड जानकारी प्रिंट करता है।

>>> dis.show_code(hello)
Name: hello
Filename: <pyshell#2>
Argument count: 0
Kw-only arguments: 0
Number of locals: 0
Stack size: 2
Flags: OPTIMIZED, NEWLOCALS, NOFREE
Constants:
  0: None
  1: 'hello world'
Names:
  0: print

disassemble()

यह फ़ंक्शन एक कोड ऑब्जेक्ट को डिसअसेंबल करता है और आउटपुट को निम्न कॉलम में विभाजित करता है:

  • प्रत्येक लाइन की पहली इंस्ट्रक्शन के लिए लाइन नंबर
  • करंट इंस्ट्रक्शन, --> के रूप में इंगित
  • लेबल्ड इंस्ट्रक्शन, >> के साथ इंगित
  • इंस्ट्रक्शन का एड्रेस
  • ऑपरेशन कोड नाम
  • ऑपरेशन पैरामीटर्स
  • पैरामीटर्स की व्याख्या पैरेंथेसिस में
>>> codeInString = 'a = 5\nb = 6\nsum = a + b \nprint("sum = ",sum)'
>>> codeObejct = compile(codeInString, 'sumstring', 'exec')
>>> dis.disassemble(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 (sum)
4          22 LOAD_NAME                3 (print)
             25 LOAD_CONST               2 ('sum =')
             28 LOAD_NAME                2 (sum)
             31 CALL_FUNCTION            2 (2 positional, 0 keyword pair)
             34 POP_TOP
             35 LOAD_CONST               3 (None)
             38 RETURN_VALUE

get_instructions()

यह फ़ंक्शन सप्लाई किए गए फ़ंक्शन, मेथड, सोर्स कोड स्ट्रिंग या कोड ऑब्जेक्ट में इंस्ट्रक्शन्स पर एक इटरेटर लौटाता है। इटरेटर सप्लाई किए गए कोड में प्रत्येक ऑपरेशन का विवरण देने वाले Instruction नेम्ड टपल्स की एक श्रृंखला जनरेट करता है।

>>> it = dis.get_instructions(code)
>>> for i in it:
...     print(i)
Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=", line 2>, argrepr='", line 2>', offset=0, starts_line=2, is_jump_target=False)
Instruction(opname='LOAD_CONST', opcode=100, arg=1, argval='hello', argrepr="'hello'", offset=3, starts_line=None, is_jump_target=False)
Instruction(opname='MAKE_FUNCTION', opcode=132, arg=0, argval=0, argrepr='', offset=6, starts_line=None, is_jump_target=False)
Instruction(opname='STORE_NAME', opcode=90, arg=0, argval='hello', argrepr='hello', offset=9, starts_line=None, is_jump_target=False)
Instruction(opname='LOAD_CONST', opcode=100, arg=2, argval=None, argrepr='None', offset=12, starts_line=None, is_jump_target=False)
Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=15, starts_line=None, is_jump_target=False)

फ़ंक्शन की जानकारी टपल-जैसे ऑब्जेक्ट के रूप में निम्न पैरामीटर्स के साथ होती है:

Instruction बाइटकोड ऑपरेशन का विवरण
opcode ऑपरेशन के लिए न्यूमेरिक कोड, नीचे सूचीबद्ध ऑपकोड मानों और Opcode कलेक्शन में बाइटकोड मानों से मेल खाता है।
opname ऑपरेशन के लिए मानव-पठनीय नाम
arg ऑपरेशन के लिए न्यूमेरिक तर्क (यदि कोई हो), अन्यथा None
argval हल किया गया तर्क मान (यदि ज्ञात हो), अन्यथा arg के समान
argrepr ऑपरेशन तर्क का मानव-पठनीय विवरण
offset बाइटकोड अनुक्रम के भीतर ऑपरेशन का प्रारंभ सूचकांक
starts_line इस ऑपकोड द्वारा शुरू की गई लाइन (यदि कोई हो), अन्यथा None
is_jump_target True यदि अन्य कोड यहाँ जंप करता है, अन्यथा False
  1. पायथन प्रोग्राम: सिलेक्शन सॉर्ट एल्गोरिदम पायथन प्रोग्राम: सिलेक्शन सॉर्ट एल्गोरिदम

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

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

    इस लेख में, हम विंडोज पर पायथन के लिए उपलब्ध विभिन्न IDE के बारे में जानेंगे।PyCharmइंटरैक्टिव पायथन कंसोलवेब फ्रेमवर्क के लिए समर्थनतेज़ रिफैक्टरिंग समयकम विकास समयJupyter Notebookलगभग हर पायथन मॉड्यूल के साथ संगतताकम स्पेस और हार्डवेयर आवश्यकताएंइनबिल्ट टर्मिनल और कर्नेल फीचर्सविभिन्न प्रकार के वि

  1. पायथन कोड ऑप्टिमाइज़ेशन टिप्स पायथन कोड ऑप्टिमाइज़ेशन टिप्स

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