返回 False 三次而不是一次

Returned False three time instead of one

def jump_to(self, position_piece, target_position):


    middle_position = Position((position_piece.line + target_position.line)/2, 
                               (position_piece.column + target_position.column)/2)

    if position_piece not in self.cases:
        return False
    elif (target_position not in position_piece.four_position_jumps() and
        target_position in self.cases):
        return False
    elif middle_position in self.cases:
        if self.cases[position_piece] == self.cases[middle_position]:
            return False

    return True

我创建了上述函数,但我发现我 return输入了 3 次错误。对我来说这看起来很糟糕。这是一个很好的实施吗?我如何修改该代码以使其更符合 Python 风格?我很想知道如何 return False 一次而不是三个。

这可能是另一种方式,尽管我不会说它更具可读性或直观性,而且我还为示例以更简约的形式编写了代码:

cases = ['a', 'b', 'c', 'e']
position_piece = 'w'
target_position = 'r'

def jump_to():
    check1 = not any([True if each_case == position_piece else False for each_case in cases])
    check2 = any([True if each_case == target_position else False for each_case in cases])
    return False if check1 or check2 else True

print(checker())

注意:因为您正在检查 target_position in self.cases:,所以 and 比较器意味着仅检查它就足以涵盖所有情况。

我同意@leopardxpreload 的评论,因为多个 False return 不是您代码的主要问题,特别是因为它只有一个 True return.我在代码的早期看到了你对 middle_position 的计算,只是在某些情况下忽略它,作为一个更大的问题:

def jump_to(self, position_piece, target_position):

    if position_piece not in self.cases:
        return False

    if target_position in self.cases and \
        target_position not in position_piece.four_position_jumps():
        return False

    line = (position_piece.line + target_position.line) / 2
    column = (position_piece.column + target_position.column) / 2

    middle_position = Position(line, column)

    if middle_position in self.cases:
        if self.cases[position_piece] == self.cases[middle_position]:
            return False

    return True

您的实现很不错,但可以在使用时进行改进 @cdlane 的回答。

此答案旨在使用单点退出。虽然它可能比 cdlane 的答案更具可读性。它比 cdlane 的答案更复杂并且可能更难维护,您应该改用 his/her 答案。但这是单个 return 的样子。

def jump_to(self, position_piece, target_position):
    middle_position = Position((position_piece.line + target_position.line)/2,
                                   (position_piece.column + target_position.column)/2)
    return (position_piece in self.cases
            and (not target_position in self.cases
                 or (target_position in position_piece.four_position_jumps()
                     and self.cases[position_piece] != self.cases[middle_position])))