フレーム (frame) オブジェクト¶
-
type PyFrameObject¶
- 次に属します: Stable ABI (不透明な構造体として).
フレームオブジェクトを記述する際に用いられる、オブジェクトを表す C 構造体です。
この構造体には公開メンバはありません。
バージョン 3.11 で変更: この構造体のメンバは公開 C API から削除されました。 詳細は What's New の該当項目 を参照してください。
フレームオブジェクトは PyEval_GetFrame() と PyThreadState_GetFrame() 関数で取得できます。
リフレクション も参照してください。
-
PyTypeObject PyFrame_Type¶
フレームオブジェクトの型です。 Python レベルの
types.FrameTypeと同じオブジェクトです。バージョン 3.11 で変更: 以前は、この型を使うには
<frameobject.h>をインクルードする必要がありました。
-
PyFrameObject *PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals, PyObject *locals)¶
新しいフレームオブジェクトを作成します。 成功した場合は新しいフレームオブジェクトへの 強参照 を返し、失敗した場合は例外を設定して
NULLを返します。
-
int PyFrame_Check(PyObject *obj)¶
objがフレームオブジェクトの場合に非ゼロを返します。バージョン 3.11 で変更: 以前は、この関数を使うには
<frameobject.h>をインクルードする必要がありました。
-
PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)¶
- 戻り値: 新しい参照。
frameの一つ外側のフレームを取得します。Return a strong reference, or
NULLif frame has no outer frame. This raises no exceptions.Added in version 3.9.
-
PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)¶
- 戻り値: 新しい参照。
frameのf_builtins属性を取得します。強参照 を返します。 結果が
NULLになることはありません。Added in version 3.11.
-
PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI (バージョン 3.10 より).
frameのコードを取得します。強参照 を返します。
結果 (フレームのコード) が
NULLになることはありません。Added in version 3.9.
-
PyObject *PyFrame_GetGenerator(PyFrameObject *frame)¶
- 戻り値: 新しい参照。
このフレームを所有するジェネレータ、コルーチン、非同期ジェネレータを取得します。 ジェネレータに所有されていない場合は
NULLを返します。 戻り値がNULLであっても例外は送出しません。強参照 または
NULLを返します。Added in version 3.11.
-
PyObject *PyFrame_GetGlobals(PyFrameObject *frame)¶
- 戻り値: 新しい参照。
frameのf_globals属性を取得します。強参照 を返します。 結果が
NULLになることはありません。Added in version 3.11.
-
int PyFrame_GetLasti(PyFrameObject *frame)¶
frameのf_lasti属性を取得します。Returns -1 if
frame.f_lastiisNone.Added in version 3.11.
-
PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)¶
- 戻り値: 新しい参照。
frameの変数nameを取得します。nameの型はstrでなければなりません。Added in version 3.12.
-
PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)¶
- 戻り値: 新しい参照。
PyFrame_GetVar()と同様ですが、変数名は UTF-8 でエンコードした C 文字列です。Added in version 3.12.
-
PyObject *PyFrame_GetLocals(PyFrameObject *frame)¶
- 戻り値: 新しい参照。
frameのf_locals属性を取得します。 フレームが 最適化されたスコープ を参照する場合、ローカル変数の変更を可能にする、書き込みを反映するプロキシオブジェクトを返します。 それ以外の場合 (クラス、モジュール、exec()、eval()) は、フレームのローカル変数を表すマッピングを直接返します (locals()の説明を参照)。強参照 を返します。
Added in version 3.11.
バージョン 3.13 で変更: As part of PEP 667, return an instance of
PyFrameLocalsProxy_Type.
-
int PyFrame_GetLineNumber(PyFrameObject *frame)¶
- 次に属します: Stable ABI (バージョン 3.10 より).
frame が現在実行している行番号を返します。
フレームのローカル変数のプロキシ¶
Added in version 3.13.
The f_locals attribute on a frame object
is an instance of a "frame-locals proxy". The proxy object exposes a
write-through view of the underlying locals dictionary for the frame. This
ensures that the variables exposed by f_locals are always up to date with
the live local variables in the frame itself.
詳細は PEP 667 を参照してください。
-
PyTypeObject PyFrameLocalsProxy_Type¶
フレームの
locals()プロキシオブジェクトの型。
従来のローカル変数 API¶
これらの API は 緩やかに非推奨 です。 Python 3.13 以降では何も行わず、後方互換性のためだけに存在します。
-
void PyFrame_LocalsToFast(PyFrameObject *f, int clear)¶
Python 3.13 より前では、この関数は
fのf_locals属性をローカル変数の内部の "fast" 配列にコピーし、フレームオブジェクトへの変更をインタープリタから見えるようにしていました。clearが真の場合は、ローカル変数の辞書で値が設定されていない変数も処理していました。バージョン 3.13 で ソフト非推奨 <Soft deprecated>: この関数は何も行わなくなりました。
-
void PyFrame_FastToLocals(PyFrameObject *f)¶
Python 3.13 より前では、この関数はインタープリタが使うローカル変数の内部の "fast" 配列を
fのf_locals属性にコピーし、ローカル変数への変更をフレームオブジェクトから見えるようにしていました。バージョン 3.13 で ソフト非推奨 <Soft deprecated>: この関数は何も行わなくなりました。
-
int PyFrame_FastToLocalsWithError(PyFrameObject *f)¶
Python 3.13 より前では、この関数は
PyFrame_FastToLocals()と同様でしたが、成功した場合は0を返し、失敗した場合は例外を設定して-1を返していました。バージョン 3.13 で ソフト非推奨 <Soft deprecated>: この関数は何も行わなくなりました。
参考
内部フレーム¶
PEP 523 を使わない限り、これは必要ありません。
-
struct _PyInterpreterFrame¶
インタープリタ内部でのフレーム表現。
Added in version 3.11.
-
PyObject *PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
フレームのコードオブジェクトへの 強参照 を返します。
Added in version 3.12.
-
int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
最後に実行した命令のバイトオフセットを返します。
Added in version 3.12.
-
int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
現在実行している行の番号を返します。 行番号がない場合は -1 を返します。
Added in version 3.12.
-
const PyTypeObject *PyUnstable_ExecutableKinds¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
内部のデバッグやトレースに使う、フレームの実行対象の種類 (executor の型) の配列。
デバッガやプロファイラなどのツールは、これを使ってフレームに関連付けられた実行コンテキストの種類を識別できます (例えば、内部フレームを除外するため)。 各エントリーのインデックスは以下の定数で指定します。
定数
説明
-
PyUnstable_EXECUTABLE_KIND_SKIP¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
内部フレーム (例えばインライン化されたフレーム) であり、ツールではスキップすべきです。
-
PyUnstable_EXECUTABLE_KIND_PY_FUNCTION¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
通常の Python 関数に対応するフレーム。
-
PyUnstable_EXECUTABLE_KIND_BUILTIN_FUNCTION¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
ネイティブコードで定義された関数に対応するフレーム。
-
PyUnstable_EXECUTABLE_KIND_METHOD_DESCRIPTOR¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
クラスインスタンスのメソッドに対応するフレーム。
現在、フレームから実行対象の種類を読み取れるのは、文書化されていない内部 API だけです。
Added in version 3.13.
-
PyUnstable_EXECUTABLE_KIND_SKIP¶
-
PyUnstable_EXECUTABLE_KINDS¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
PyUnstable_ExecutableKindsのエントリー数。Added in version 3.13.