下のコードにおいて、「気持ちが悪い」とコメントしたところ。ちゃんと動くが、気持ちが悪い。
def func(a, b, c=3, d=4):
print(a, b, c, d)
# OK
func(1, 2)
# 1 2 3 4
# OK
func(1, 2, c=-1, d=5)
# 1 2 -1 5
# OK
func(1, 2, d=5, c=-1)
# 1 2 -1 5
# 気持ちが悪い
func(1, 2, -1)
# 1 2 -1 4
# 気持ちが悪い
func(1, 2, -1, 5)
# 1 2 -1 5
# 気持ちが悪い
func(a=1, b=2)
# 1 2 3 4
# 気持ちが悪い
func(b=2, a=1)
# 1 2 3 4
# 気持ちが悪い
func(c=-1, b=2, a=1)
# 1 2 -1 4
一応、下のようにすれば、「気持ちが悪い」のパターンでerrorを発生させることができるらしい。
def func2(a, b, /, * , c=3, d=4):
print(a, b, c, d)
# OK
func2(1, 2)
# 1 2 3 4
# 気持ちが悪い
func2(c=-1, b=2, a=1)
# TypeError: func() got some positional-only arguments passed as keyword arguments: 'a, b'