Можем ли мы запускать несколько функций с timeit в одном и том же модуле

Я хотел бы написать несколько функций в одном и том же модуле Python, каждая из которых представляет собой отдельный тест профилирования с использованием timeit, чтобы я мог использовать аргумент командной строки, чтобы указать, какую из них следует использовать. бегать. Наивный пример (profiling.py):

import sys
import timeit

def foo():

    setup = """
    import random
    """

    foo_1 = """
    for i in range(1000):
        random.randint(0, 99) + random.randint(0, 99)
    """

    foo_2 = """
    for i in range(1000):
        random.randint(0, 99) + random.randint(0, 99)
    """

    foo_3 = """
    for i in range(1000):
        random.randint(0, 99) + random.randint(0, 99)
    """

    print 'foo_1', timeit.Timer(foo_1, setup).timeit(1000)
    print 'foo_2', timeit.Timer(foo_2, setup).timeit(1000)
    print 'foo_3', timeit.Timer(foo_3, setup).timeit(1000)

if __name__ == '__main__':
    if (len(sys.argv) > 1):
        if (sys.argv[1] == 'foo'):
            foo()
    else:
        print 'Which profiling do you want to run?'
        print 'available:'
        print '    foo'

Однако, когда я пытаюсь python profiling.py foo, я получаю сообщение об ошибке, подобное следующему:

foo_1
Traceback (most recent call last):
  File "profiling.py", line 32, in <module>
    foo()
  File "profiling.py", line 25, in foo
    print 'foo_1', timeit.Timer(foo_1, setup).timeit(1000)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/timeit.py", line 136, in __init__
    code = compile(src, dummy_src_name, "exec")
  File "<timeit-src>", line 6
    _t0 = _timer()
                 ^
IndentationError: unindent does not match any outer indentation level

Я искал обычный пробел/вкладку ошибка отступа в коде, но не нашел. Поэтому мне интересно, не потому ли это, что я оборачиваю тест timeitвнутрь функции, а это не разрешено?

5
задан MLister 4 June 2012 в 19:59
поделиться