Python наглядное выполнение кода

Python наглядное выполнение кода

и хотели, чтобы его было немного легче понять:

🐍 3 инструмента для отслеживания и визуализации выполнения кода на Python

Возможно, вам даже захочется визуализировать, какие строки кода выполняются и сколько раз:

Если так, статья даст необходимые инструменты, чтобы достичь цели:

  • Loguru – вывод сработавших исключений;
  • snoop – печать строк кода, выполняемого в функции;
  • heartrate – визуализация выполнения программы в режиме реального времени.

Все, что нужно для использования этих инструментов – одна строка кода!

Loguru

Loguru – это библиотека, которая сделает общение с системой журналов в Python приятнее. Она предоставляет много интересных функций, но одна из них заслуживает отдельного внимания – возможность отлавливать неожиданные ошибки и отображать, какое значение переменной приводит к сбою кода.

Установить Loguru можно одной командой:

🐍 3 инструмента для отслеживания и визуализации выполнения кода на Python

Добавив logger.catch исключения гораздо проще понять: ошибка возникает при делении 2 на 0.

Snoop

Как быть, если в коде нет ошибки, но мы хотим выяснить, что в нем происходит? В этом случае пригодится snoop . Это пакет Python, который выводит на экран строки выполняемого кода вместе со значениями каждой переменной, добавляя только один декоратор.

Чтобы установить snoop, введите следующую команду:

🐍 3 инструмента для отслеживания и визуализации выполнения кода на Python

В приведенном выше выводе можно просмотреть значения переменных, и какие строки кода выполняются. Теперь легче понять, как работает рекурсия.

Heartrate

Если необходимо визуализировать, какие строки и сколько раз выполняются, попробуйте heartrate.

H eartrate также создан разработчиками snoop. Чтобы его установить, введите команду:

🐍 3 инструмента для отслеживания и визуализации выполнения кода на Python

Диаграммы подсвечивают искомые строки: более длинные полосы означают больше попаданий, а светлые цвета – более свежее изменение.

На приведенной выше иллюстрации мы видим, как выполняется код:

Вывод имеет смысл, так как начальное значение x равно 5, и функция вызывается повторно до тех пор, пока x не станет равным 1.

Теперь посмотрим, как визуализировать выполнение в режиме реального времени с помощью heartrate . Добавим sleep (0.5) , чтобы программа работала немного медленнее, и увеличим num до 20.

Теперь мы можем в режиме реального времени видеть, какие строки кода выполняются, и сколько раз отработала каждая из них.

Читайте также:  Serial порт python 3

Заключение

Мы изучили три инструмента для отслеживания и визуализации выполнения кода в Python. Надеемся, что с ними отладка станет для вас менее болезненной. Поскольку эти инструменты требуют только одной строки кода, почему бы не попробовать их в работе? Удачи в обучении!

Дополнительные материалы:

Источники

Источник

Python-библиотеки для визуализации кода

В статье приводится обзор трех open-source библиотек Python для визуализации кода, которые помогут разработчикам наглядно визуализировать исполнение написанного кода. Эти библиотеки являются более простыми в установке и использовании аналогами модуля Logging.

Pyheat

Pyheat предоставляет построчное время выполнение кода в виде цветной карты. Pyheat можно установить из PyPl с помощью команды

и импортировать с помощью команды

from pyheat import PyHeat

Для построения карты нужно использовать файл с кодом в качестве аргумента функции PyHeat:

ph = PyHeat('merge_sort.py') ph.create_heatmap() ph.show_heatmap()

Heartrate

В отличие от Pyheat, Heartrate показывает, сколько раз была выполнена каждая строка кода. Результаты выводятся в отдельном окне браузера. Команды для установки и импорта:

pip install heartrate import heartrate

Для визуализации выполнения кода нужно вставить в него команду

heartrate.trace(browser=True)

Числа возле номера строки обозначают количество выполнений данной строки кода. Длина полос рядом с этими числами обозначает число выполнений (чем длиннее полоса — тем их было больше) и насколько давно они выполнялись (чем темнее полоса — тем раньше). Преимуществом библиотеки является то, что она строит распределения в режиме реального времени.

Snoop

Snoop используется для отладки кода и позволяет выяснить, почему код выдает неверные результаты. В частности, Snoop выводит значения локальных переменных в ходе выполнения кода. Установка:

Далее необходимо добавить декоратор @snoop в код.

Источник

3 инструмента для отслеживания и визуализации выполнения кода на Python

3 инструмента для отслеживания и визуализации выполнения кода на Python

А хотели бы, чтобы вывод был немного более понятным и наглядным? Как показано здесь:

Или даже сделать визуализацию того, какие строки кода выполняются и сколько раз они выполняются в режиме реального времени:

Именно это помогут сделать инструменты, о которых пойдет речь дальше в статье. Вот эти три инструмента.

  • Loguru — для лучшего вывода исключений.
  • Snoop — печатает строки кода, выполняемого в функции.
  • Heartrate — визуализирует выполнение программы на Python в режиме реального времени.
Читайте также:  Run exe using python

И для использования этих инструментов нужна всего одна строка кода!

