PEP 570で指定され、 Python 3.8で導入された位置のみのパラメーターをいじっていますが、特定のコーナーケースについて疑問に思っていました。
次のように関数を定義するとしましょう (それが良い設計であるか、まったく意味があるかどうかに関係なく):
def func(p1, p2=None, p3=None, /):
print(p1, p2, p3)
したがって、1 つの必須パラメータ ( ) と、2 つのオプション パラメータ (および)p1
が続きます。, andまたはand andだけで関数を呼び出すことができます:p2
p3
p1
p1
p2
p1
p2
p3
func(1) # 1, None, None
func(1, 2) # 1, 2, None
func(1, 2, 3) # 1, 2, 3
しかし、キーワード引数を指定できないため、デフォルトの for を維持p1
しながら、 と の引数で呼び出すことはできません。p3
p2
func(1, p3=3)
もちろん、これは を発生させTypeError
ます:
TypeError: func() got some positional-only arguments passed as keyword arguments: 'p3'
PEP 570のすべての例は、位置のみの引数の一部として単一のオプションのパラメーターをカバーしているだけなので、このケースに関する議論や例を見つけることができませんでした:
def name(p1, p2, /, p_or_kw, *, kw):
def name(p1, p2=None, /, p_or_kw=None, *, kw):
def name(p1, p2=None, /, *, kw):
def name(p1, p2=None, /):
def name(p1, p2, /, p_or_kw):
def name(p1, p2, /):
したがって、私の質問は次のとおりです。呼び出し元に複数のオプションの引数を左から右に提供させ、それらを強制的な順序でオーバーライドさせることは、意図された動作ですか? これは実際に位置のみの引数の機能ですか?