2011-12-30 2 views
4

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

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

Однако, он говорит «й не определен» при вызове run.profile. Насколько я понимаю, я должен предоставить инструкцию import перед вызовом g (x) внутри аргумента string для файла run.profile, и я мог бы сделать это с помощью глобальных переменных.

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

+1

Просьба указать код и конкретную ошибку или трассировку. –

+0

Уменьшенная версия моего кода, который показывает проблему: 'профиль импорта Защиту г (х): передача Защиту е(): х = 0 profile.run ('г (х)') е () ' Однако он показывает, что« NameError: name «g» не определен ». В любом случае, это та же проблема и profile.runctx решает проблему. Спасибо всем! –

ответ

1

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

Пример:

import cProfile 
def g(x): 
    print x 
x = """g("Hello world!")""" 
cProfile.run(x) 
12

Вместо использования 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() в this document.

Смежные вопросы