アンダーバー、アンダースコア
今回はfor文や関数の返り値で最近使い始めたアンダーバー(アンダースコア)に関して解説していきます。
どういうものかというと、こんな感じのもの。
for _ in range(10):
print('a')
for文を使って繰り返し処理をしているのですが、その際に繰り返しの値自体(for _ in range(10):)を使わない場合、変数を置く代わりに「_(アンダーバー)」を置くというものです。
この「_(アンダーバー)」では得られた値を保存しないことから、メモリ消費を抑えられるというメリットがあるようです。
今回はこの「_(アンダーバー)」をみていきましょう。
for文におけるアンダーバー
例えばこんな感じのプログラムを書いてみたとします。
import random
random_list = []
for i in range(10):
random_list.append(random.randrange(10))
print(random_list)
実行結果
[7, 2, 7, 2, 5, 0, 4, 5, 9, 3]
「for i in range(10):」で繰り返し処理しているのですが、その後で「変数i」は使用していません。
for文内ではランダムな数値を取得し、リストに格納しています(random_list.append(random.randrange(10)))。
この場合、わざわざ「range(10)」から「変数i」に毎回数値を代入すると、わずかながらでもそれだけメモリを使用することになります。
そこで値を使用しない場合、変数名の代わりに「_(アンダーバー)」を使用すると、値を保存せずに繰り返しだけされるようになります。
import random
random_list = []
for _ in range(10):
random_list.append(random.randrange(10))
print(random_list)
実行結果
[3, 2, 9, 3, 4, 9, 4, 8, 3, 7]
また値を取得しないことを明示することになるので、プログラムの可読性も上がります。
もちろんリスト内包表記でもアンダーバーを使用することができます。
import random
random_list = [random.randrange(10) for _ in range(10)]
print(random_list)
実行結果
[2, 4, 1, 5, 6, 2, 6, 5, 0, 4]
関数の返り値のアンダーバー
もう一つは関数の返り値にアンダーバーを使用する場面です。
例えばこんな感じで、ランダムな値を2つ返す関数があったとします。
import random
def randomTwo():
random1 = random.randrange(10)
random2 = random.randrange(100)
return random1, random2
a, b = randomTwo()
print(a, b)
実行結果
1 88
関数の返り値を「a, b」で受け取っています(a, b = randomTwo())。
もし「a」だけ必要だからと「a = randomTwo()」と書いても、aの値だけが取得できるわけではなく、タプルとして全部の値が渡されてしまいます。
import random
def randomTwo():
random1 = random.randrange(10)
random2 = random.randrange(100)
return random1, random2
a = randomTwo()
print(a)
実行結果
(5, 26)
そこで必要ない返り値に「_(アンダーバー)」を使うことで、その値を受け取らずに処理できます。
import random
def randomTwo():
random1 = random.randrange(10)
random2 = random.randrange(100)
return random1, random2
a, _ = randomTwo()
print(a)
実行結果
7
こちらの場合もメモリ消費を抑えることと、明示することでの可読性の向上がメリットです。
今まで関数ではなかなか使わなかった「_(アンダーバー)」ですが、こうやってみると結構使いやすそうだなと思います。
ではでは今回はこんな感じで。
コメント