Warum modifiziert Python3.11 Code Construction die inputierte CO_CODE?Python

Python-Programme
Guest
 Warum modifiziert Python3.11 Code Construction die inputierte CO_CODE?

Post by Guest »

Ich versuche, ein Codeobjekt (Python 3.11) mit modifiziertem CO_CODE zu einer anderen Funktion zu erstellen. Ich stelle jedoch fest, dass der Codetype -Konstruktor den eingegebenen CO_CODE zu ändern scheint. < /p>
Zum Beispiel zum Beispiel : < /p>

Code: Select all

import types
import random

def f(a):
a = a + 1
return a

codeobj = f.__code__

new_co_code = bytes([random.randint(0, 255) for _ in range(24)])
new_code = types.CodeType(
codeobj.co_argcount,
codeobj.co_posonlyargcount,
codeobj.co_kwonlyargcount,
codeobj.co_nlocals,
codeobj.co_stacksize,
codeobj.co_flags,
new_co_code,
codeobj.co_consts,
codeobj.co_names,
codeobj.co_varnames,
codeobj.co_filename,
codeobj.co_name,
codeobj.co_qualname,
codeobj.co_firstlineno,
codeobj.co_lnotab,
codeobj.co_exceptiontable,
)

print(new_co_code)
print(new_code.co_code)

# this assertion will generally fail
assert new_co_code == new_code.co_code
"""
example output:

b'\xe6\x8f\xdb\xc8\xb8\xb86\xe6&a\x18\xfb\x11&\xbc\xce\xc0A\xedjg\x8a\xa4G'
b'\x00\x8f\x00\xc8\x00\xb86\xe6\x8ca\xab\xfb\x00\x00\x00\x00\x00\x00\x00\x00g\x8a\xa4G'
"""
Ich würde annehmen, dass die neu erstellten Codeobjekte co_code mit dem Parameter, den ich eingibt, übereinstimmen, aber es scheint eine Änderung vor der Hand zu geben. Das resultierende Codeobjekt Wenn Sie es aufrufen, wird ich trotzdem nicht verstehen, warum eine Änderung erforderlich ist. Dokumentation, die ich über den Codetyp sehe, ist, dass es nur als f .__ Code __ in Typen definiert wird.>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post