Python профилирование внутренней функции - PullRequest
3 голосов
/ 19 марта 2020

Я пытаюсь профилировать часть моей программы. Шаблон выглядит следующим образом:

def de():
      def abc():
         print("123")
      cProfile.run('abc()')

Когда я пытаюсь запустить эту программу, я получаю сообщение об ошибке: Файл "", строка 1, в NameError: имя 'ab c' не определено

Есть ли способ обойти эту ошибку?

Ответы [ 2 ]

4 голосов
/ 19 марта 2020

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

use runctx (). Пожалуйста, прочитайте https://docs.python.org/3/library/profile.html#profile .runctx

import cProfile

def de():
      def abc():
         print("123")
      cProfile.runctx('abc()', None, locals=locals())

de()

выход:

"123"
5 function calls in 0.000 seconds
1 голос
/ 19 марта 2020

Просто для полноты: в вашем случае вы также можете сделать

def de():
    def abc():
        print("123")
    cProfile.run(abc.__code__)

de()

(создает тот же вывод, что и вариант runctx)

...