Наиболее эффективный цикл Python с операторами if - PullRequest
2 голосов
/ 01 декабря 2019

Я строю минимаксную функцию и мне нужно сделать несколько проверок для каждой итерации. Я хочу, чтобы итерации были настолько эффективными, насколько это возможно, чтобы иметь возможность увеличить глубину поиска, и поэтому я хочу знать, как Python if-инструкции работает для циклов. Позвольте мне привести вам упрощенный пример:

# Example 1

def test(x_start, y_start):

    for xdir, ydir in [[1, -1], [1, 1], [-1, 1], [-1, -1]]:
        x, y = x_start, y_start
        x += xdir
        y += ydir
        if not is_on_board(x, y) and board[x][y].type == 'full':
            continue

# Example 2

def test(x_start, y_start):

    for xdir, ydir in [[1, -1], [1, 1], [-1, 1], [-1, -1]]:
        x, y = x_start, y_start
        x += xdir
        y += ydir
        if not is_on_board(x, y):
            if not board[x][y].type == 'full':
                continue

Является ли это более эффективным, если перейти к примеру 2, поскольку в некоторых случаях он пропустит первый оператор if, основанный на том, что позиция не на доске, и не делает 'Нужно ли выполнять дополнительную проверку типа платы?

В моем реальном коде есть больше операторов and с проверками функций и переменных, которые могут быть относительно длительными. Поэтому я хочу знать, эффективнее ли разбивать операторы and на несколько операторов if, как в примере 2, или это не имеет значения? Вообще говоря.

1 Ответ

2 голосов
/ 01 декабря 2019

Большинство языков программирования, включая Python , будут проверять булеву логику «короткого замыкания» - это означает, что они не будут продолжать вычислять, когда известно значение истинности. Разница между множественными утверждениями if и / или операторами незначительна, и вам следует подумать о том, какой из них более читабелен;с другой стороны, порядок чеков может иметь значение, если некоторые из них более дорогие или более информативные.

...