型についてのあれこれ(2) - 数値型と型のクラス階層
【 目次 】
数値型
- 3.1.1. 数
- 5.4. 数値型 int, float, long, complex
4 つの異なる数値型があります: 通常の整数型, 長整数型, 浮動小数点型, 複素数型 です。さらに、真偽値(Boolean)型も通常の整数型のサブタイプです。通常の整数 (単に 整数型 とも呼ばれます) は C言語の long 型を使って実装されており、少なくとも 32 ビットの精度があります (sys.maxint は常に通常の整数の各プラットフォームにおける最大値にセットされており、最小値は -sys.maxint - 1 になります)。長整数型には精度の制限がありません。浮動小数点型はたいていは C の double を使って実装されています;
型のクラス階層とABC(abstract base class)
それぞれの型は階層構造で定義されていて、数値型であれば、numbersモジュールのNumberクラスを基底クラスとして、このクラスを継承したクラスとなっている。
Numberクラス自体は抽象クラスとなっておりインスタンス化できない。
従って、実際にはこれを継承したクラスを利用して型を使う事になる。
数値型のクラス階層(多分、こんなふうなイメージ)
numbers.Number numbers.Integral (整数) (通常の) 整数型 (plain integer) int 長整数型 (long integer) long ブール型 (boolean) bool numbers.Real (float) (実数) float numbers.Complex (複素数) complex
Python 3.0開発者ガイド:数値、文字列、データ - インターネットコム
Python 3.0では、numbersというモジュールが導入されました(Python 2.6にもあります)。このモジュールには、各数値型の抽象ベースクラス(ABC)が含まれています。これによって実質的に数値型の階層が形成され、各数値型は上位の数値型クラスのサブクラスになります。
...
Complex、Real、IntegralのABCは、それぞれcomplex型、float型、int型によって実装されています。
ABC(abstract base class)とは抽象基底クラスの事を言うらしい。
numbers.Integralは抽象クラスなのでインスタンス化できない。
これを継承したクラスがintクラスであってインスタンス化できるので実際に使われるクラスはintクラスという事になる。
numbers.Integralはintクラス,longクラス,boolクラスの抽象ベースクラス、
numbers.Realはfloatクラスの抽象ベースクラス、
numbers.Complexはcomplexの抽象ベースクラス
という位置づけなのだろうか
- Python言語リファレンスを読み込む! 3-2 - 回路屋さんのブログ
- Python 3: 第 2 回: 高度な話題
- Python でも ABC (Abstract Base Class) を使えば抽象クラスが作れる | CUBE SUGAR STORAGE
結局、実際に使われる基本的な数値型としてはint, float, long, complex,boolの5種類という事になる。
数値型の操作
数値型の範囲
int型
整数をあらわすには他の言語でもおなじみのint、
値の範囲は-sys.maxint-1からsys.maxint
最低でも符号付32ビットの整数という事になる。
組込み関数int(というかintクラスのコンストラクタというか)を使って基数を指定してint型の値を指定できる。
以下は2進数文字列を使ってint型の数値を生成する例。
a=int("10001010",2) print a
実行結果
138
long型
intと同じく整数だが、なんと値の範囲に制限が無い。
末尾にLを付けてint型と区別する。
組み込み関数longを使って生成することもできる。
python3ではlong型は廃止。
-
Python : 整数最大値、辞書項目数の最大値: enajet
3系ではlong整数が廃止され int 型1個に統一されました。
整数の最大値は無いようで、いくらでも大きくなるようです。
...
備考:maxint 定数は廃止されmaxsize定数が追加されました。 -
sys.maxsize - 29.1. sys — システムパラメータと関数 — Python 3.4.3 ドキュメント
bool型
boolは以外と思うかもしれないがint型のサブクラスという位置付けである。
Falseは0,Trueは1という整数値、
int型のうち、0と1しかとらない整数という事。
組み込み関数boolを使って生成することもできる。
float型
同じみの浮動小数点をあらわすfloat。
floatがあるならdoubleが存在するのかと思ったがpythonにはdoubleは無いみたい。
他の言語でのdoubleがpythonではfloatになるみたい。
単制度,倍制度の区別がなく浮動小数点は一律、倍制度のfloatを使うという事か。
組み込み関数floatを使って生成することもできる。
complex型
複素数をあらわすcomplex型も組込み型として定義されている。
組み込み関数complexを使って生成することもできる。
サンプルコードは
cmathモジュールという複素数のための数学関数を集めたモジュールが用意されている。
decimalモジュール
組込み型では無いがdecimalという10進の浮動小数点算術をサポートするモジュールがあり、Decimalという型(クラス)が定義されていて大きな数値,精度の高い数値を扱う
- 9.4. decimal — 10進固定及び浮動小数点数の算術演算 — Python 2.7ja1 documentation
- Python で正確な小数の計算 (1) - Decimal モジュールを使う | すぐに忘れる脳みそのためのメモ
- Python で正確な小数の計算 (2) - Decimal の値を文字列にして、eval () で評価するときは repr 関数を使う | すぐに忘れる脳みそのためのメモ
- Python で正確な小数の計算 (3) – float, Decimal の有効桁数 | すぐに忘れる脳みそのためのメモ
- decimal – 固定小数点数と浮動小数点数 - Python Module of the Week
数値型を利用するのに便利なモジュール
mathモジュール等の数値型を利用するのに便利なモジュールが標準で用意されている。