2
3

はじめに

Pythonをデバッグしたときに出てくる special variablesについて、皆さんご存知でしょうか? この記事では、special variablesについて、解説したいと思います。

image.png

special variablesをクリックして、開くとDunder(特殊メソッド)がいっぱい出てきます。

image.png

special variablesとは?

インタープリタやスクリプト実行時に自動で設定される特殊変数。特殊変数は全てグローバル変数になる。
関数の場合は、以下のようにfunction variables配下に関数ごとに作られる。

image.png

インタープリタで確認する場合は、 dir() でグローバル変数が見れる。globals() でも確認できる。

>>> dir()
['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>> globals().items()
dict_items([('__name__', '__main__'), ('__doc__', None), ('__package__', None), ('__loader__', <class '_frozen_importlib.BuiltinImporter'>), ('__spec__', None), ('__annotations__', {}), ('__builtins__', <module 'builtins' (built-in)>)])

特殊変数の種類

__name__

現在のモジュール名が格納される。

>>> x = 1
>>> __name__
'__main__'

__doc__

関数やクラスなどのドキュメントが入る。

image.png

__package__

現在のモジュールが属するパッケージ名が入る。

__loader__

モジュールのインポートを実際に行うオブジェクト

>>> import os
>>> os.__loader__
<class '_frozen_importlib.FrozenImporter'>

__spec__

モジュールのインポートに関するメタデータを含むオブジェクト

>>> import os
>>> print(os.__spec__)
ModuleSpec(name='os', loader=<class '_frozen_importlib.FrozenImporter'>, origin='frozen')

__file__

実行中のファイルのパスが入っている。

image.png

__builtins__

open()len()などの組み込み関数や組み込み定数を含むモジュールを表す。

>>> print(__builtins__.len("Hello, world!"))  # 13
13
>>> print(dir(__builtins__))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BaseExceptionGroup', 'BlockingIOError', 
            # ・・・・

また、builtinsモジュールを使用しても調べることができる。

>>> import builtins
>>> print(builtins.len("Hello, world!"))
13
>>> help(builtins.open)

__cached__

キャッシュが使われている際に格納される。一般的には、ファイルオプション。

終わりに

この記事では、グローバル変数を定義したときに、自動でつけられる最低限の特殊変数のみをあげました。関数の特殊変数には、さらに多くのDunder(特殊メソッド)がついてきます。

Dunderの説明は以下の記事を参照にしてください。

参考文献

  1. 【Python中・上級者向け】Dunderとは? #Python - Qiita
  2. The import system — Python 3.12.4 documentation
  3. pythonのimportシステム周りのことについてのメモ、あるいはimport fooとしたときに何が起きるかについて - podhmo's diary
2
3
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
2
3