“_”アンダースコアのメモ書き【Python】

目次

結論メモ

「__関数名__」は特殊メソッドと呼ばれる予め用意されている関数。オーバーライドして良く使う。

それ以外は、あまり気にしなくて良い。特殊な効果がある場合もあるが、大体慣例として使っているだけで、アンダースコアにこだわる必要が無いと個人的に思う。

リターン値を無視する意思表示としての慣例

PYTHONCOPY
#複数値のリターンがある関数
def func():
    return 'test',1

#xにtest、yに1が返却されている。
#例.x,y=func()
#yの返却値は必要ないので、_で使わない意思表示。ただの慣例
x,_=func()

#xを出力するだけなので、yは使わない。
print(x)
#_を出力すると1と表示される。つまり、ただの変数と認識されているっぽい。
print(_)

特に使わない値を受け取る変数名の慣例として、アンダースコアが使われる。アンダースコアである必要は無い。

「不要な値をアンダースコアで受け取ることで、メモリに割り当てず破棄できる」みたいな紹介をしているサイトを見かけるが、特にそんなことは無いと思う。

試しに_を出力してみると、_に渡された破棄されていると思っていた値が表示された。

関数、変数名の前後につける

_名称(例.def _func:)

別クラスの関数を利用する際に、「from クラス名 import*」で使えるようになるが、このアンダースコアを1つ頭に付けている関数は利用できない。

ただし、クラス名.関数名で利用することはできる

名称_(例.class_ = “class名”)

予約語と同じ名前は使えないので、似たような名前にするための区別として、慣例的に使われる。アンダースコアである必要は無い。

__名称(例.self.__test)

マングリングの適用らしい。クラス外から参照できなくなるらしいが、試してみたら普通に呼べる。良く分からない。

サブクラスと同名の定義をしたい場合、衝突を避けて、自身のクラスの変数を利用したい時に使えるらしい。

__名称__(例.__init__)

特殊メソッドと呼ばれる、既に用意されている関数のこと。

適切にオーバーライドすることで、様々な処理が可能になる。__exit__とか__del__など色々ある。

自分で新しく定義するのは止めた方が良いとのこと。

Weekly Most Popular
記事書いたりサイト運営してる人
シイタ / siita
シイタ / siita
現役サラリーマン/システムエンジニアです。 会社外でも、自分に自信を持って活躍できるようになりたい。金銭的にも安心できるようになりたい。という気持ちから技術向上や不労所得を得るために、日々活動することを記録し、共有していきます。