Python 3.4+disфункция
dis.get_instructions()
анализ байт-кода
Возвращает итератор объектов Instruction — байт-код в виде данных, которые можно фильтровать и анализировать программно.
Синтаксис
dis.get_instructions(x, *, first_line=None, adaptive=False)
Это одноразовый итератор: второй list() по нему вернёт пустой список; для повторного обхода берите dis.Bytecode. Имена опкодов меняются между версиями (LOAD_FAST в 3.14 превращается в LOAD_FAST_BORROW, BINARY_ADD в 3.11 — в BINARY_OP), поэтому фильтр по opname надёжен только для устойчивых опкодов вроде LOAD_GLOBAL. Параметр show_caches с 3.13 ни на что не влияет.
Примеры
import dis
def size(s):
return len(s)
names = [i.argval for i in dis.get_instructions(size) if i.opname == 'LOAD_GLOBAL']
print(names) # → ['len']
import dis
def f(x):
return x
it = dis.get_instructions(f)
print(len(list(it)) > 0) # → True
print(len(list(it))) # → 0
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности