Влияет ли исключение `else` на производительность в Python 3? - PullRequest
1 голос
/ 11 марта 2020

Я искал существующий ответ на этот вопрос, и в то время как я наткнулся на этот ответ конкретно о C#, это вещь уровня компилятора, и поэтому я ожидал Python может отличаться здесь.

Посмотрите на эти два способа завершения функции. Сначала один с the else:

if condition:
    return some_val
else:
    return some_other_val

Затем один без it:

if condition:
    return some_val
return some_other_val

По логике, два делают точно так же, даже если condition имеет побочные эффекты. Они проверяют condition, а затем возвращают значение.

Есть ли вероятность, что Python 3 оптимизирует один над другим?

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Если вы просто хотите узнать, есть ли оптимизация, вы можете использовать что-то вроде snakeviz , чтобы знать наверняка. Трудно дать жесткое и быстрое правило для оптимизации, потому что каждый код влечет за собой разные исполнения. Например, если вы просто делаете простые вычисления x + y, это может дать вам бесконечно малое преимущество, чтобы не включать его, тогда как сложный метод с переменным вводом может заставить машину выполнять больше работы, чтобы понять, что она должна do.

Насколько я понимаю, рекомендуется всегда включать утверждение else. " Явное лучше, чем неявное. " Всегда использование оператора else дает жесткое правило программе о том, что делать в каждом случае, легче читать (так как ваш код становится более сложным), и это также поможет вам избежать ошибок по ходу дела.

Для примера лучшей читабельности:

variable_one = "v1"
variable_two = "v2"
if variable_one.isdigit() == False:
    if variable_one == "a":
        print("The variable is a")
    elif variable_one == "d":
        print("The variable is d")
    if variable_two == "v1":
        pass
if variable_two == "v2":
    print("variable 2 is v2")

Хотя этот код все еще бессмысленно глуп, этот код улучшает читабельность:

variable_one = "v1"
variable_two = "v2"
if variable_one.isdigit() == False:
    if variable_one == "a": print("The variable is a")
    elif variable_one == "d": print("The variable is d")
    else: pass

    if variable_two == "v1": pass
    else: print ("this variable was not passed")
else: pass

if variable_two == "v2": print("variable 2 is v2")
else: pass
0 голосов
/ 11 марта 2020

Простой способ выяснить это - выполнить оба эти действия многократно за все время oop (например, 10 миллионов раз), оба раза и посмотреть, в чем разница.

...