NameError для использования timeit в python

Я получил NameError при попытке запустить эти коды. "Глобальное имя j не определено". Как я могу это исправить?

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))

person masti    schedule 26.07.2010    source источник
comment
Зачем продолжать использовать переменную j во многих разных контекстах?   -  person kennytm    schedule 26.07.2010
comment
from __main__ import test, j работает, а у вас слишком много j с   -  person msw    schedule 26.07.2010


Ответы (1)


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

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

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

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

person Andrew Jaffe    schedule 26.07.2010
comment
from __main__ import test работает, попробуйте. Это предпочтительно? Не знаю, но хотелось бы объяснения, почему нет. - person msw; 26.07.2010