a,b=hogeというような代入される値が二つあるものの意味がわかりません。
hogeがタプルやリストなどのシーケンスですと、そのような記法が使えます。
Python
1>>> hoge = (1, 2)
2>>> a, b = hoge
3>>> a
41
5>>> b
62
アンパックと呼ばれる機構で、次のように書いているのと同じです。
Python
1>>> hoge = (1, 2)
2>>> a = hoge[0]
3>>> b = hoge[1]
4>>> a
51
6>>> b
72
応用
なお、逆に複数の値を一つの変数に代入することも可能です。
Python
1>>> fuga = 1, 2, 3
2>>> fuga
3(1, 2, 3)
応用として、複数の値を複数の変数に代入できます。
ただし、基本的には一対一に対応していなければなりません。
Python
1>>> a, b, c = 1, 2, 3
2>>> a
31
4>>> b
52
6>>> c
73
8>>> a, b, c = 1, 2, 3, 4
9Traceback (most recent call last):
10 File "<stdin>", line 1, in <module>
11ValueError: too many values to unpack (expected 3)
末尾だけまとめて受け取りたい場合は、次のようにします。
Python
1>>> a, b, *c = 1, 2, 3, 4
2>>> a
31
4>>> b
52
6>>> c
7[3, 4]
リファレンス
7.2. 代入文 (assignment statement)
[中略]
ターゲットリストが、カンマで区切られた複数のターゲットからなるリスト、もしくは角括弧で囲まれた単一のターゲットの場合: オブジェクトはターゲットリスト中のターゲット数と同じ数の要素からなるイテレート可能オブジェクトでなければならず、その各要素は左から右へと対応するターゲットに代入されます。
- "星付き"のターゲットと呼ばれる、頭にアスタリスクが一つ付いたターゲットがターゲットリストに一つだけ含まれている場合: オブジェクトはイテラブルで、少なくともターゲットリストのターゲットの数よりも一つ少ない要素を持たなければはなりません。 星付きのターゲットより前のターゲットに、イテラブルの先頭の要素が左から右へ代入されます。 星付きのターゲットより後ろのターゲットに、イテラブルの末尾の要素が代入されます。 星付きのターゲットに、イテラブルの残った要素のリストが代入されます (リスト空でもかまいません)。
- そうでない場合: オブジェクトは、ターゲットリストのターゲットと同じ数の要素を持つイテラブルでなければならず、要素は左から右へ対応するターゲットに代入されます。
引用元:Python 言語リファレンス - 7. 単純文 (simple statement)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/08 16:31