5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pythonのアンダースコア(_)ってなんのためにあんの?

Posted at

結論

  1. Return値を無視する
  • 関数の名付けで使い方を区別する。
  • 数字を読みやすくする。
  • インタプリタで最後に表示された値を代表する。

そして、これらを使いこなすことで、「俺、pythonすげぇ知ってるんだぜ」感を友達に見せつけることができるようになるぞ!

内容

1. Return値を無視する

これはおなじみで、よくみますよね。省略。

2. 関数の名付けで使い方の区別

これが色んなパターンが出てきてよくわからんとなった。

a. _function(x): #関数前に一つ

def _single_leading_underscore(x):
    return something

関数前に一つアンダースコアを付ける事により、関数を”内部用”に定義できる。つまり、ほかのpythonファイルからimportした時にこの関数は読み込まれない。ちょっと計算するけど煩雑になるから関数化しとこ~くらいのモチベーションでこれが使われる。

b. function_(x): #関数後に一つ

def single_trailing_underscore_: 
    return something

これはぶっちゃけ、見たことないけど、関数後に一つアンダースコアを付けるのはPython内の重要関数と名付けを被らせない為に使う。listと同じ名前がどうしても関数名として使いたいという困ったちゃんが多用するのであろう。

でもな、それなら別の名前をつけなはれと思う。

c. __function(x): #関数前に二つ

def __double_leading_underscore: 
    return something

class内の関数前に二つアンダースコア付けることで、名前の マングリング機構を呼び出す。このいかめしい「マングリング機構」とは、インタプリタやコンパイラーが普通の方法で変数を扱わなくなることで、例えばclass FooBarの関数__booについて、Foobar.__barでは関数を呼べ出せなく、_Foobar__booという使い方になる。

うん、あんま使わん。

d. __ function __(x): #関数前後に二つずつ

def __double_leading_and_trailing_underscore__: 
    return something

class内の関数の前後に二つずつアンダースコア付けることで、magic methodになる。この聞きなれぬ「magic method」とは日本の書籍ではクラスの特殊メゾットと呼ばれているメゾットで、所謂classを作成する際にお世話になっている

__init__

のことである。特殊メソッドはたくさんあるので、こちらのリンクで確認してほしいが、特殊メソッドは基本的にっ既存のものを使い、自分で新しく定義しない方が賢明やね。

3. 数字を読みやすく

>>> 1000000
Out: 1000000
>>> 1_000_000
Out: 1000000

python3.6以降で実装された、長い数字をわかりやすくするために使われる。

むしろ、このルール知らなかったら「なんで数字の中にアンダースコアあるの?」となるに違いない。初心者向けの言語として有名なpythonが初心者に対しての可読性下がってない?

4. インタプリタで最後に表示された値を代表

インタプリタでは、アンダースコアは最後の表示(expression value)を代表しているらしい。よくわからん。


参考文献
Medium

magic method

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?