如何启用定义输入为可选?

时间:2019-05-20 01:38:20

标签: python definition optional-parameters args optional-arguments

我有一个迭代某些功能的定义。但是,该函数的自变量或换句话说,输入应该是可选的。对于我的问题,我试图将“ depth”参数设为可选。例如,这是一个minimax算法,但有时在实验中,您可能不想应用深度修剪。因此,它应该是可选的。

我尝试了* args方法。但是,它对我不起作用。另外,我将其设置为“深度=无”,但是由于动态编程中的“深度-1”值而导致出现错误。

def minimax(self, board_state, a, b, *args):
    for x in args:
        depth = x
    turn, board = board_state
    if super().terminal_state(board_state, depth):
        return super().heuristic_value(board_state)
    else:
        if turn == -1:
            value = 250
            for x in super().successor_generator(board_state):
                value = min(value, self.minimax(x, a, b, depth-1))
                b = min(b, value)
                if b <= a:
                    break
        elif turn == 1:
            value = -250
            for x in super().successor_generator(board_state):
                value = max(value, self.minimax(x, a, b, depth-1))
                a = max(a, value)
                if b <= a:
                    break

    result = board_state, value
    return value

object.minimax(state, a, b, depth=None)
value = min(value, self.minimax(x, a, b, depth-1))
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

所需的功能应同时起作用:

object.minimax(state, a, b) 
object.minimax(state, a, b, depth=5)

1 个答案:

答案 0 :(得分:1)

您的通话

object.minimax(state, a, b) 
object.minimax(state, a, b, depth=5)

是正确的,您应该将方法定义为

def minimax(self, board_state, a, b, depth=None)

但是,这样做之后,您不应该做的是

value = min(value, self.minimax(x, a, b, depth-1))

因为您知道在某些情况下depth将是None,因此depth-1在这种情况下毫无意义。您必须自己明确处理异常的None值。一种方法是

value = min(value, self.minimax(x, a, b, depth-1 if depth is not None else None))