Как интерпретатор Python анализирует операторы, включая троичный условный оператор? - PullRequest
0 голосов
/ 04 октября 2018

Например, предположим, что Func1 требуется 10 единиц времени, чтобы вернуть значение, в то время как Func2 требуется 5 единиц времени, чтобы вернуть значение.Какое из следующих утверждений занимает меньше времени, чем другое, или же занимает столько же времени?

Заявление1:

result = Func1() if (True) else Func2()

Заявление2:

result = Func2() if not (True) else Func1()

1 Ответ

0 голосов
/ 04 октября 2018

В троичном условном операторе в первую очередь выполняется оценка состояния.Из ваших примеров нет никакой разницы в значимости между оценкой условия и оценкой того же условия, а затем отрицанием его.

При этом в обоих случаях при условии, что условие равно True, Func1() будетбудет выполняться, поэтому оба оператора будут занимать одинаковое количество времени.

Редактировать:

Доказательство

ВотДоказательство того, что я сказал:

from time import sleep

def sleep5():
    print("Sleeping for 5 secs")
    sleep(5)

def sleep1():
    print("Sleeping for 1 sec")
    sleep(1)

def true_condition():
    print("Evaluating condition")
    return True

sleep1() if true_condition() else sleep5() 
'''prints:
Evaluating condition
Sleeping for 1 sec
then waits for 1 second'''

sleep5() if not true_condition() else sleep1() 
'''prints:
Evaluating condition
Sleeping for 1 sec
then waits for 1 second'''

sleep1() if not true_condition() else sleep5() 
'''prints:
Evaluating condition
Sleeping for 5 secs
then waits for 5 seconds'''

Первые 2 троичных условия эквивалентны вашим условным выражениям.Последний иллюстрирует, когда другая функция называется

...