【Python】アンダースコア(_)の使い方
Pythonにおけるアンダースコア(_
)の使い方について調べたので,こちらにメモを残しておきます.
主な使い方は以下の通りです.
- Jupyter Notebookやインタラクティブシェルで,最後に表示された値として使用する
- 不要な変数や返り値をアンダースコア(
_
)に割り当てる - 変数や関数,メソッドの命名で使用する
- アンダースコア(
_
)で終わる名前 - アンダースコア(
_
)で始まる名前 - dunder(
__
; double underscore)で始まる名前 - dunder(
__
; double underscore)に挟まれた名前
- アンダースコア(
- 桁の多い数字を見やすくする
一つ一つ解説していきたいと思います.
- Jupyter Notebookやインタラクティブシェルで,最後に表示された値として使用する
- 不要な変数や返り値をアンダースコア(_)に割り当てる
- 変数や関数,メソッドの命名で使用する
- 桁の多い数字を見やすくする
- Reference
Jupyter Notebookやインタラクティブシェルで,最後に表示された値として使用する
Jupyter Notebookやインタラクティブシェルで最後に表示したものを参照することができます.
python Python 3.9.1 (default, Jun 20 2021, 10:59:30) [Clang 12.0.5 (clang-1205.0.22.9)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a = 1 >>> a 1 >>> _ 1
注意点としてはprint
で表示させたものではなく,変数のみを実行したときの結果に対して使用できます.
python Python 3.9.1 (default, Jun 20 2021, 10:59:30) [Clang 12.0.5 (clang-1205.0.22.9)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print("hoge") hoge >>> _ Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '_' is not defined >>> a = "hoge" >>> a 'hoge' >>> _ 'hoge'
不要な変数や返り値をアンダースコア(_
)に割り当てる
不要な変数や関数の返り値をアンダースコア(_
)に割り当てることができます.
for _ in range(10): print("Hello")
詳しい内容については,こちらも参照してみてください.
ちなみに,Jupyter Notebookやインタラクティブシェル内でアンダースコア_
を変数として扱っている場合は,
最後に表示された値としての_
ではなく,変数としての_
が優先されます.
python Python 3.9.1 (default, Jun 20 2021, 10:59:30) [Clang 12.0.5 (clang-1205.0.22.9)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> _ = "hoge" >>> a = 100 >>> a 100 >>> _ 'hoge'
変数や関数,メソッドの命名で使用する
アンダースコア(_
)で終わる名前
予約語と同じ名前で変数や関数を使いたいときに,アンダースコア(_
)で終わる名前をつけます.
list_ = [1, 2, 3, 4] print(list_)
アンダースコア(_
)で始まる名前
外部から参照されたくないモジュールや関数などの命名の際に,慣習的にアンダースコア(_
)から始まる名前をつけます.
class Person: def __init__(self): self._say_hello() def _say_hello(self): print("Hello!") person = Person() # Hello!
注意点としては,実際には外部から参照できてしまうという点です.
class Person: def __init__(self): self._say_hello() def _say_hello(self): print("Hello!") person = Person() # Hello! person._say_hello() # Hello!
dunder(__
; double underscore)で始まる名前
外部から変数やメソッドを参照できないようにするために,dunderを先頭に追加します.
dunderから始まる変数やメソッドには,ネームマングリングが適用されます.
ネームマングリングによって,変数やメソッドの名前は_<Class Name>
が先頭についたものに変換されます.
class Sample: def __init__(self, name): self.name = name self._name = name self.__name = name sample = Sample('hoge') print(sample.name) # クラス外から参照可能 print(sample._name) # クラス内でのみ使用することを示している (ただし参照自体は可能) print(sample.__name) # Error; ネームマングリングされているためクラス外から参照できない print(sample._Sample__name) # ネームマングリング後の名前で参照可能
dunder(__
; double underscore)に挟まれた名前
dunder(__
)に挟まれた名前のメソッドや属性は,特殊メソッドや特殊属性として扱われます.
__init__
や__call__
, __str__
などがその代表例です.
桁の多い数字を見やすくする
アンダースコアを使うことで数字の桁を区切ることができます.
a = 100_000_000 b = 100000000 print(a == b). # True