Я разбираю байт-коды Python (co_code).Для некоторых операций я хочу знать длину кодов операций Python в байтах.Где я могу найти длину кодов Python?
Может помочь простая функция, подобная этой:
def compute_size(opcode): if sys.version_info >= (3, 6): return 2 return (1, 3)[opcode < dis.HAVE_ARGUMENT]
Все коды операций байт-кода CPython имеют длину 1 байт.На CPython 3.6+ все коды операций дополнительно принимают 1-байтовый аргумент, всего 2 байта на инструкцию.В предыдущих версиях операционные коды меньше специального значения HAVE_ARGUMENT не принимают аргументов, а операционные коды, превышающие это значение, принимают двухбайтовый аргумент, что в общей сложности составляет 1 или 3 байта на инструкцию.