IF оператор, формирующий Python - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать многослойный оператор IF, и я не уверен, что приведенный ниже оператор правильно отформатирован.

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

Спасибо,

 if (a>= gT) and (cLow> rBT):
            print("Alpha 1")


            if (a_high> c_high) and (c_low < d_low):
                if (a> abc) and (a< c_low):
                    print("Final Count")

                    if (min(a, b) > min(c, d)) and \
                            (max(e,f) > max(g, h)): print("All Memory Deleted")

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

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

case_1 = case_2 = case_3 = False

try:
    case_1 = a >= gT and cLow > rBT
    case_2 = a_high > c_high and c_low < d_low and a > abc and a < c_low
    case_3 = min(a, b) > min(c, d) and max(e, f) > max(g, h)
except NameError:
   pass

if case_1:
    print("Alpha 1")
    if case_2:
        print("Final Count")
        if case_3:
            print("All Memory Deleted")
0 голосов
/ 02 мая 2018

Нет ничего, что вы можете сделать, чтобы улучшить это, кроме того, чтобы сделать отступ более равномерным, убрав лишние скобки, комбинируя 2-й и 3-й if тесты.

if a >= gT and cLow > rBT:
    print("Alpha 1")
    if a_high > c_high and c_low < d_low and a > abc and a < c_low:
        print("Final Count")
        if min(a, b) > min(c, d) and max(e,f) > max(g, h):
            print("All Memory Deleted")

Причина, по которой безопасно комбинировать 2-й и 3-й if тесты, заключается в том, что оператор and "замыкает накоротко", то есть в expression_1 and expression_2, если expression_1 ложно, тогда expression_2 равно не оценивается. Для получения дополнительной информации по этой теме, с примерами (в Python 2), см. Мой ответ здесь .


Кстати, лучше избегать продолжения обратной косой черты, если можете: оно слишком хрупкое. Любой пробел после обратной косой черты нарушает продолжение. Вместо этого вы можете часто заключать длинное выражение в скобки, если оно еще не использует какую-либо форму скобок. Например,

if (min(a, b) > min(c, d) and 
    max(e,f) > max(g, h)):

Подробнее см. В руководстве по стилю Python PEP-0008 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...