Đối tượng khung

type PyFrameObject
Một phần của API có giới hạn (như một cấu trúc mờ đục).

Cấu trúc C của các đối tượng được sử dụng để mô tả các đối tượng khung.

Không có thành viên công cộng trong cấu trúc này.

Thay đổi trong phiên bản 3.11: Các thành viên của cấu trúc này đã bị xóa khỏi C API công khai. Tham khảo What's New entry để biết chi tiết.

Các hàm PyEval_GetFrame()PyThreadState_GetFrame() có thể được sử dụng để lấy đối tượng khung.

Xem thêm Reflection.

PyTypeObject PyFrame_Type

Các loại đối tượng khung. Nó là đối tượng tương tự như types.FrameType trong lớp Python.

Thay đổi trong phiên bản 3.11: Trước đây, loại này chỉ có sau khi thêm <frameobject.h>.

PyFrameObject *PyFrame_New(PyThreadState *tstate, PyCodeObject *code, PyObject *globals, PyObject *locals)

Tạo một đối tượng khung mới. Hàm này trả về strong reference cho đối tượng khung mới nếu thành công và trả về NULL với ngoại lệ được đặt nếu thất bại.

int PyFrame_Check(PyObject *obj)

Trả về khác 0 nếu obj là đối tượng khung.

Thay đổi trong phiên bản 3.11: Trước đây, chức năng này chỉ khả dụng sau khi thêm <frameobject.h>.

