Python: область видимости переменных и profile.run - PullRequest
4 голосов
/ 30 декабря 2011

Я хочу вызвать profile.run внутри моей функции, то есть:

def g():
    ...
def f():
    x = ...
    run.profile('g(x)')

Однако при вызове run.profile говорится, что x не определен.Насколько я понимаю, я должен предоставить оператор import перед вызовом g (x) внутри строкового аргумента для run.profile, и я мог бы сделать это с глобальными переменными.

Возможно ли это с локальными переменными?

Ответы [ 2 ]

14 голосов
/ 30 декабря 2011

Вместо использования run() используйте runctx(), что позволяет указывать местных и глобальных пользователей. Например:

>>> import cProfile
>>> def g(x):
...   print "g(%d)" % x
... 
>>> x=100
>>> cProfile.runctx('g(x)', {'x': x, 'g': g}, {})
g(100)
         3 function calls in 0.000 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <stdin>:1(g)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

>>>

См. Также runctx() в этом документе .

2 голосов
/ 30 декабря 2011

Вместо того, чтобы x установить в качестве аргументов функции, x включает весь вызов функции.

Пример:

import cProfile
def g(x):
    print x
x = """g("Hello world!")"""
cProfile.run(x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...