2010-07-26 2 views
0

У меня есть NameError, когда я пытаюсь запустить эти коды. «Глобальное имя j не определено». Как я могу это исправить?NameError для использования timeit в python

def test(j): 
    for i in range(j): 
     j = i**2 

if __name__=='__main__': 
    from timeit import Timer 
    j = 30 
    t = Timer("test(j)","from __main__ import test") 
    print(t.timeit(j)) 
+1

Зачем использовать переменную 'j' во многих разных контекстах? – kennytm

+0

'от __main__ import test, j' works и у вас слишком много' j' s – msw

ответ

3

Timer не знает о j. Вам нужно сделать что-то вроде "test(%d)" % j (или from __main__ import j или поставить определение j внутри строки тоже).

Кроме того, аргумент timeit отличается от аргумента к вашей test функции (так различные виды использования j, вероятно, не то, что вы должны делать или среднее). Аргумент timeit дает количество исполнений для тестовой функции.

p.s. Обратите внимание, что вам нужно отложить любой код в своем вопросе, чтобы отформатировать его

p.p.s. Раньше здесь был комментарий об использовании from __main__ import, но это действительно работает!

+0

'от __main__ import test' работает, попробуйте. Это предпочтительнее? Не знаю, но приветствовал бы объяснение, почему бы и нет. – msw

+0

да, это тоже работает! – masti

+0

Правильно - я не понимал, что идиома сработала. Исправлена. –

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