PyFrameObject *PyFrame_GetBack(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới.

Nhận frame khung bên ngoài tiếp theo.

Trả về strong reference hoặc NULL nếu frame không có khung bên ngoài. Điều này không có ngoại lệ.

Added in version 3.9.

PyObject *PyFrame_GetBuiltins(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới.

Lấy thuộc tính f_builtins của frame.

Trả về strong reference. Kết quả không thể là NULL.

Added in version 3.11.

PyCodeObject *PyFrame_GetCode(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định kể từ phiên bản 3.10.

Lấy mã frame.

Trả về strong reference.

Kết quả (mã khung) không được là NULL.

Added in version 3.9.

PyObject *PyFrame_GetGenerator(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới.

Lấy trình tạo, coroutine hoặc trình tạo không đồng bộ sở hữu khung này hoặc NULL nếu khung này không thuộc sở hữu của trình tạo. Không đưa ra ngoại lệ, ngay cả khi giá trị trả về là NULL.

Trả về strong reference hoặc NULL.

Added in version 3.11.

PyObject *PyFrame_GetGlobals(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới.

Lấy thuộc tính f_globals của frame.

Trả về strong reference. Kết quả không thể là NULL.

Added in version 3.11.

int PyFrame_GetLasti(PyFrameObject *frame)

Lấy thuộc tính f_lasti của frame.

Trả về -1 nếu frame.f_lastiNone.

Added in version 3.11.

PyObject *PyFrame_GetVar(PyFrameObject *frame, PyObject *name)
Giá trị trả về: Tham chiếu mới.

Lấy biến name của frame.

  • Trả về strong reference cho giá trị biến thành công.

  • Tăng NameError và trả về NULL nếu biến không tồn tại.

  • Đưa ra một ngoại lệ và trả về NULL khi có lỗi.

Loại name phải là str.

Added in version 3.12.

PyObject *PyFrame_GetVarString(PyFrameObject *frame, const char *name)
Giá trị trả về: Tham chiếu mới.

Tương tự như PyFrame_GetVar(), nhưng tên biến là chuỗi C được mã hóa trong UTF-8.

Added in version 3.12.

PyObject *PyFrame_GetLocals(PyFrameObject *frame)
Giá trị trả về: Tham chiếu mới.

Lấy thuộc tính f_locals của frame. Nếu khung tham chiếu đến optimized scope, khung này sẽ trả về một đối tượng proxy ghi qua cho phép sửa đổi cục bộ. Trong tất cả các trường hợp khác (lớp, mô-đun, exec(), eval()), nó trả về ánh xạ biểu thị trực tiếp các cục bộ khung (như được mô tả cho locals()).

Trả về strong reference.

Added in version 3.11.

Thay đổi trong phiên bản 3.13: Là một phần của PEP 667, trả về một phiên bản của PyFrameLocalsProxy_Type.

int PyFrame_GetLineNumber(PyFrameObject *frame)
Một phần của ABI ổn định kể từ phiên bản 3.10.

Trả về số dòng mà frame hiện đang thực thi.

Proxy cục bộ khung

Added in version 3.13.

Thuộc tính f_locals trên frame object là một phiên bản của "proxy khung cục bộ". Đối tượng proxy hiển thị chế độ xem ghi qua từ điển cục bộ cơ bản cho khung. Điều này đảm bảo rằng các biến được hiển thị bởi f_locals luôn được cập nhật với các biến cục bộ trực tiếp trong chính khung đó.

Xem PEP 667 để biết thêm thông tin.

PyTypeObject PyFrameLocalsProxy_Type

Loại đối tượng proxy khung locals().

int PyFrameLocalsProxy_Check(PyObject *obj)

Trả về khác 0 nếu obj là proxy locals() khung.

API biến cục bộ cũ

Các API này là soft deprecated. Kể từ Python 3.13, chúng không làm gì cả. Chúng tồn tại chỉ để tương thích ngược.

void PyFrame_LocalsToFast(PyFrameObject *f, int clear)

Chức năng này là soft deprecated và không làm gì cả.

Trước Python 3.13, hàm này sẽ sao chép thuộc tính f_locals của f sang mảng "nhanh" bên trong của các biến cục bộ, cho phép trình thông dịch hiển thị các thay đổi trong đối tượng khung. Nếu clear đúng, hàm này sẽ xử lý các biến chưa được đặt trong từ điển cục bộ.

Thay đổi trong phiên bản 3.13: Chức năng này bây giờ không làm gì cả.

void PyFrame_FastToLocals(PyFrameObject *f)

Chức năng này là soft deprecated và không làm gì cả.

Trước Python 3.13, hàm này sẽ sao chép mảng biến cục bộ "nhanh" bên trong (được trình thông dịch sử dụng) sang thuộc tính f_locals của f, cho phép hiển thị các thay đổi trong biến cục bộ đối với các đối tượng khung.

Thay đổi trong phiên bản 3.13: Chức năng này bây giờ không làm gì cả.

int PyFrame_FastToLocalsWithError(PyFrameObject *f)

Chức năng này là soft deprecated và không làm gì cả.

Trước Python 3.13, hàm này tương tự như PyFrame_FastToLocals(), nhưng sẽ trả về 0 nếu thành công và -1 với một ngoại lệ được đặt thành thất bại.

Thay đổi trong phiên bản 3.13: Chức năng này bây giờ không làm gì cả.

Xem thêm

PEP 667

Khung nội bộ

Trừ khi sử dụng PEP 523, bạn sẽ không cần điều này.

struct _PyInterpreterFrame

Biểu diễn khung bên trong của trình thông dịch.

Added in version 3.11.

PyObject *PyUnstable_InterpreterFrame_GetCode(struct _PyInterpreterFrame *frame);
Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.

Trả về strong reference cho đối tượng mã cho khung.

Added in version 3.12.

int PyUnstable_InterpreterFrame_GetLasti(struct _PyInterpreterFrame *frame);
Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.

Trả lại byte offset vào lệnh được thực hiện cuối cùng.

Added in version 3.12.

int PyUnstable_InterpreterFrame_GetLine(struct _PyInterpreterFrame *frame);
Đây là API không ổn định. Nó có thể thay đổi mà không có cảnh báo trong các bản phát hành nhỏ.

Trả về số dòng hiện đang thực thi hoặc -1 nếu không có số dòng.

Added in version 3.12.