-
-
Notifications
You must be signed in to change notification settings - Fork 753
Q&A:リストの変数割り当てについて
Koki Saitoh edited this page Sep 28, 2018
·
4 revisions
本書籍P.33に、次のようなコードがあります。
class MatMul:
def __init__(self, W):
self.params = [W]
....
def forward(self, x):
W, = self.params
out = np.dot(x, W)
....
これはMatMul
クラスの実装ですが、なぜW, = ...
というように、W
の後にコンマをつける必要があるのですか?
これは、Pythonでリストの要素を取り出す記法に関係した問題です。
前提としまして、Pythonではリストの要素を変数に割り当てるのに、次のように書くことができます。
>>> list = [0, 1, 2]
>>> a, b, c = list
>>> print(a)
0
ここでは、リストの要素が3つあるため、a, b, c = ...
のように書くことで、リストの要素がそれぞれの変数に割り当てられます。もちろん、ここで次のように書くと、変数a
にはリスト自体が代入されます。
>>> a = list
>>> print(a)
[0, 1, 2]
以上のことは、リストの要素が1つの場合も成り立ちます。ただし、要素が1つの場合は、コンマをつけることで、リストに存在するただ1つの要素を取り出していることを表します。例を挙げると次のようになります。
>>> list = [0]
>>> a, = list
>>> print(a)
0
>>> a = list
>>> print(a)
[0]
これで、今回の質問も解決したと思います。
上の質問のコードでW, = self.params
としたのは、self.params
のリストには要素が1つしかないため、その要素をW
という変数に割り当てるためには、W
の後にコンマを付ける必要があるのです。
-
リストから要素を取り出すときは、リストの要素分だけ変数を用意して、それをコンマで区切り、イコールで代入できる (例:
a, b, c = list
) -
リストの要素が1つの場合は、変数の後にコンマをつけることで、そのリストの要素を取り出すことができる (例:
a, = list
)