Возвращаете более одного вывода в расширениях C?

Python позволяет возвращать более одного результата, используя запятые в качестве разделяющего значения.

При разработке расширения CPython, написанного на языке C, можно ли получить такой же результат? Как?

Я разрабатываю расширение CPython, которое заменяет существующий код Python, чтобы выполнить некоторые тесты производительности, и я предпочитаю иметь тот же интерфейс, чтобы не изменять существующую кодовую базу.

Я использую Python 3.6.


person Francesco Argese    schedule 04.12.2017    source источник
comment
Если вы разделяете несколько значений, python фактически возвращает одно значение (а именно кортеж), содержащее предоставленные вами значения. Так что вам просто нужно обработать тип данных Tuple.   -  person Basic    schedule 04.12.2017


Ответы (1)


Да, вы можете создать кортеж с PyTuple_New, заполните его и верните. Вызываемый объект сможет распаковать результат как обычно.

Python возвращает несколько значений с помощью контейнеров. Возвращается один распакованный объект. Разделенный запятой означает кортеж; в квадратных скобках, с другой стороны, создается список. См. Как Python возвращает несколько значений из функции, чтобы узнать об этом подробнее.

Если вам нужен пример того, как это можно сделать в C, вы можете взглянуть на реализация str.partition или array.buffer_info (или любой кортеж, возвращающий встроенный метод).

person Dimitris Fasarakis Hilliard    schedule 04.12.2017