все 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Сообщить о неточности