Loguru — для лучшего вывода исключений

Loguru — это библиотека, делающая логирование на Python приятным. Loguru предоставляет много интересных функциональных возможностей, самая полезная из которых — возможность отлавливать неожиданные ошибки и отображать значение переменной, которое приводит к сбою кода.

Устанавливается Loguru так:

Разберемся, чем так хорош Loguru. Представьте, что у вас две функции division и divide_numbers и выполняется функция divide_numbers :

from itertools import combinations def division(num1: int, num2: int): return num1/num2 def divide_numbers(num_list: list): """Division of 2 numbers in the number list """ for comb in combinations(num_list, 2): num1, num2 = comb res = division(num1, num2) print(f" divided by is equal to .") if __name__ =='__main__': num_list = [2, 1, 0] divide_numbers(num_list)

Обратите внимание: combinations([2,1,0], 2) возвращает [(2, 1), (2, 0), (1, 0)] . После выполнения этого кода получаем такую ошибку:

2 divided by 1 is equal to 2.0. Traceback (most recent call last): File "loguru_example.py", line 17, in divide_numbers(num_list) File "loguru_example.py", line 11, in divide_numbers res = division(num1, num2) File "loguru_example.py", line 5, in division return num1/num2 ZeroDivisionError: division by zero

По этому выводу мы видим, что ошибка возникает в строке return num1/num2 , но не знаем, которое из значений ( num1 или num2 ) вызывает ее. К счастью, это легко отследить, добавив декоратор Loguru logger.catch :

from loguru import logger from itertools import combinations def division(num1: int, num2: int): return num1/num2 @logger.catch # Добавляем это для отслеживания ошибок def divide_numbers(num_list: list): for comb in combinations(num_list, 2): num1, num2 = comb res = division(num1, num2) print(f" divided by is equal to .") if __name__ =='__main__': num_list = [2, 1, 0] divide_numbers(num_list)

Добавили logger.catch , и теперь исключения гораздо проще трактовать! Оказывается, ошибка возникает при делении 2 на 0 .

Snoop — печатает строки кода, выполняемого в функции

А что, если в коде нет ошибки, но мы хотим выяснить, что в нем происходит? Здесь пригодится snoop.

Snoop — это пакет Python, который печатает строки выполняемого кода вместе со значениями каждой переменной. Для этого надо добавить всего лишь один декоратор.

Устанавливается snoop так:

Допустим, у нас есть функция factorial , которая находит факториал целого числа:

import snoop def factorial(x: int): if x == 1: return 1 else: return (x * factorial(x-1)) if __name__ == "__main__": num = 5 print(f"The factorial of is ")
The factorial of 5 is 120

Разобраться, почему факториал factorial(5) равен 20 , помогает добавление к функции factorial декоратора snoop :

import snoop @snoop def factorial(x): if x == 1: return 1 else: return (x * factorial(x-1)) if __name__ == "__main__": num = 5 print(f"The factorial of is ")

В этом выводе показываются значения переменных и то, какие строки кода выполняются. Теперь рекурсия понятна намного лучше!

Читайте также:  Css фон кнопки button

Heartrate — визуализирует выполнение программы на Python в режиме реального времени

Для визуализации того, какие строки кода выполняются и сколько раз, попробуйте heartrate.

heartrate — инструмент от создателя snoop. Устанавливается heartrate так:

Теперь добавим в предыдущий код heartrate.trace(browser=True) . Откроется окно браузера, отображающее визуализацию файла, в котором вызван этот trace() :

import heartrate heartrate.trace(browser=True) def factorial(x): if x == 1: return 1 else: return (x * factorial(x-1)) if __name__ == "__main__": num = 5 print(f"The factorial of is ")

При запуске этого кода должен появиться новый браузер. Если не появился, перейдите по адресу http://localhost:9999. Вот такой вывод вы должны увидеть:

Темно- и светло-синие полосы показывают строки кода, которые выполнялись. Чем длиннее полосы, тем больше было выполнений, более светлые цвета соответствуют самым последним выполнениям.

По этому выводу мы видим, что программа выполняется:

Вывод имеет смысл, так как исходное значение x равно 5 и функция вызывается повторно до тех пор, пока x не станет равным 1 .

Теперь посмотрим, как визуализируется выполнение программы на Python в режиме реального времени с помощью heartrate. Добавим sleep(0.5) , чтобы программа работала немного медленнее, а num увеличилось до 20 :

import heartrate from time import sleep heartrate.trace(browser=True) def factorial(x): if x == 1: return 1 else: sleep(0.5) return (x * factorial(x-1)) if __name__ == "__main__": num = 20 print(f"The factorial of is ")

Теперь мы видим, какие строки кода выполняются и сколько раз каждая из них выполнялась в режиме реального времени.

Заключение

Поздравляю! Вы только что освоили три инструмента для отслеживания и визуализации выполнения кода на Python. Надеюсь, что с ними отладка будет для вас более легкой и беспроблемной. И раз уж этим инструментам нужна всего одна строка кода, почему бы не испытать их в деле?

Смело дублируйте исходный код этой статьи и экспериментируйте здесь.

Источник

Оцените статью