Đối tượng mô-đun¶
-
PyTypeObject PyModule_Type¶
- Một phần của ABI ổn định.
Phiên bản
PyTypeObjectnày đại diện cho loại mô-đun Python. Điều này được hiển thị với các chương trình Python dưới dạngtypes.ModuleType.
-
int PyModule_Check(PyObject *p)¶
Trả về true nếu p là đối tượng mô-đun hoặc kiểu con của đối tượng mô-đun. Chức năng này luôn thành công.
-
int PyModule_CheckExact(PyObject *p)¶
Trả về true nếu p là đối tượng mô-đun chứ không phải là kiểu con của
PyModule_Type. Chức năng này luôn thành công.
-
PyObject *PyModule_NewObject(PyObject *name)¶
- 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.7.
Trả về một đối tượng mô-đun mới với
module.__name__được đặt thành name. Các thuộc tính__name__,__doc__,__package__và__loader__của mô-đun được điền vào (tất cả trừ__name__được đặt thànhNone). Người gọi có trách nhiệm thiết lập thuộc tính__file__.Trả về
NULLvới lỗi ngoại lệ được đặt.Added in version 3.3.
Thay đổi trong phiên bản 3.4:
__package__và__loader__hiện được đặt thànhNone.
-
PyObject *PyModule_New(const char *name)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tương tự như
PyModule_NewObject(), nhưng tên là chuỗi được mã hóa UTF-8 thay vì đối tượng Unicode.
-
PyObject *PyModule_GetDict(PyObject *module)¶
- Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định.
Trả về đối tượng từ điển triển khai không gian tên của module; đối tượng này giống với thuộc tính
__dict__của đối tượng mô-đun. Nếu module không phải là đối tượng mô-đun (hoặc kiểu con của đối tượng mô-đun),SystemErrorđược nâng lên vàNULLđược trả về.Các tiện ích mở rộng nên sử dụng các hàm
PyModule_*vàPyObject_*khác thay vì thao tác trực tiếp với__dict__của mô-đun.Tham chiếu trả về được mượn từ mô-đun; nó có hiệu lực cho đến khi mô-đun bị phá hủy.
-
PyObject *PyModule_GetNameObject(PyObject *module)¶
- 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.7.
Trả về giá trị
__name__của module. Nếu mô-đun không cung cấp hoặc nếu nó không phải là một chuỗi thìSystemErrorsẽ được nâng lên vàNULLsẽ được trả về.Added in version 3.3.
-
const char *PyModule_GetName(PyObject *module)¶
- Một phần của ABI ổn định.
Tương tự như
PyModule_GetNameObject()nhưng trả về tên được mã hóa thành'utf-8'.Bộ đệm được trả về chỉ có hiệu lực cho đến khi mô-đun được đổi tên hoặc hủy. Lưu ý rằng mã Python có thể đổi tên mô-đun bằng cách đặt thuộc tính
__name__của nó.
-
void *PyModule_GetState(PyObject *module)¶
- Một phần của ABI ổn định.
Trả về "trạng thái" của mô-đun, nghĩa là một con trỏ tới khối bộ nhớ được phân bổ tại thời điểm tạo mô-đun hoặc
NULL. XemPyModuleDef.m_size.
-
PyModuleDef *PyModule_GetDef(PyObject *module)¶
- Một phần của ABI ổn định.
Trả về một con trỏ tới cấu trúc
PyModuleDefmà mô-đun được tạo từ đó hoặcNULLnếu mô-đun không được tạo từ một định nghĩa.Nếu có lỗi, hãy trả về
NULLvới một bộ ngoại lệ. Sử dụngPyErr_Occurred()để phân biệt trường hợp này vớiPyModuleDefbị thiếu.
-
PyObject *PyModule_GetFilenameObject(PyObject *module)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Trả về tên của tệp mà module được tải bằng thuộc tính
__file__của module. Nếu điều này không được xác định hoặc nếu nó không phải là một chuỗi, hãy tăngSystemErrorvà trả vềNULL; mặt khác trả về một tham chiếu đến một đối tượng Unicode.Added in version 3.2.
-
const char *PyModule_GetFilename(PyObject *module)¶
- Một phần của ABI ổn định.
Tương tự như
PyModule_GetFilenameObject()nhưng trả về tên tệp được mã hóa thành 'utf-8'.Bộ đệm được trả về chỉ hợp lệ cho đến khi thuộc tính
__file__của mô-đun được gán lại hoặc mô-đun bị hủy.Sắp loại bỏ từ phiên bản 3.2:
PyModule_GetFilename()tăngUnicodeEncodeErrortrên tên tệp không thể mã hóa, thay vào đó hãy sử dụngPyModule_GetFilenameObject().
Định nghĩa mô-đun¶
Các hàm trong phần trước hoạt động trên mọi đối tượng mô-đun, bao gồm cả các mô-đun được nhập từ mã Python.
Các mô-đun được xác định bằng C API thường sử dụng module definition, PyModuleDef -- một "mô tả" không đổi, được phân bổ tĩnh về cách tạo một mô-đun.
Định nghĩa này thường được sử dụng để xác định đối tượng mô-đun “chính” của tiện ích mở rộng (xem Xác định các mô-đun mở rộng để biết chi tiết). Nó cũng quen với create extension modules dynamically.
Không giống như PyModule_New(), định nghĩa này cho phép quản lý module state -- một phần bộ nhớ được phân bổ và xóa cùng với đối tượng mô-đun. Không giống như các thuộc tính Python của mô-đun, mã Python không thể thay thế hoặc xóa dữ liệu được lưu trữ ở trạng thái mô-đun.
-
type PyModuleDef¶
- Một phần của ABI ổn định (bao gồm tất cả các thành viên).
Cấu trúc định nghĩa mô-đun chứa tất cả thông tin cần thiết để tạo một đối tượng mô-đun. Cấu trúc này phải được phân bổ tĩnh (hoặc được đảm bảo hợp lệ trong khi mọi mô-đun được tạo từ nó tồn tại). Thông thường, chỉ có một biến kiểu này cho mỗi mô-đun mở rộng.
-
PyModuleDef_Base m_base¶
Luôn khởi tạo thành viên này thành
PyModuleDef_HEAD_INIT.
-
const char *m_name¶
Tên cho mô-đun mới.
-
const char *m_doc¶
Chuỗi tài liệu cho mô-đun; thường sử dụng biến chuỗi tài liệu được tạo bằng
PyDoc_STRVAR.
-
Py_ssize_t m_size¶
Trạng thái mô-đun có thể được lưu giữ trong vùng bộ nhớ trên mỗi mô-đun có thể được truy xuất bằng
PyModule_GetState(), thay vì ở dạng toàn cục tĩnh. Điều này làm cho các mô-đun trở nên an toàn khi sử dụng trong nhiều trình thông dịch phụ.Vùng bộ nhớ này được phân bổ dựa trên m_size khi tạo mô-đun và được giải phóng khi đối tượng mô-đun được giải phóng, sau khi hàm
m_freeđược gọi, nếu có.Đặt nó thành giá trị không âm có nghĩa là mô-đun có thể được khởi tạo lại và chỉ định lượng bộ nhớ bổ sung mà nó yêu cầu cho trạng thái của nó.
Đặt
m_sizethành-1có nghĩa là mô-đun không hỗ trợ trình thông dịch phụ vì nó có trạng thái chung.m_sizeâm chỉ được phép khi sử dụng legacy single-phase initialization hoặc khi creating modules dynamically.Xem PEP 3121 để biết thêm chi tiết.
-
PyMethodDef *m_methods¶
Một con trỏ tới một bảng các hàm cấp mô-đun, được mô tả bằng các giá trị
PyMethodDef. Có thể làNULLnếu không có chức năng nào.
-
PyModuleDef_Slot *m_slots¶
Một mảng các định nghĩa vị trí để khởi tạo nhiều pha, được kết thúc bằng mục nhập
{0, NULL}. Khi sử dụng khởi tạo một pha cũ, m_slots phải làNULL.
-
traverseproc m_traverse¶
Một hàm truyền tải để gọi trong quá trình truyền tải GC của đối tượng mô-đun hoặc
NULLnếu không cần thiết.Hàm này không được gọi nếu trạng thái mô-đun được yêu cầu nhưng chưa được phân bổ. Đây là trường hợp ngay sau khi mô-đun được tạo và trước khi mô-đun được thực thi (chức năng
Py_mod_exec). Chính xác hơn, hàm này không được gọi nếum_sizelớn hơn 0 và trạng thái mô-đun (được trả về bởiPyModule_GetState()) làNULL.Thay đổi trong phiên bản 3.9: Không còn được gọi trước khi trạng thái mô-đun được phân bổ.
-
inquiry m_clear¶
Một hàm rõ ràng để gọi trong quá trình xóa GC của đối tượng mô-đun hoặc
NULLnếu không cần thiết.Hàm này không được gọi nếu trạng thái mô-đun được yêu cầu nhưng chưa được phân bổ. Đây là trường hợp ngay sau khi mô-đun được tạo và trước khi mô-đun được thực thi (chức năng
Py_mod_exec). Chính xác hơn, hàm này không được gọi nếum_sizelớn hơn 0 và trạng thái mô-đun (được trả về bởiPyModule_GetState()) làNULL.Giống như
PyTypeObject.tp_clear, hàm này không được gọi always trước khi mô-đun bị hủy phân bổ. Ví dụ: khi việc đếm tham chiếu đủ để xác định rằng một đối tượng không còn được sử dụng nữa, trình thu gom rác tuần hoàn không liên quan vàm_freeđược gọi trực tiếp.Thay đổi trong phiên bản 3.9: Không còn được gọi trước khi trạng thái mô-đun được phân bổ.
-
freefunc m_free¶
Một hàm để gọi trong quá trình phân bổ lại đối tượng mô-đun hoặc
NULLnếu không cần thiết.Hàm này không được gọi nếu trạng thái mô-đun được yêu cầu nhưng chưa được phân bổ. Đây là trường hợp ngay sau khi mô-đun được tạo và trước khi mô-đun được thực thi (chức năng
Py_mod_exec). Chính xác hơn, hàm này không được gọi nếum_sizelớn hơn 0 và trạng thái mô-đun (được trả về bởiPyModule_GetState()) làNULL.Thay đổi trong phiên bản 3.9: Không còn được gọi trước khi trạng thái mô-đun được phân bổ.
-
PyModuleDef_Base m_base¶
-
PyTypeObject PyModuleDef_Type¶
- Một phần của ABI ổn định kể từ phiên bản 3.5.
Loại đối tượng
PyModuleDef.
Khe cắm mô-đun¶
-
type PyModuleDef_Slot¶
- Một phần của ABI ổn định (bao gồm tất cả các thành viên) kể từ phiên bản 3.5.
-
int slot¶
ID vị trí, được chọn từ các giá trị có sẵn được giải thích bên dưới.
-
void *value¶
Giá trị của vị trí, ý nghĩa của nó phụ thuộc vào ID vị trí.
Added in version 3.5.
-
int slot¶
Các loại vị trí có sẵn là:
-
Py_mod_create¶
- Một phần của ABI ổn định kể từ phiên bản 3.5.
Chỉ định một hàm được gọi để tạo chính đối tượng mô-đun. Con trỏ value của khe này phải trỏ đến chức năng của chữ ký:
-
PyObject *create_module(PyObject *spec, PyModuleDef *def)¶
Hàm nhận được một phiên bản
ModuleSpec, như được định nghĩa trong PEP 451 và định nghĩa mô-đun. Nó sẽ trả về một đối tượng mô-đun mới hoặc đặt lỗi và trả vềNULL.Chức năng này nên được giữ ở mức tối thiểu. Đặc biệt, nó không nên gọi mã Python tùy ý, vì việc cố gắng nhập lại cùng một mô-đun có thể dẫn đến một vòng lặp vô hạn.
Nhiều khe
Py_mod_createcó thể không được chỉ định trong một định nghĩa mô-đun.Nếu
Py_mod_createkhông được chỉ định, máy nhập sẽ tạo một đối tượng mô-đun bình thường bằngPyModule_New(). Tên được lấy từ spec, không phải định nghĩa, để cho phép các mô-đun mở rộng tự động điều chỉnh vị trí của chúng trong hệ thống phân cấp mô-đun và được nhập dưới các tên khác nhau thông qua các liên kết tượng trưng, tất cả trong khi chia sẻ một định nghĩa mô-đun duy nhất.Không có yêu cầu đối tượng trả về phải là phiên bản của
PyModule_Type. Bất kỳ loại nào cũng có thể được sử dụng, miễn là nó hỗ trợ cài đặt và nhận các thuộc tính liên quan đến nhập. Tuy nhiên, chỉ có thể trả về các phiên bảnPyModule_TypenếuPyModuleDefkhông cóNULLm_traverse,m_clear,m_free; khác khôngm_size; hoặc các khe khác ngoàiPy_mod_create.Added in version 3.5.
-
PyObject *create_module(PyObject *spec, PyModuleDef *def)¶
-
Py_mod_exec¶
- Một phần của ABI ổn định kể từ phiên bản 3.5.
Chỉ định một hàm được gọi tới execute mô-đun. Điều này tương đương với việc thực thi mã của mô-đun Python: thông thường, hàm này thêm các lớp và hằng số vào mô-đun. Chữ ký của hàm là:
Nếu nhiều vị trí
Py_mod_execđược chỉ định, chúng sẽ được xử lý theo thứ tự xuất hiện trong mảng m_slots.Added in version 3.5.
-
Py_mod_multiple_interpreters¶
- Một phần của ABI ổn định kể từ phiên bản 3.12.
Chỉ định một trong các giá trị sau:
-
Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED¶
Mô-đun này không hỗ trợ nhập vào trình thông dịch phụ.
-
Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED¶
Mô-đun này hỗ trợ nhập vào các trình thông dịch phụ, nhưng chỉ khi chúng chia sẻ GIL của trình thông dịch chính. (Xem Cách ly các mô-đun mở rộng.)
-
Py_MOD_PER_INTERPRETER_GIL_SUPPORTED¶
Mô-đun này hỗ trợ nhập vào các trình thông dịch phụ, ngay cả khi chúng có GIL riêng. (Xem Cách ly các mô-đun mở rộng.)
Khe này xác định xem việc nhập mô-đun này vào trình thông dịch phụ có thất bại hay không.
Nhiều khe
Py_mod_multiple_interpreterscó thể không được chỉ định trong một định nghĩa mô-đun.Nếu
Py_mod_multiple_interpreterskhông được chỉ định, máy nhập sẽ mặc định làPy_MOD_MULTIPLE_INTERPRETERS_SUPPORTED.Added in version 3.12.
-
Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED¶
-
Py_mod_gil¶
- Một phần của ABI ổn định kể từ phiên bản 3.13.
Chỉ định một trong các giá trị sau:
-
Py_MOD_GIL_USED¶
Mô-đun này phụ thuộc vào sự hiện diện của khóa trình thông dịch chung (GIL) và có thể truy cập trạng thái chung mà không cần đồng bộ hóa.
-
Py_MOD_GIL_NOT_USED¶
Mô-đun này có thể chạy an toàn mà không cần GIL hoạt động.
Khe này bị bỏ qua bởi các bản dựng Python không được định cấu hình bằng
--disable-gil. Mặt khác, nó sẽ xác định xem việc nhập mô-đun này có khiến GIL được bật tự động hay không. Xem CPython có luồng miễn phí để biết thêm chi tiết.Nhiều khe
Py_mod_gilcó thể không được chỉ định trong một định nghĩa mô-đun.Nếu
Py_mod_gilkhông được chỉ định, máy nhập sẽ mặc định làPy_MOD_GIL_USED.Added in version 3.13.
-
Py_MOD_GIL_USED¶
Tạo mô-đun mở rộng một cách linh hoạt¶
Các chức năng sau có thể được sử dụng để tạo mô-đun bên ngoài initialization function của tiện ích mở rộng. Chúng cũng được sử dụng trong single-phase initialization.
-
PyObject *PyModule_Create(PyModuleDef *def)¶
- Giá trị trả về: Tham chiếu mới.
Tạo một đối tượng mô-đun mới, được định nghĩa trong def. Đây là macro gọi
PyModule_Create2()với module_api_version được đặt thànhPYTHON_API_VERSIONhoặcPYTHON_ABI_VERSIONnếu sử dụng limited API.
-
PyObject *PyModule_Create2(PyModuleDef *def, int module_api_version)¶
- Giá trị trả về: Tham chiếu mới. Một phần của ABI ổn định.
Tạo một đối tượng mô-đun mới, được định nghĩa trong def, giả sử phiên bản API module_api_version. Nếu phiên bản đó không khớp với phiên bản của trình thông dịch đang chạy thì
RuntimeWarningsẽ được phát ra.Trả về
NULLvới lỗi ngoại lệ được đặt.Chức năng này không hỗ trợ khe cắm. Thành viên
m_slotscủa def phải làNULL.Ghi chú
Thay vào đó, hầu hết các ứng dụng của chức năng này nên sử dụng
PyModule_Create(); chỉ sử dụng điều này nếu bạn chắc chắn rằng bạn cần nó.
-
PyObject *PyModule_FromDefAndSpec(PyModuleDef *def, PyObject *spec)¶
- Giá trị trả về: Tham chiếu mới.
Macro này gọi
PyModule_FromDefAndSpec2()với module_api_version được đặt thànhPYTHON_API_VERSIONhoặcPYTHON_ABI_VERSIONnếu sử dụng limited API.Added in version 3.5.
-
PyObject *PyModule_FromDefAndSpec2(PyModuleDef *def, PyObject *spec, int module_api_version)¶
- 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.7.
Tạo một đối tượng mô-đun mới, được định nghĩa trong def và ModuleSpec spec, giả sử phiên bản API module_api_version. Nếu phiên bản đó không khớp với phiên bản của trình thông dịch đang chạy thì
RuntimeWarningsẽ được phát ra.Trả về
NULLvới lỗi ngoại lệ được đặt.Lưu ý rằng điều này không xử lý các khe thực thi (
Py_mod_exec). CảPyModule_FromDefAndSpecvàPyModule_ExecDefđều phải được gọi để khởi tạo đầy đủ mô-đun.Ghi chú
Thay vào đó, hầu hết các ứng dụng của chức năng này nên sử dụng
PyModule_FromDefAndSpec(); chỉ sử dụng điều này nếu bạn chắc chắn rằng bạn cần nó.Added in version 3.5.
-
int PyModule_ExecDef(PyObject *module, PyModuleDef *def)¶
- Một phần của ABI ổn định kể từ phiên bản 3.7.
Xử lý mọi vị trí thực thi (
Py_mod_exec) được cung cấp trong def.Added in version 3.5.
-
PYTHON_API_VERSION¶
Phiên bản C API. Được xác định để tương thích ngược.
Hiện tại, hằng số này không được cập nhật trong các phiên bản Python mới và không hữu ích cho việc lập phiên bản. Điều này có thể thay đổi trong tương lai.
-
PYTHON_ABI_VERSION¶
Được xác định là
3để tương thích ngược.Hiện tại, hằng số này không được cập nhật trong các phiên bản Python mới và không hữu ích cho việc lập phiên bản. Điều này có thể thay đổi trong tương lai.
Chức năng hỗ trợ¶
Các chức năng sau đây được cung cấp để giúp khởi tạo trạng thái mô-đun. Chúng dành cho các khe thực thi của mô-đun (Py_mod_exec), chức năng khởi tạo cho single-phase initialization kế thừa hoặc mã tạo mô-đun động.
-
int PyModule_AddObjectRef(PyObject *module, const char *name, PyObject *value)¶
- Một phần của ABI ổn định kể từ phiên bản 3.10.
Thêm một đối tượng vào module dưới dạng name. Đây là một chức năng tiện lợi có thể được sử dụng từ chức năng khởi tạo của mô-đun.
Nếu thành công, hãy trả về
0. Nếu có lỗi, hãy đưa ra một ngoại lệ và trả về-1.Ví dụ sử dụng:
int tĩnh add_spam(mô-đun PyObject *, giá trị int) { PyObject *obj = PyLong_FromLong(giá trị); nếu (obj == NULL) { trả về -1; } int res = PyModule_AddObjectRef(module, "spam", obj); Py_DECREF(obj); trả lại độ phân giải; }
Để thuận tiện, hàm này chấp nhận
NULLvalue với một bộ ngoại lệ. Trong trường hợp này, hãy trả về-1và chỉ giữ nguyên ngoại lệ đã nêu.Ví dụ này cũng có thể được viết mà không cần kiểm tra rõ ràng xem obj có phải là
NULL:int tĩnh add_spam(mô-đun PyObject *, giá trị int) { PyObject *obj = PyLong_FromLong(giá trị); int res = PyModule_AddObjectRef(module, "spam", obj); Py_XDECREF(obj); trả lại độ phân giải; }
Lưu ý rằng
Py_XDECREF()nên được sử dụng thay vìPy_DECREF()trong trường hợp này, vì obj có thể làNULL.Số lượng chuỗi name khác nhau được truyền cho hàm này phải được giữ ở mức nhỏ, thường chỉ bằng cách sử dụng các chuỗi được phân bổ tĩnh như name. Đối với những tên không được biết đến tại thời điểm biên dịch, hãy gọi trực tiếp
PyUnicode_FromString()vàPyObject_SetAttr(). Để biết thêm chi tiết, hãy xemPyUnicode_InternFromString(), có thể được sử dụng nội bộ để tạo đối tượng chính.Added in version 3.10.
-
int PyModule_Add(PyObject *module, const char *name, PyObject *value)¶
- Một phần của ABI ổn định kể từ phiên bản 3.13.
Tương tự như
PyModule_AddObjectRef(), nhưng "đánh cắp" một tham chiếu đến value. Nó có thể được gọi với kết quả của hàm trả về một tham chiếu mới mà không cần kiểm tra kết quả của nó hoặc thậm chí lưu nó vào một biến.Ví dụ sử dụng:
if (PyModule_Add(module, "spam", PyBytes_FromString(value)) < 0) { lỗi đi đến; }
Added in version 3.13.
-
int PyModule_AddObject(PyObject *module, const char *name, PyObject *value)¶
- Một phần của ABI ổn định.
Tương tự như
PyModule_AddObjectRef(), nhưng đánh cắp một tham chiếu đến value khi thành công (nếu nó trả về0).Nên sử dụng các hàm
PyModule_Add()hoặcPyModule_AddObjectRef()mới vì rất dễ gây rò rỉ tham chiếu bằng cách sử dụng sai chức năngPyModule_AddObject().Ghi chú
Không giống như các hàm lấy cắp tham chiếu khác,
PyModule_AddObject()chỉ phát hành tham chiếu tới value on success.Điều này có nghĩa là giá trị trả về của nó phải được kiểm tra và mã gọi phải
Py_XDECREF()value do lỗi thủ công.Ví dụ sử dụng:
PyObject *obj = PyBytes_FromString(value); if (PyModule_AddObject(mô-đun, "thư rác", obj) < 0) { // Nếu 'obj' không phải là NULL và PyModule_AddObject() không thành công, // Tham chiếu mạnh 'obj' phải được xóa bằng Py_XDECREF(). // Nếu 'obj' là NULL, Py_XDECREF() sẽ không làm gì cả. Py_XDECREF(obj); lỗi đi đến; } // PyModule_AddObject() đã đánh cắp một tham chiếu tới obj: // Py_XDECREF(obj) không cần thiết ở đây.
Sắp loại bỏ từ phiên bản 3.13:
PyModule_AddObject()là soft deprecated.
-
int PyModule_AddIntConstant(PyObject *module, const char *name, long value)¶
- Một phần của ABI ổn định.
Thêm một hằng số nguyên vào module dưới dạng name. Chức năng tiện lợi này có thể được sử dụng từ chức năng khởi tạo của mô-đun. Trả về
-1với ngoại lệ được đặt là lỗi,0thành công.Đây là một chức năng tiện lợi gọi
PyLong_FromLong()vàPyModule_AddObjectRef(); xem tài liệu của họ để biết chi tiết.
-
int PyModule_AddStringConstant(PyObject *module, const char *name, const char *value)¶
- Một phần của ABI ổn định.
Thêm hằng số chuỗi vào module dưới dạng name. Chức năng tiện lợi này có thể được sử dụng từ chức năng khởi tạo của mô-đun. Chuỗi value phải được kết thúc bằng
NULL. Trả về-1với ngoại lệ được đặt là lỗi,0thành công.Đây là một chức năng tiện lợi gọi
PyUnicode_InternFromString()vàPyModule_AddObjectRef(); xem tài liệu của họ để biết chi tiết.
-
PyModule_AddIntMacro(module, macro)¶
Thêm hằng số int vào module. Tên và giá trị được lấy từ macro. Ví dụ:
PyModule_AddIntMacro(module, AF_INET)thêm hằng số int AF_INET với giá trị AF_INET vào module. Trả về-1với ngoại lệ được đặt là lỗi,0thành công.
-
PyModule_AddStringMacro(module, macro)¶
Thêm hằng số chuỗi vào module.
-
int PyModule_AddType(PyObject *module, PyTypeObject *type)¶
- Một phần của ABI ổn định kể từ phiên bản 3.10.
Thêm một đối tượng loại vào module. Đối tượng loại được hoàn thiện bằng cách gọi nội bộ
PyType_Ready(). Tên của đối tượng loại được lấy từ thành phần cuối cùng củatp_namesau dấu chấm. Trả về-1với ngoại lệ được đặt là lỗi,0thành công.Added in version 3.9.
-
int PyModule_AddFunctions(PyObject *module, PyMethodDef *functions)¶
- Một phần của ABI ổn định kể từ phiên bản 3.7.
Thêm các hàm từ mảng functions đã kết thúc
NULLvào module. Tham khảo tài liệuPyMethodDefđể biết chi tiết về từng mục nhập (do thiếu không gian tên mô-đun dùng chung, các "hàm" cấp mô-đun được triển khai trong C thường nhận mô-đun làm tham số đầu tiên, khiến chúng giống với các phương thức phiên bản trên các lớp Python).Hàm này được gọi tự động khi tạo mô-đun từ
PyModuleDef(chẳng hạn như khi sử dụng Khởi tạo nhiều pha,PyModule_CreatehoặcPyModule_FromDefAndSpec). Một số tác giả mô-đun có thể thích xác định các hàm trong nhiều mảngPyMethodDef; trong trường hợp đó họ nên gọi trực tiếp hàm này.Mảng functions phải được phân bổ tĩnh (hoặc được đảm bảo tồn tại lâu hơn đối tượng mô-đun).
Added in version 3.5.
-
int PyModule_SetDocString(PyObject *module, const char *docstring)¶
- Một phần của ABI ổn định kể từ phiên bản 3.7.
Đặt chuỗi tài liệu cho module thành docstring. Hàm này được gọi tự động khi tạo mô-đun từ
PyModuleDef(chẳng hạn như khi sử dụng Khởi tạo nhiều pha,PyModule_CreatehoặcPyModule_FromDefAndSpec).Trả về
0khi thành công. Trả về-1với lỗi ngoại lệ được đặt.Added in version 3.5.
-
int PyUnstable_Module_SetGIL(PyObject *module, void *gil)¶
- Đâ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ỏ.
Cho biết rằng module có hoặc không hỗ trợ chạy mà không có khóa trình thông dịch chung (GIL), sử dụng một trong các giá trị từ
Py_mod_gil. Nó phải được gọi trong chức năng khởi tạo của module khi sử dụng Khởi tạo một pha kế thừa. Nếu chức năng này không được gọi trong quá trình khởi tạo mô-đun, máy nhập sẽ giả định rằng mô-đun không hỗ trợ chạy mà không có GIL. Chức năng này chỉ khả dụng trong các bản dựng Python được định cấu hình bằng--disable-gil. Trả về-1với ngoại lệ được đặt là lỗi,0thành công.Added in version 3.13.
Tra cứu mô-đun (khởi tạo một pha)¶
Sơ đồ khởi tạo single-phase initialization kế thừa tạo ra các mô-đun đơn lẻ có thể tra cứu trong ngữ cảnh của trình thông dịch hiện tại. Điều này cho phép truy xuất đối tượng mô-đun sau này chỉ với tham chiếu đến định nghĩa mô-đun.
Các chức năng này sẽ không hoạt động trên các mô-đun được tạo bằng cách khởi tạo nhiều giai đoạn, vì nhiều mô-đun như vậy có thể được tạo từ một định nghĩa duy nhất.
-
PyObject *PyState_FindModule(PyModuleDef *def)¶
- Giá trị trả về: Tham chiếu mượn. Một phần của ABI ổn định.
Trả về đối tượng mô-đun được tạo từ def cho trình thông dịch hiện tại. Phương thức này yêu cầu đối tượng mô-đun đã được gắn trước vào trạng thái trình thông dịch với
PyState_AddModule(). Trong trường hợp không tìm thấy đối tượng mô-đun tương ứng hoặc chưa được gắn vào trạng thái trình thông dịch, nó sẽ trả vềNULL.
-
int PyState_AddModule(PyObject *module, PyModuleDef *def)¶
- Một phần của ABI ổn định kể từ phiên bản 3.3.
Gắn đối tượng mô-đun được truyền vào hàm vào trạng thái trình thông dịch. Điều này cho phép đối tượng mô-đun có thể truy cập được thông qua
PyState_FindModule().Chỉ có hiệu lực trên các mô-đun được tạo bằng cách khởi tạo một pha.
Python tự động gọi
PyState_AddModulesau khi nhập mô-đun sử dụng single-phase initialization, vì vậy việc gọi nó từ mã khởi tạo mô-đun là không cần thiết (nhưng vô hại). Chỉ cần một lệnh gọi rõ ràng nếu mã init của chính mô-đun sau đó gọiPyState_FindModule. Chức năng này chủ yếu nhằm mục đích triển khai các cơ chế nhập thay thế (bằng cách gọi trực tiếp hoặc bằng cách tham khảo cách triển khai của nó để biết chi tiết về các bản cập nhật trạng thái bắt buộc).Nếu một mô-đun được gắn trước đó bằng cùng một def thì mô-đun đó sẽ được thay thế bằng module mới.
Người gọi phải có attached thread state.
Trả về
-1với ngoại lệ được đặt là lỗi,0thành công.Added in version 3.3.
-
int PyState_RemoveModule(PyModuleDef *def)¶
- Một phần của ABI ổn định kể từ phiên bản 3.3.
Xóa đối tượng mô-đun được tạo từ def khỏi trạng thái trình thông dịch. Trả về
-1với ngoại lệ được đặt là lỗi,0thành công.Người gọi phải có attached thread state.
Added in version 3.3.