私はこの機能を知らずに何年も python2 を使用してきましたが、タプルのアンパックは関数定義でサポートされているようです:
>>> def foo(a, (b, c)):
... print a, b, c
...
>>> t = (2, 3)
>>> foo(1, t)
1 2 3
デフォルトも許可されていますが、関数定義時ではなく関数呼び出し時にアンパックされているようです。そして、パックされた引数の1つ/任意/すべてを名前で渡す方法がわかりませんでした。おそらく不可能です。
>>> def foo(a, ((b, c), d)=('xy', 8)):
print a, b, c, d
...
>>> foo(0)
0 x y 8
これは明らかに奇妙な実装の詳細だけではありません:文法、特に an を注意深く読むfpdef
と、関数定義がタプルのアンパック用に明示的に設計されていることがわかります。
私の質問は、なぜこれが設計上の選択だったのか、それが必要なユースケースの例は何ですか? 私には、python 1、2、3、5、7、9、13、17 の禅に違反する、あいまいでエラーが発生しやすい機能のようです....