Python の splat 演算子が行うこと (リストまたはタプルを呼び出された関数内の個別の引数にアンパックする) にはいくつかの答えがありますが、splat 演算子がリストをタプルに強制する方法 (リストを渡して効果的にレンダリングする方法) の興味深い副作用については何も見つかりません。 splat は参照ではなく値で渡されます)。
では、Python の splat 演算子がリストをタプルに強制するのは本当ですか。
def test(*arg):
print(type(arg))
for a in arg:
print(a)
lst = ['roger', 'colleen']
print(type(lst))
test(*lst)
tpl = ('roger', 'colleen')
print(type(tpl))
test(*tpl)
らしい。上記のコードは、次の出力を生成します。
<class 'list'>
<class 'tuple'>
roger
colleen
<class 'tuple'>
<class 'tuple'>
roger
colleen
リストとタプルの知識を固めようとしています。私はここでそれを読みました
タプルとリストの違いは、タプルはリストとは異なり変更できないことと、タプルは括弧を使用するのに対し、リストは角括弧を使用することです。
リストを指定して test() を呼び出しても、 test() でリストが変更されないことに最初は驚きました (それらは不変ではありません)。しかし、それらはタプルに強制されるため、splat 演算子を使用して機能するように渡されます。右?おもう!
更新: rkersh のコメントは、多くの明確さを追加する何かを言った:
test(*arg) はリストで呼び出されているのではなく、リスト内のアイテムで呼び出されています)--そして、これらのアイテムは *arg によってタプルとして認識されます。