语法错误:位置参数跟随关键字参数:

时间:2018-12-04 04:45:12

标签: python

这是我的代码:

    def is_valid_move(board, column):
        '''Returns True if and only if there is an open cell in column'''
        for i in board[col]:
            if i == 1 or i == 2:
                return False
            else:
                return True

然后我尝试使用以下命令测试我的功能:

    print(is_valid_move(board = [[2, 2, 0, 2, 2, 2, 2], [1, 2, 2, 2, 2, 2, 2], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1]], 2))

我从来没有遇到过这个错误,所以我对如何真正解决这个问题,甚至意味着什么感到困惑。

2 个答案:

答案 0 :(得分:3)

有两种类型的参数:位置参数和关键字。

如果我们具有以下功能:

def f(a, b):
    return a + b

然后我们可以使用位置参数来调用它:

f(4, 4)
# 8

或关键字参数:

f(a=4, b=4)
# 8

但是在命令关键字->位置关键字中却不能同时使用这两种方法,

f(a=4, 4)
# SyntaxError: positional argument follows keyword argument
f(4, b=4)
# 8

这是有原因的。再次,假设我们有一个类似的功能:

def f(a, b, *args):
    return a + b + sum(args)

调用此函数时,我们如何知道a是什么参数,b是什么参数,args是什么参数?

答案 1 :(得分:0)

在函数调用中,关键字参数应在非关键字参数之后。 对于您的情况,您应该将board分配给一个变量,然后将此变量传递给功能。

board = [[2, 2, 0, 2, 2, 2, 2], [1, 2, 2, 2, 2, 2, 2], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1], [1, 1, 2, 2, 1, 2, 1]]
print(is_valid_move(board, 2))