-4

タプルのアンパックがどのように機能しているのか疑問に思っていたので、スライスの代わりにこの回答をいくつかのスレッドで見つけました:

>>>>def unpack(first,*rest):
    return first, rest

次のように機能します。

>>>>first,rest=unpack(*(1,2,3))
>>>>first
1
>>>>rest
(2,3)

* の仕組みがわかりません。引数「最初」は、関数 unpack に与えられるべきではありませんか? * は、引数がオプションであることを意味すると思いました。

ご協力いただきありがとうございます

4

2 に答える 2

4

*関数定義では、オプションを意味するものではありません。これは、「呼び出し元がタプルに提供した追加の(キーワード以外の)引数をパックし、タプルをここに入れる」ことを意味します。同様に*、関数呼び出しでは、「この一連のものをアンパックし、すべての要素を引数として関数に個別に提供する」ことを意味します。

unpack(*(1,2,3))

開梱(1,2,3)して呼び出す

unpack(1,2,3)

1は に割り当てられfirst、残りの引数23はタプルにパックされて に割り当てられrestます。

于 2013-07-25T07:45:22.847 に答える
1

あなたの場合、unpack(*(1,2,3))ちょうどunpack(1, 2, 3)です。

unpack の実装は、最初の引数と args tale を受け取り、それをタプルとして返します。

引数を変数として渡す場合は、スター構文が便利です。

a = (1, 2, 3)
first, rest = unpack(*a)
于 2013-07-25T07:43:24.170 に答える