Вложенные операторы if или And - PullRequest
0 голосов
/ 19 июня 2020

Будет ли более эффективным вложенный оператор или использование и в операторе if?

В основном это:

if condition1:
    if condition2:
        #do stuff

или

if condition1 and condition2:
    #do stuff

другое эффективны или они похожи по производительности и для удобства чтения, что я должен использовать

Ответы [ 4 ]

1 голос
/ 19 июня 2020

Краткий ответ: нет

dis дизассемблеры python модуль для байт-кода, который выполняется интерпретатором. Для обеих функций количество выполняемых операций одинаково (10)

Но обычно рекомендуется использовать предложение and из-за лучшей читаемости кода и меньшей вложенности

Код:

>>> def test_inner_if(condition1=True, condition2=True):
...     if condition1:
...         if condition2:
...             pass
...         
>>> def test_and_if(condition1=True, condition2=True):
...     if condition1 and condition2:
...         pass
...     
>>> import dis
>>> dis.dis(test_inner_if)
  2           0 LOAD_FAST                0 (condition1)
              2 POP_JUMP_IF_FALSE        8
  3           4 LOAD_FAST                1 (condition2)
              6 POP_JUMP_IF_FALSE        8
  4     >>    8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
>>> dis.dis(test_and_if)
  2           0 LOAD_FAST                0 (condition1)
              2 POP_JUMP_IF_FALSE        8
              4 LOAD_FAST                1 (condition2)
              6 POP_JUMP_IF_FALSE        8
  3     >>    8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

1 голос
/ 19 июня 2020

Просто go для удобства чтения Если вы пытаетесь сделать что-то простое, например x> 3 и x <30, просто используйте if. Если ваши условия являются вызовами функций, вероятно, используйте несколько if, так как это будет легче читать и легче отлаживать </p>

1 голос
/ 19 июня 2020

Лучший совет, который я получил с точки зрения оптимизации:

«найдите самую медленную часть вашего кода и оптимизируйте ее, черт возьми» операторы имеют значение, поэтому, например, в одном случае они могут быть глубоко внутри 3 или более циклов for, тогда было бы хорошо пойти на хорошую оптимизацию (и прокомментировать вас logi c). В другом случае вы можете определить, следует ли выдавать ошибку в начале функции. В этом случае важна удобочитаемость.

Во-вторых, важно также, как вы оптимизируете. Способ интерпретатора рассматривает оба варианта как эквивалентные, что означает, что для удобочитаемости лучше всего использовать go. Один из простых способов выяснить это - использовать этот

import time 

s = time.clock()

#your code here

print(time.clock() - s) #shows how long the code segment took to run

Это может быть интересным экспериментом, когда у вас есть вопрос по оптимизации.

1 голос
/ 19 июня 2020

Второй вариант обычно предпочтительнее. С точки зрения времени выполнения они не будут иметь особого значения, но с точки зрения читаемости кода (хороший код легко читается) предпочтительнее второй.

...