Python Glossary English

все Python 3disфункция

dis.findlabels()

сведения о коде

Возвращает список смещений, на которые ведут переходы в сыром байт-коде, — начала циклов и ветвлений.

Синтаксис

dis.findlabels(code_bytes)

Ждёт сырые байты co_code, а не объект кода: findlabels(f.__code__) падает с TypeError, нужен f.__code__.co_code. У линейной функции без if и циклов список пуст. Сами смещения от выпуска к выпуску другие, поэтому полагаться можно на их наличие, а не на значения; для анализа удобнее get_instructions() — там у инструкции есть поле jump_target (3.13+).

Примеры

import dis
def straight(x):
    return x + 1
def loop(n):
    for i in range(n):
        pass
print(dis.findlabels(straight.__code__.co_code))  # → []
print(len(dis.findlabels(loop.__code__.co_code)) > 0)  # → True
try:
    dis.findlabels(loop.__code__)
except TypeError as e:
    print(e)  # → object of type 'code' has no len()

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности