以下は Python に組み込まれている型のリストです。(C、Java、または 実装に使われているその他の言語で書かれた) 拡張モジュールでは、 その他に新たな型を定義することができます。将来のバージョンの Python では、型の階層に新たな型 (整数を使って効率的に記憶される 有理数型、など) を追加することができるかもしれません。
以下に説明する型のいくつかには、`特殊属性 (special attribute)' と題された段落が連ねられています。これらの属性は実装へのアクセス 手段を提供するもので、一般的な用途に利用するためのものではありません。 特殊属性の定義は将来変更される可能性があります。
None
でアクセスされます。このオブジェクトは、様々な状況で値が
存在しないことをしめします。例えば、明示的に値を返さない関数
は None
を返します。None
の真値 (truth value) は
偽 (false) です。
NotImplemented
でアクセスされます。数値演算に関するメソッドや拡張比較 (rich comparison)
メソッドは、被演算子が該当する演算を行うための実装をもたない場合、
この値を返すことがあります。(演算子によっては、インタプリタが
関連のある演算を試したり、他の代替操作を行います。) 真値は真 (true)
です。
Ellipsis
でアクセスされます。スライス内に "..." 構文がある場合に
使われます。真値は真 (true)です。
Python は整数、浮動小数点数、複素数の間で区別を行っています:
整数型は、整数(正の数および負の数)を表す数学的集合内における要素を 表現する型です。
以下に三つの整数型を示します:
"False"
および "True"
が返されます。
z
の実数部および虚数部は、
それぞれ読み出し専用属性 z.real
および z.imag
で取り出すことができます。
a[i]
で選択します。
シーケンスはスライス操作 (slice) もサポートしています:
a[i:j]
とすると、
i <=
k <
j であるインデクス k
をもつ全ての要素を選択します。
式表現としてスライスを用いた場合、スライスは同じ型をもつ新たなシーケンスを
表します。新たなシーケンス内では、インデクス集合が 0 から始まるように
インデクスの値を振りなおします。
シーケンスによっては、 第三の ``ステップ (step)'' パラメタを持つ
``拡張スライス (extended slice)'' もサポートしています:
a[i:j:k]
は、
x = i + n*k
, n >=
0
かつ i <=
x <
j であるような
インデクス x を持つような a 全ての要素を選択します。
シーケンスは、変更可能なものか、そうでないかで区別されています:
以下の型は変更不能なシーケンス型です:
(ネイティブの文字セットが ASCIIでないシステムでは、chr() や ord() が ASCII と EBCDIC との間で対応付けを行っており、 文字列間の比較で ASCII 順が守られる限り、文字列の内部表現として EBCDIC を使ってもかまいません。誰か他にもっとましなルールをお持ちですか?)
sys.maxunicode
で与えられており、コンパイル時に
Python がどう設定されているかに依存します)。 Unicode オブジェクト内
にサロゲートペア (surrogate pair) があってもよく、Python は
サロゲートペアを二つの別々の Unicode 要素として報告します。
組み込み関数 unichr() および
ord() は、コード単位と非負の整数で表された
Unicode 標準 3.0 で定義された Unicode 序数との間で変換を行います。
他の文字エンコード形式との相互変換は、 Unicode メソッド encode()
および組み込み関数 unicode()で行うことができます。
Python に最初から組み込まれている変更可能なシーケンス型は、今のところ 一つだけです:
拡張モジュール array では、別の 変更可能なシーケンス型を提供しています。
a[k]
は、k
でインデクス指定
された要素を a
から選択します; 選択された要素は式の中で
使うことができ、代入や del 文の対象にすることができます。
組み込み関数 len() は、マップ内の要素数を返します。
Python に最初から組み込まれているマップ型は、今のところ 一つだけです:
1
と 1.0
)、
互いに同じ辞書のエントリを表すインデクスとして使うことができます。
辞書は変更可能な型です; 辞書は {...}
表記で生成します
( 5.2.6 節, ``辞書表現'' を参照してください)。
拡張モジュール dbm 、 gdbm 、および bsddb では、別のマップ型を提供 しています。
特殊属性:
Attribute | Meaning | |
---|---|---|
func_doc | 関数のドキュメンテーション文字列です。
ドキュメンテーションがない場合は None になります。 |
書き込み可能 |
__doc__ | func_doc の別名です。 | 書き込み可能 |
func_name | 関数の名前です。 | 書き込み可能 |
__name__ | func_name の別名です。 | 書き込み可能 |
__module__ | 関数が定義されているモジュールの名前です。
モジュール名がない場合は None になります。 |
書き込み可能 |
func_defaults | デフォルト値を持つ引数に対するデフォルト値が
収められたタプルで、デフォルト値を持つ引数がない場合には None
になります。 |
書き込み可能 |
func_code | コンパイルされた関数本体を表現するコード オブジェクトです。 | 書き込み可能 |
func_globals | 関数のグローバル変数の入った辞書 (への参照) です -- この辞書は、関数が定義されているモジュールのグローバルな名前空間を決定します。 | 読み出し専用 |
func_dict | 任意の関数属性をサポートするための名前空間が 収められています。 | 書き込み可能 |
func_closure | None または関数の個々の自由変数
(引数以外の変数) に対して値を結び付けている
セル (cell) 群からなるタプルになります。 |
読み出し専用 |
「書き込み可能」 とラベルされている属性のほとんどは、代入された値の 型をチェックします。
バージョン 2.4 で 変更 された仕様:
func_name
は書き込み可能になりました
関数オブジェクトはまた、任意の属性を設定したり取得したりできます。 この機能は、例えば関数にメタデータを付与したい場合などに使えます。 関数の get や set には、通常のドット表記を使います。 現在の実装では、ユーザ定義の関数でのみ属性をサポートしているので 注意して下さい。組み込み関数の属性は将来サポートする予定です。
関数定義に関するその他の情報は、関数のコードオブジェクトから得られます; 後述の内部型 (internal type) に関する説明を参照してください。
None
) を任意の呼び出し可能オブジェクト (通常は
ユーザ定義関数) と結合し (combine) ます。
読み出し専用の特殊属性: im_self は
クラスインスタンスオブジェクトで、im_func は関数オブジェクト
です; im_class は結合メソッド (bound method) において
im_self が属しているクラスか、あるいは非結合メソッド
(unbound method) において、要求されたメソッドを定義している
クラスです; __doc__ はメソッドのドキュメンテーション文字列
(im_func.__doc__
と同じ) です; __name__ はメソッドの
名前 (im_func.__name__
と同じ) です; __module__ は
メソッドが定義されているモジュールの名前になるか、モジュール名が
ない場合は None
になります。
バージョン 2.2 で 変更 された仕様:
メソッドを定義しているクラスを参照するために
im_self が使われていました
メソッドもまた、根底にある関数オブジェクトの任意の関数属性 に (値の設定はできませんが) アクセスできます。
クラスの属性を (おそらくクラスのインスタンスを介して) 取得する際には、 その属性がユーザ定義の関数オブジェクト、非結合 (unbound) のユーザ定義 メソッドオブジェクト、あるいはクラスメソッドオブジェクトであれば、 ユーザ定義メソッドオブジェクトが生成されることがあります。 属性がユーザ定義メソッドオブジェクトの場合、属性を取得する対象の オブジェクトが属するクラスがもとのメソッドオブジェクトが定義されている クラスと同じクラスであるか、またはそのサブクラスであれば、新たな メソッドオブジェクトだけが生成されます。 それ以外の場合には、もとのメソッドオブジェクトがそのまま使われます。
クラスからユーザ定義関数オブジェクトを取得する方法でユーザ定義
メソッドオブジェクトを生成すると、 im_self 属性は
None
になり、メソッドオブジェクトは非結合 (unbound)
であるといいます。クラスのインスタンスからユーザ定義関数
オブジェクトを取得する方法でユーザ定義メソッドオブジェクトを
生成すると、im_self 属性はインスタンスになり、
メソッドオブジェクトは結合 (bound) であるといいます。
どちらの場合も、新たなメソッドの im_class 属性は、
メソッドの取得が行われたクラスになり、im_func 属性は
もとの関数オブジェクトになります。
クラスやインスタンスから他のユーザ定義メソッドオブジェクトを 取得する方法でユーザ定義メソッドオブジェクトを生成した場合、 その動作は関数オブジェクトの場合と同様ですが、新たなインスタンスの im_func 属性はもとのメソッドオブジェクトの属性ではなく、 新たなインスタンスの属性になります。
クラスやインスタンスからクラスメソッドオブジェクトを取得する 方法でユーザ定義メソッドオブジェクトを生成した場合、 im_self 属性はクラス自体 (im_class 属性と 同じ) となり、im_func 属性はクラスメソッドの根底に ある関数オブジェクトになります。
非結合ユーザ定義メソッドオブジェクトの呼び出しの際には、 根底にある関数 (im_func) が呼び出されます。このとき、 最初の引数は適切なクラス (im_class) またはサブクラスの インスタンスでなければならないという制限が課されています。
結合ユーザ定義メソッドオブジェクトの呼び出しの際には、
根底にある関数 (im_func) が呼び出されます。このとき、
クラスインスタンス (im_self) が引数の先頭に挿入され
ます。例えば、関数 f() の定義が入ったクラスを C
とし、x
を C のインスタンスとすると、
x.f(1)
の呼び出しは C.f(x, 1)
と同じになります。
ユーザ定義メソッドオブジェクトがクラスオブジェクトから導出される際、
im_self に記憶されている ``クラスインスタンス'' はクラス
自体になります。これは、x.f(1)
や C.f(1)
の呼び出しが
根底にある関数を f
としたときの呼び出し f(C,1)
と
等価になるようにするためです。
関数オブジェクトから (結合または非結合の) メソッドオブジェクトへの 変換は、クラスやインスタンスから属性を取り出すたびに行われるので 注意してください。場合によっては、属性をローカルな変数に代入して おき、その変数を使って関数呼び出しを行うと効果的な最適化になります。 また、上記の変換はユーザ定義関数に対してのみ起こるので注意してください; その他の呼び出し可能オブジェクト (および呼び出し可能でない全ての オブジェクト) は、変換を受けずに取り出されます。それから、 クラスインスタンスの属性になっているユーザ定義関数は、結合メソッドに 変換できないと知っておくことも重要です; 結合メソッドへの変換が 行われるのは、関数がクラスの一属性である場合 だけ です。
None
になります;
__name__ は関数の名前です; __self__ は None
に設定されています (組み込みメソッドの節も参照してください);
__module__ は、関数が定義されているモジュールの名前です。
モジュール名がない場合は None
になります。
alist.append()
です。
この場合には、読み出し専用の属性 __self__ は
alist で表されるオブジェクトになります。
x(arguments)
とすると、
x.__call__(arguments)
呼び出しを短く書けます。
m.x
は m.__dict__["x"]
と同じです。
モジュールオブジェクトには、モジュールを初期化するために使われる
コードオブジェクトは入っていません (一度初期化が終わればもう必要
ないからです)。
属性の代入を行うと、モジュールの名前空間辞書の内容を更新します。 例えば、 "m.x = 1" は "m.__dict__["x"] = 1" と同じです。
読み出し専用の特殊属性: __dict__ はモジュールの名前空間で、 辞書オブジェクトです。
定義済みの (書き込み可能な) 属性: __name__
はモジュールの名前です;
__doc__ は関数のドキュメンテーション
文字列です。ドキュメンテーションがない場合は None
になります;
モジュールがファイルからロードされた場合、 __file__ はロード
されたモジュールファイルのパス名です。インタプリタに静的にリンクされて
いる C モジュールの場合、__file__ 属性はありません;
共有ライブラリから動的にロードされた拡張モジュールの場合、この属性は
共有ライブラリファイルのパス名になります。
C.x
は C.__dict__["x"]
と同じです。
属性がこの検索で見つからない場合、現在のクラスの基底クラスへと
検索を続けます。検索は深さ優先 (depth-first)、かつ基底クラスの
挙げられているリスト中の左から右 (left-to-right) の順番で行われ
ます。
クラス (C とします) への属性参照で、要求している属性が ユーザ定義関数オブジェクトや、C やその基底クラスに関連付け られている非結合のユーザ定義メソッドオブジェクトである場合、 im_class 属性が C であるような非結合ユーザ定義 メソッドオブジェクトに変換されます。 要求している属性がクラスメソッドオブジェクトの場合、 im_class とその im_self 属性がどちらも C であるようなユーザ定義メソッドオブジェクトに変換されます。 要求している属性が静的メソッドオブジェクトの場合、静的メソッド オブジェクトでラップされたオブジェクトに変換されます。 クラスから取り出した属性と実際に __dict__ に入っている ものが異なるような他の場合については、 3.4.2 節を 参照してください。
クラス属性を代入すると、そのクラスの辞書だけが更新され、基底クラスの 辞書は更新しません。
クラスオブジェクトを呼び出す (上記を参照) と、クラスインスタンスを 生成します (下記を参照)。
特殊属性: __name__ はクラス名です;
__module__ はクラスが定義されているモジュールの名前です;
__dict__ はクラスの名前空間が入った辞書です;
__bases__ は基底クラスの入った (空、あるいは単要素を取りえる)
タプルで、基底クラスリストの順番になっています; __doc__ は
クラスのドキュメンテーション文字列です。ドキュメンテーション文字列が
ない場合には None
になります。
属性の代入や削除を行うと、インスタンスの辞書を更新しますが、クラスの 辞書を更新することはありません。クラスで __setattr__() や __delattr__() メソッドが定義されている場合、直接インスタンスの 辞書を更新する代わりにこれらのメソッドが呼び出されます。
クラスインスタンスは、ある特定の名前のメソッドを持っている 場合、数値型やシーケンス型、あるいはマップ型のように振舞うことが できます。 3.4 節、 ``特殊メソッド名'' を参照 してください。
特殊属性: __dict__ は属性の辞書です; __class__ はインスタンスのクラスです。
sys.stdin
,
sys.stdout
および
sys.stderr
といったオブジェクトは、
インタプリタの標準入力、標準出力、および標準エラー出力
ストリームに対応するよう初期化されます。ファイルオブジェクトに
関する完全な記述については、Python ライブラリ
リファレンス を参照してください。
読み出し専用の特殊属性: co_name は関数名を表します; co_argcount は固定引数 (positional argument) の数です; co_nlocals は関数が使う (引数を含めた) ローカル変数の数です; co_varnames はローカル変数名の入ったタプルです (引数名 から始まっています); co_cellvars はネストされた関数で 参照されているローカル変数の名前が入ったタプルです; co_freevars は自由変数の名前が入ったタプルです。 co_code はバイトコード列を表現している文字列です; co_consts はバイトコードで使われているリテラルの入った タプルです; co_names はバイトコードで使われている名前 の入ったタプルです; co_filename はバイトコードのコンパイル が行われたファイル名です; co_firstlineno は関数の最初の 行番号です; co_lnotab はバイトコードオフセットから行番号 への対応付けをコード化した文字列です (詳細についてはインタプリタの ソースコードを参照してください); co_stacksize は関数で (ローカル変数の分も含めて) 必要なスタックサイズです; co_flags はインタプリタ用の様々なフラグをコード化した 整数です。
以下のフラグビットが co_flags で定義されています:
0x04
ビットは、関数が "*arguments" 構文を使って
任意の数の固定引数を受理できる場合に立てられます;
0x08
ビットは、関数が "**keywords" 構文を使って
キーワード引数を受理できる場合に立てられます;
0x20
ビットは、関数がジェネレータである場合に立てられます。
将来機能 (future feature) 宣言 ("from __future__ import division")
もまた、co_flags のビットを立てることで、コードオブジェクトが
特定の機能を有効にしてコンパイルされていることを示します:
0x2000
ビットは、関数が将来機能を有効にしてコンパイルされて
いる場合に立てられます; 以前のバージョンの Python では、0x10
および 0x1000
ビットが使われていました。
co_flags のその他のビットは将来に内部的に利用するために 予約されています。
コードオブジェクトが関数を表現している場合、co_consts の最初の
要素は関数のドキュメンテーション文字列
になります。ドキュメンテーション文字列が定義されていない場合には
None
になります。
読み出し専用の特殊属性: f_back は (呼び出し側にとっての)
以前のスタックフレームです。呼び出し側がスタックフレームの最下段で
ある場合には None
です; f_code は現在のフレームで
実行しようとしているコードオブジェクトです; f_locals
はローカル変数を検索するために使われる辞書です;
f_globals はグローバル変数用です;
f_builtins は組み込みの (Python 固有の) 名前です;
f_restricted は、関数が制限つき実行 (restricted execution)
モードで実行されているかどうかを示すフラグです; f_lasti
は厳密な命令コード (コードオブジェクト中のバイトコード文字列への
インデクス) です。
書き込み可能な特殊属性: f_trace が None
でない場合、
各ソースコード行の先頭で呼び出される関数になります;
f_exc_type, f_exc_value, f_exc_traceback
は、現在のフレームが以前に引き起こした例外が提供する親フレーム内で
もっとも最近捕捉された例外を表します
(それ以外の場合は、これらはNoneになります。);
f_lineno はフレーム中における現在の行番号です -- トレース関数
(trace function) 側でこの値に書き込みを行うと、指定した行にジャンプ
します (最下段の実行フレームにいるときのみ) 。デバッガでは、
f_fileno を書き込むことで、ジャンプ命令 (Set Next Statement 命令とも
呼ばれます) を実装できます。
try
文'' を参照)。
トレースバックは sys.exc_traceback
として得ることができ、
sys.exc_info()
が返すタプルの三番目の要素としても得られます.
インタフェースとしては後者の方が推奨されていますが、これは
プログラムがマルチスレッドを使っている場合に正しく動作するからです。
プログラムに適切なハンドラがない場合、スタックトレースは (うまく
書式化されて) 標準エラーストリームに書き出されます; インタプリタが
対話的に実行されている場合、sys.last_traceback
として
得ることもできます。
読み出し専用の特殊属性: tb_next はスタックトレース内の
(例外の発生しているフレームに向かって) 次のレベルです。
次のレベルが存在しない場合には None
になります;
tb_frame は現在のレベルにおける実行フレームを指します;
tb_lineno は例外の発生した行番号です; tb_lasti
は厳密な命令コードです。トレースバック内の行番号や最後に実行された
命令は、try 文内で例外が発生し、かつ対応する
except 節や finally 節がない場合には、
フレームオブジェクト内の行番号とは異なるかもしれません。
a[i:j:step]
、 a[i:j, k:l]
、
あるいは a[..., i:j]
です。スライスオブジェクトは組み込み関数
slice() で生成されます。
読み出し専用の特殊属性: start は下境界 (lower bound) です;
stop は上境界 (upper bound) です; step はステップ値
(step value) です; それぞれ省略されている場合には None
になります。
これらの属性は任意の型の値をとることができます。
スライスオブジェクトはメソッドを一つサポートします:
self, length) |
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。