Đối tượng chức năng¶
Có một số hàm dành riêng cho hàm Python.
-
type PyFunctionObject¶
Cấu trúc C được sử dụng cho các hàm.
-
PyTypeObject PyFunction_Type¶
Đây là một phiên bản của
PyTypeObjectvà đại diện cho loại hàm Python. Nó được các lập trình viên Python tiếp xúc với têntypes.FunctionType.
-
int PyFunction_Check(PyObject *o)¶
Trả về true nếu o là một đối tượng hàm (có loại
PyFunction_Type). Tham số không được làNULL. Chức năng này luôn thành công.
-
PyObject *PyFunction_New(PyObject *code, PyObject *globals)¶
- Giá trị trả về: Tham chiếu mới.
Trả về một đối tượng hàm mới được liên kết với đối tượng mã code. globals phải là một từ điển có các biến toàn cục mà hàm có thể truy cập được.
Chuỗi tài liệu và tên của hàm được lấy từ đối tượng mã.
__module__được lấy từ globals. Các giá trị mặc định, chú thích và đóng đối số được đặt thànhNULL.__qualname__được đặt thành cùng giá trị với trườngco_qualnamecủa đối tượng mã.
-
PyObject *PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)¶
- Giá trị trả về: Tham chiếu mới.
Giống như
PyFunction_New()nhưng cũng cho phép thiết lập thuộc tính__qualname__của đối tượng hàm. qualname phải là đối tượng unicode hoặcNULL; nếuNULL, thuộc tính__qualname__được đặt thành cùng giá trị với trườngco_qualnamecủa đối tượng mã.Added in version 3.3.
-
PyObject *PyFunction_GetCode(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về đối tượng mã được liên kết với đối tượng hàm op.
-
PyObject *PyFunction_GetGlobals(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về từ điển toàn cục được liên kết với đối tượng hàm op.
-
PyObject *PyFunction_GetModule(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về borrowed reference cho thuộc tính
__module__của function object op. Nó có thể là NULL.Đây thường là
stringchứa tên mô-đun, nhưng có thể được đặt thành bất kỳ đối tượng nào khác bằng mã Python.
-
PyObject *PyFunction_GetDefaults(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về các giá trị mặc định của đối số của đối tượng hàm op. Đây có thể là một bộ đối số hoặc
NULL.
-
int PyFunction_SetDefaults(PyObject *op, PyObject *defaults)¶
Đặt các giá trị mặc định của đối số cho đối tượng hàm op. defaults phải là
Py_Nonehoặc một bộ dữ liệu.Tăng
SystemErrorvà trả về-1khi thất bại.
-
void PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)¶
Đặt trường vectorcall của đối tượng hàm đã cho func.
Cảnh báo: các tiện ích mở rộng sử dụng API này phải duy trì hoạt động của hàm vectorcall không thay đổi (mặc định)!
Added in version 3.12.
-
PyObject *PyFunction_GetKwDefaults(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về các giá trị mặc định đối số chỉ từ khóa của đối tượng hàm op. Đây có thể là một từ điển các đối số hoặc
NULL.
-
int PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)¶
Đặt các giá trị mặc định đối số chỉ từ khóa của đối tượng hàm op. defaults phải là từ điển của các đối số chỉ có từ khóa hoặc
Py_None.Hàm này trả về
0nếu thành công và trả về-1với ngoại lệ được đặt nếu thất bại.
-
PyObject *PyFunction_GetClosure(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về bao đóng được liên kết với đối tượng hàm op. Đây có thể là
NULLhoặc một bộ đối tượng ô.
-
int PyFunction_SetClosure(PyObject *op, PyObject *closure)¶
Đặt bao đóng được liên kết với đối tượng hàm op. closure phải là
Py_Nonehoặc một bộ đối tượng ô.Tăng
SystemErrorvà trả về-1khi thất bại.
-
PyObject *PyFunction_GetAnnotations(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Trả về các chú thích của đối tượng hàm op. Đây có thể là một từ điển có thể thay đổi hoặc
NULL.
-
int PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)¶
Đặt chú thích cho đối tượng hàm op. annotations phải là từ điển hoặc
Py_None.Tăng
SystemErrorvà trả về-1khi thất bại.
-
PyObject *PyFunction_GET_CODE(PyObject *op)¶
-
PyObject *PyFunction_GET_GLOBALS(PyObject *op)¶
-
PyObject *PyFunction_GET_MODULE(PyObject *op)¶
-
PyObject *PyFunction_GET_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_KW_DEFAULTS(PyObject *op)¶
-
PyObject *PyFunction_GET_CLOSURE(PyObject *op)¶
-
PyObject *PyFunction_GET_ANNOTATIONS(PyObject *op)¶
- Giá trị trả về: Tham chiếu mượn.
Các chức năng này tương tự như các chức năng tương tự của
PyFunction_Get*nhưng không kiểm tra loại. Truyền bất cứ thứ gì ngoài phiên bảnPyFunction_Typelà hành vi không xác định.
-
int PyFunction_AddWatcher(PyFunction_WatchCallback callback)¶
Đăng ký callback làm người theo dõi chức năng cho trình thông dịch hiện tại. Trả lại ID có thể được chuyển tới
PyFunction_ClearWatcher(). Trong trường hợp có lỗi (ví dụ: không còn ID người theo dõi), hãy trả về-1và đặt ngoại lệ.Added in version 3.12.
-
int PyFunction_ClearWatcher(int watcher_id)¶
Trình theo dõi rõ ràng được xác định bởi watcher_id trước đây được trả về từ
PyFunction_AddWatcher()cho trình thông dịch hiện tại. Trả về0nếu thành công hoặc-1và đặt ngoại lệ nếu có lỗi (ví dụ: nếu watcher_id đã cho chưa bao giờ được đăng ký.)Added in version 3.12.
-
type PyFunction_WatchEvent¶
Liệt kê các sự kiện theo dõi chức năng có thể có:
PyFunction_EVENT_CREATEPyFunction_EVENT_DESTROYPyFunction_EVENT_MODIFY_CODEPyFunction_EVENT_MODIFY_DEFAULTSPyFunction_EVENT_MODIFY_KWDEFAULTS
Added in version 3.12.
-
typedef int (*PyFunction_WatchCallback)(PyFunction_WatchEvent event, PyFunctionObject *func, PyObject *new_value)¶
Loại chức năng gọi lại của người theo dõi chức năng.
Nếu event là
PyFunction_EVENT_CREATEhoặcPyFunction_EVENT_DESTROYthì new_value sẽ làNULL. Nếu không, new_value sẽ giữ borrowed reference ở giá trị mới sắp được lưu trữ trong func cho thuộc tính đang được sửa đổi.Cuộc gọi lại có thể kiểm tra nhưng không được sửa đổi func; làm như vậy có thể có những tác động không thể đoán trước, bao gồm cả đệ quy vô hạn.
Nếu event là
PyFunction_EVENT_CREATEthì lệnh gọi lại sẽ được gọi sau khi func được khởi tạo hoàn toàn. Nếu không, lệnh gọi lại sẽ được gọi trước khi sửa đổi func diễn ra, do đó có thể kiểm tra trạng thái trước đó của func. Thời gian chạy được phép tối ưu hóa việc tạo các đối tượng hàm khi có thể. Trong những trường hợp như vậy sẽ không có sự kiện nào được phát ra. Mặc dù điều này tạo ra khả năng có sự khác biệt có thể quan sát được về hành vi thời gian chạy tùy thuộc vào các quyết định tối ưu hóa, nhưng nó không làm thay đổi ngữ nghĩa của mã Python đang được thực thi.Nếu event là
PyFunction_EVENT_DESTROY, việc tham chiếu hàm sắp bị phá hủy trong hàm gọi lại sẽ phục hồi hàm đó, ngăn không cho hàm đó được giải phóng vào lúc này. Khi đối tượng được phục hồi bị phá hủy sau đó, mọi lệnh gọi lại của người theo dõi đang hoạt động tại thời điểm đó sẽ được gọi lại.Nếu lệnh gọi lại đặt ngoại lệ, nó phải trả về
-1; ngoại lệ này sẽ được in dưới dạng ngoại lệ không thể xử lý được bằngPyErr_WriteUnraisable(). Nếu không nó sẽ trả về0.Có thể đã có một ngoại lệ đang chờ xử lý được đặt khi truy cập lệnh gọi lại. Trong trường hợp này, lệnh gọi lại sẽ trả về
0với cùng một ngoại lệ vẫn được đặt. Điều này có nghĩa là lệnh gọi lại không được gọi bất kỳ API nào khác có thể đặt ngoại lệ trừ khi nó lưu và xóa trạng thái ngoại lệ trước, đồng thời khôi phục nó trước khi quay lại.Added in version 3.12.