Как использовать другое время в 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 внутри одной строки по времени?
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
Этот код будет работать так, как вы хотите:
timeit.timeit("""
if True: print('hi')
else: print('bye')
""")
Обязательно наличие новой линии
Помните об условном выражении: <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 od "true", будьте осторожны при его запуске
Мой ответ был найден в ответе на этот вопрос.
Вы должны иметь новую линию между if
а также else
так работает
timeit.timeit(stmt = "if True: print('hi');\nelse: print('bye')")