পাইথন স্ট্যান্ডার্ড লাইব্রেরির ডিস মডিউলটি পাইথন বাইটকোডের বিশ্লেষণের জন্য দরকারী বিভিন্ন ফাংশন প্রদান করে যা এটিকে মানব-পাঠযোগ্য আকারে বিচ্ছিন্ন করে। এটি অপ্টিমাইজেশন সঞ্চালন করতে সাহায্য করে। বাইটকোড হল দোভাষীর একটি সংস্করণ-নির্দিষ্ট বাস্তবায়নের বিবরণ।
dis() ফাংশন
ফাংশন dis() যেকোনো পাইথন কোড উৎস যেমন মডিউল, ক্লাস, পদ্ধতি, ফাংশন, বা কোড অবজেক্টের বিচ্ছিন্ন উপস্থাপনা তৈরি করে।
>>> 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
বাইটকোড বিশ্লেষণ API বাইটকোড ক্লাসে সংজ্ঞায়িত করা হয়। এর কনস্ট্রাক্টর বাইটকোড অবজেক্ট রিটার্ন করে যার বাইটকোড বিশ্লেষণ করার জন্য নিম্নলিখিত পদ্ধতি রয়েছে
বাইটকোড()
এই কনস্ট্রাক্টর. একটি ফাংশন, জেনারেটর, পদ্ধতি, সোর্স কোডের স্ট্রিং বা একটি কোড অবজেক্টের সাথে সম্পর্কিত বাইটকোড বিশ্লেষণ করুন। এটি অনেক ফাংশনের চারপাশে একটি সুবিধার মোড়ক
>>> string=dis.Bytecode(hello)>>> স্ট্রিং-এ x এর জন্য:প্রিন্ট (x)নির্দেশনা(opname ='LOAD_GLOBAL', opcode =116, arg =0, argval ='print', argrepr ='প্রিন্ট', অফসেট =0, starts_line =2, is_jump_target =False) নির্দেশনা(opname ='LOAD_CONST', opcode =100, arg =1, argval ='hello world', argrepr ="'hello world'", offset =3, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='CALL_FUNCTION', opcode =131, arg =1, argval =1, argrepr ='1 পজিশনাল, 0 কীওয়ার্ড পেয়ার', অফসেট =6, starts_line =None, is_jutge =মিথ্যা) নির্দেশ (opname ='POP_TOP', opcode =1, arg =None, argval =None, argrepr ='', অফসেট =9, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='LOAD_CONST', opcode =100, arg =0, argval =None, argrepr ='None', offset =10, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='RETURN_VALUE', opcode =83, arg =None, argval =None, argrepr ='', অফসেট =13, starts_line =None, is_jump_target =False)
code_info()
এই ফাংশনটি পাইথন কোড অবজেক্টের তথ্য প্রদান করে।
>>> dis.code_info(hello)"নাম:hello\nফাইলের নাম:\nআর্গুমেন্ট গণনা:0\nKw-শুধু আর্গুমেন্ট:0\nস্থানীয়দের সংখ্যা:0\nস্ট্যাকের আকার:2\nফ্ল্যাগ:অপটিমাইজড, নিউলোকালস, নোফ্রি\nধ্রুবক:\n 0:কিছুই নয়\n 1:'হ্যালো ওয়ার্ল্ড'\nনাম:\n 0:প্রিন্ট"
শো_কোড()
এই ফাংশনটি পাইথন মডিউল, ফাংশন বা ক্লাসের বিস্তারিত কোড তথ্য প্রিন্ট করে।
>>> dis.show_code(hello)নাম:helloFilename:আর্গুমেন্ট গণনা:0Kw-শুধু আর্গুমেন্ট:0স্থানীয়দের সংখ্যা:0স্ট্যাকের আকার:2ফ্ল্যাগ:অপ্টিমাইজড, নিউলোকালস, নোফ্রিকনস্ট্যান্টস:0:কোনটি নয় 1:' hello world'Names:0:print
ডিসাসেম্বল()
এই ফাংশনটি একটি কোড অবজেক্টকে বিচ্ছিন্ন করে এবং নিম্নলিখিত কলামগুলিতে বিভক্ত আউটপুট দেয় -
-
লাইন নম্বর, প্রতিটি লাইনের প্রথম নির্দেশের জন্য
-
বর্তমান নির্দেশ, -->,
হিসাবে নির্দেশিত -
একটি লেবেলযুক্ত নির্দেশ,>>,
দিয়ে নির্দেশিত -
নির্দেশের ঠিকানা,
-
অপারেশন কোড নাম,
-
অপারেশন প্যারামিটার, এবং
-
বন্ধনীতে প্যারামিটারের ব্যাখ্যা।
>>> codeInString ='a =5\nb =6\nsum =a + b \ nprint("sum =",sum)'>>> codeObejct =কম্পাইল(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 S_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 (কোনও নয়) RE_TURN মান 38get_instructions()
এই ফাংশনটি সরবরাহকৃত ফাংশন, পদ্ধতি, সোর্স কোড স্ট্রিং বা কোড অবজেক্টের নির্দেশাবলীর উপর একটি পুনরাবৃত্তিকারী প্রদান করে। ইটারেটর সরবরাহকৃত কোডে প্রতিটি অপারেশনের বিশদ বিবরণ দিয়ে টিপল নামে নির্দেশনার একটি সিরিজ তৈরি করে।
>>> it=dis.get_instructions(code)>>> এতে i এর জন্য:প্রিন্ট (i)Instruction(opname ='LOAD_CONST', opcode =100, arg =0, argval =", লাইন 2>, argrepr ='
", লাইন 2>', অফসেট =0, starts_line =2, is_jump_target =False) নির্দেশনা(opname ='LOAD_CONST', opcode =100, arg =1, argval ='hello', argrepr ="hello'", offset =3, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='MAKE_FUNCTION', opcode =132, arg =0, argval =0, argrepr ='', offset =6, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='STORE_NAME', opcode =90, arg =0, argval ='hello', argrepr =' হ্যালো', অফসেট =9, starts_line =None, is_jump_target =False) নির্দেশনা(opname ='LOAD_CONST', opcode =100, arg =2, argval =None, argrepr ='কোনও নয়', অফসেট =12, starts_line =None, is_jamp_targe =মিথ্যা) নির্দেশ (opname ='RETURN_VALUE', opcode =83, arg =None, argval =None, argrepr ='', অফসেট =15, starts_line =None, is_jump_target =False)
ফাংশন তথ্য নিচে দেখানো পরামিতি সহ বস্তুর মত tuple আকারে হয় −
নির্দেশ | একটি বাইটকোড অপারেশনের বিশদ বিবরণ৷ |
---|---|
opcode | অপারেশনের জন্য সংখ্যাসূচক কোড, নীচে তালিকাভুক্ত অপকোড মান এবং Opcode সংগ্রহের বাইটকোড মানগুলির সাথে সম্পর্কিত। |
অপনাম | অপারেশনের জন্য মানুষের পঠনযোগ্য নাম |
আর্গ | অপারেশনের সাংখ্যিক যুক্তি (যদি থাকে), অন্যথায় কিছুই না |
আরগভাল | সমাধান করা arg মান (যদি জানা থাকে), অন্যথায় arg এর মতো |
argrepr | অপারেশন আর্গুমেন্টের মানব পাঠযোগ্য বর্ণনা |
অফসেট | বাইটেকড সিকোয়েন্সের মধ্যে অপারেশনের সূচী শুরু করুন |
শুরু_লাইন | লাইনটি এই অপকোড দ্বারা শুরু হয়েছে (যদি থাকে), অন্যথায় কিছুই নয় |
ইজ_জাম্প_টার্গেট | সত্য যদি অন্য কোড এখানে আসে, অন্যথায় মিথ্যা |