Другие уже рассмотрели основную проблему (код, который вы передаете timeit()
, недействителен), я просто хотел упомянуть, что с помощью общедоступного решения (добавление точки с запятой между двумя операторами) вы в конечном итоге проведете сравнительный анализ общая стоимость обоих операторов вместе (создание литеральной строки "Hello world"
, присвоение ее переменной и вызов endswith('d')
для этой переменной). Предполагая, что вас на самом деле интересует только стоимость второго оператора, вы можете использовать timeit()
второй (необязательный) аргумент «setup», с которым можно выполнить код до . выполнение проверенного кода, а именно:
import timeit
timeit.timeit("s.endwith('d')", "s = 'Hello World'", number=10000)
, который выполнит оба оператора, но сравнит только первый.
Это также полезно, если вы хотите протестировать функцию, импортированную из модуля:
timeit.timeit("re.search(r'42', 'hello world')", "import re")
или из вашего текущего скрипта или сеанса интерактивной оболочки:
$ python
Python 3.6.5 (default, Apr 1 2018, 05:46:30)
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> def foo():
>>> return 42
>>> import timeit
>>> timeit.timeit("foo()", "from __main__ import foo")