に開梱私もこの機能について知らなくても、年間のpython2を使用しましたが、どうやら関数DEFSでサポートされてアンパックタプル:タプルは
>>> def foo(a, (b, c)):
... print a, b, c
...
>>> t = (2, 3)
>>> foo(1, t)
1 2 3
彼らはで展開しているように見えるけれども
も、デフォルトは、許可されています関数の呼び出し時間であり、関数のdef時間ではありません。そして、私は、パックされた引数の1つ/すべて/すべてを名前で渡す方法を理解できませんでした。おそらく不可能です。
>>> def foo(a, ((b, c), d)=('xy', 8)):
print a, b, c, d
...
>>> foo(0)
0 x y 8
これは明らかにだけでなく、奇妙な実装の詳細ではありません:あなたは慎重にgrammarを読めば、特にfpdef
が何であるか、あなたはその関数の定義が明示的にタプル解凍のために設計されている参照してください。
私の質問は、なぜこれが設計上の選択であり、必要な場合の使用例ですか?私には、python 1,2,3,5,7,9,13,17の禅に違反するあいまいでエラーを起こす傾向があるようです....
ありがとうKevin。そのPEPはまさに私が探していたものでした。 – wim
このPEPの結果の1つは、Python 2.7で動作していた 'sort(seq、key = lambda(a、b):a * b)'がPython 3の構文エラーです。 – wim