跳到内容

在关键字参数后使用星号参数解包 (B026)

源自 flake8-bugbear linter。

作用

检查在提供关键字参数后使用星号参数解包的函数调用

为什么这不好?

在 Python 中,您可以使用星号参数解包将列表或元组的参数传递给函数。

在关键字参数后提供星号参数可能会导致令人困惑的行为,并且仅为了向后兼容而支持。

示例

def foo(x, y, z):
    return x, y, z


foo(1, 2, 3)  # (1, 2, 3)
foo(1, *[2, 3])  # (1, 2, 3)
# foo(x=1, *[2, 3])  # TypeError
# foo(y=2, *[1, 3])  # TypeError
foo(z=3, *[1, 2])  # (1, 2, 3)  # No error, but confusing!

建议改为

def foo(x, y, z):
    return x, y, z


foo(1, 2, 3)  # (1, 2, 3)
foo(x=1, y=2, z=3)  # (1, 2, 3)
foo(*[1, 2, 3])  # (1, 2, 3)
foo(*[1, 2], 3)  # (1, 2, 3)

参考