【Python基礎】for関数や関数の返り値で使う「_(アンダーバー、アンダースコア)」の意味

  • URLをコピーしました!
目次

アンダーバー、アンダースコア

今回は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

こちらの場合もメモリ消費を抑えることと、明示することでの可読性の向上がメリットです。

今まで関数ではなかなか使わなかった「_(アンダーバー)」ですが、こうやってみると結構使いやすそうだなと思います。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次