Как использовать Python C-API для комплексного класса (документально here) для:Как построить комплекс из строки с использованием C-API Python?
- преобразовать общую PyObject (который может быть строкой, Long, Float, комплекс) в комплексной PyObject?
- преобразовать комплекс PyObject в String PyObject?
Python имеет сложную функцию(), документально here):
Возвращение комплексное число со значением реального + емк * J или преобразовать строку или число в комплексное число. Если первым параметром является строка , он будет интерпретироваться как комплексное число, и функция должна быть вызвана без второго параметра. Второй параметр может никогда не быть строкой. Каждый аргумент может быть любым числовым типом (включая комплекс ). Если imag опущен, по умолчанию он равен нулю, а функция служит в качестве числовой функции преобразования, такой как int(), long() и float(). Если оба аргумента опущены, возвращается 0j.
Однако неясно, какая функция API (если есть) поддерживает ее.
Ничего из них не было, приведенный выше параграф рассказывает о двух параметрах PyObject *, и ни одна из перечисленных функций API не соответствует этой сигнатуре.
Спасибо за [PyObject_CallFunction] (https://docs.python.org/3/c-api/object.html#c.PyObject_CallFunction), этот способ использования API открывает некоторые интересные возможности! Есть ли способ преобразования произвольного PyObject * в сложный тип? –
@Pi: Вы, вероятно, хотите ['PyObject_CallFunctionObjArgs()'] (https://docs.python.org/3/c-api/object.html#c.PyObject_CallFunctionObjArgs) для этого. –
Я заметил PyComplex_Type - это PyTypeObject, тогда как подписи задают PyObject *. Мне не нужен reinterpret_cast (& PyTypeObject) или что-то подобное противное? –