2017-01-09 7 views
3

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

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

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 внутри одной строки в timeit?

ответ

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 
0

Помните об условном выражении: <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
  • этот пример, очевидно, выводится как * itload О.Д. «истинные» s, будьте осторожны во время работы его
0

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

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

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

0

Мой ответ был найден в ответ на this question.

Yo и нужно иметь новую линию между if и else, поэтому она работает, чтобы сделать

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