Warum modifiziert Python3.11 Code Construction die inputierte CO_CODE?
Posted: 20 Feb 2025, 12:11
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>
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.>
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'
"""