语法错误:位置参数跟在关键字参数之后:

新手上路,请多包涵

所以这是我的代码:

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

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

原文由 Stevo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

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

如果我们有这个功能:

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

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

 f(4, 4)
# 8

或关键字参数:

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

但不是都在 order 关键字 –> positional 中,这就是你正在做的:

 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

原文由 TerryA 发布,翻译遵循 CC BY-SA 4.0 许可协议

只是为了完整性,取自早期评论

移除电路板 =

因此,您可以删除“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)

原文由 questionto42standswithUkraine 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题