Как использовать else во времена Python

Я новичок в использовании модуля 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 внутри одной строки во времени?


person Pro Q    schedule 09.01.2017    source источник


Ответы (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
person Uriel    schedule 09.01.2017

Помните об условном выражении: <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", будьте осторожны при его запуске
person Filip Malczak    schedule 09.01.2017

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

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

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

person Sergey Byatov    schedule 09.01.2017

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

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

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

person Pro Q    schedule 09.01.2017