LowLevelCallable#
- класс scipy.LowLevelCallable(функция, user_data=None, сигнатура=None)[источник]#
Функция обратного вызова низкого уровня.
Некоторые функции в SciPy принимают в качестве аргументов функции обратного вызова, которые могут быть либо вызываемыми объектами Python, либо скомпилированными функциями низкого уровня. Использование скомпилированных функций обратного вызова может несколько улучшить производительность, избегая обертывания данных в объекты Python.
Такие низкоуровневые функции в SciPy обёрнуты в
LowLevelCallableобъекты, которые могут быть созданы из указателей функций, полученных из ctypes, cffi, Cython или содержащихся в Python PyCapsule объекты.Смотрите также
Функции, принимающие низкоуровневые callable-объекты:
scipy.integrate.quad,scipy.ndimage.generic_filter,scipy.ndimage.generic_filter1d,scipy.ndimage.geometric_transformПримеры использования:
Расширение scipy.ndimage на C, Более быстрая интеграция с использованием низкоуровневых функций обратного вызова
- Параметры:
- функция{PyCapsule, указатель на функцию ctypes, указатель на функцию cffi}
Функция обратного вызова низкого уровня.
- user_data{PyCapsule, указатель void ctypes, указатель void cffi}
Пользовательские данные для передачи в функцию обратного вызова.
- сигнатураstr, optional
Сигнатура функции. Если опущена, определяется из функция, если возможно.
- Атрибуты:
- функция
Предоставлена функция обратного вызова.
- user_data
Пользовательские данные.
- сигнатура
Сигнатура функции.
Методы
from_cython(module, name[, user_data, signature])Создать низкоуровневую функцию обратного вызова из экспортированной функции Cython.
Примечания
Аргумент
functionможет быть одним из:PyCapsule, имя которого содержит сигнатуру C-функции
указатель функции ctypes
указатель функции cffi
Сигнатура низкоуровневого обратного вызова должна соответствовать одной из ожидаемых подпрограммой, которой он передается.
При создании низкоуровневых функций из PyCapsule, имя капсулы должно быть соответствующей сигнатурой в формате:
return_type (arg1_type, arg2_type, ...)
Например:
"void (double)" "double (double, int *, void *)"
Контекст PyCapsule, переданного как
functionиспользуется какuser_data, если явное значение дляuser_dataне был указан.