在关键字参数后使用星号参数解包 (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)