【问题标题】:Syntax Error: positional argument follows keyword argument:语法错误:位置参数跟随关键字参数:
【发布时间】:2021-09-17 15:19:18
【问题描述】:

这是我的代码:

    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))

我以前从未遇到过这个错误,所以我对如何实际解决这个问题,或者这甚至意味着什么感到有点困惑。

【问题讨论】:

标签: python


【解决方案1】:

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

如果我们有函数:

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

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

f(4, 4)
# 8

或关键字参数:

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

但不是两者都在 order 关键字中 --> 位置,这就是你正在做的:

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是什么参数?

【讨论】:

    【解决方案2】:

    关键字参数应该跟在函数调用中的非关键字参数之后。 在您的情况下,您应该将 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))
    

    【讨论】:

    • 可能调用局部变量b 或其他什么,以明确表明该变量的名称 并不重要。
    【解决方案3】:

    为了完整起见,取自早期评论

    删除板=

    因此,您可以删除“board =”并直接传递值,所有参数都作为位置参数:

    is_valid_move(
        [[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
    )
    

    或者对所有参数使用关键字+位置参数:

    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]], 
                  column=2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2020-04-04
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多