Я новичок в использовании модуля timeit, и мне трудно получить многострочные фрагменты кода для запуска внутри timeit.

Что работает:

timeit.timeit(stmt = "if True: print('hi');")

Что не работает (все они даже не запускаются):

timeit.timeit(stmt = "if True: print('hi'); else: print('bye')")
timeit.timeit(stmt = "if True: print('hi') else: print('bye')")
timeit.timeit(stmt = "if True: print('hi');; else: print('bye')")

Я обнаружил, что могу использовать тройные кавычки для инкапсуляции сегментов многострочного кода, но я предпочел бы просто печатать на одной строке.

Есть ли способ использовать оператор else внутри одной строки по времени?

5
Pro Q 9 Янв 2017 в 21:13

4 ответа

Лучший ответ

Предоставленная вами строка интерпретируется как исходный код, поэтому вы можете использовать многострочные строки с тремя кавычками, например

>>> timeit.timeit(stmt = """if True: 'hi'
... else: 'bye'""")
0.015218939913108187

или \n для перевода строки (но это выглядит довольно грязно)

>>> timeit.timeit(stmt = "if True: 'hi'\nelse: 'bye'")
0.015617805548572505

Вы также можете использовать троичное условие if-else, если вам нужна только одна ветвь (поэтому не требуется перевод строки):

>>> timeit.timeit(stmt = "'hi' if True else 'bye'")
0.030958037935647553
4
Uriel 9 Янв 2017 в 18:28

Мой ответ был найден в ответе на этот вопрос.

Вам нужна новая строка между if и else, так что это работает

timeit.timeit(stmt = "if True: print('hi');\nelse: print('bye')")

0
Community 23 Май 2017 в 11:46

Помните об условном выражении: <true val> if <condition> else <false val>

При использовании с timeit это может выглядеть как

timeit.timeit("print('true') if 2+2 == 4 else print('false')")

Примечания:

  • этот пример будет работать в python3, я хотел использовать print как функцию, потому что это было проще всего. Конечно, вы можете from __future__ import print_function в p2.x
  • этот пример, очевидно, выведет s * itload od «true», будьте осторожны при его запуске
0
Filip Malczak 9 Янв 2017 в 18:23

Этот код будет работать так, как вы хотите:

timeit.timeit("""
if True: print('hi')
else: print('bye')
""")

Обязательно наличие новой линии

0
Sergey Byatov 9 Янв 2017 в 18:47