ホームページ >バックエンド開発 >C++ >C/C から呼び出されたときに Python 関数の戻り値を抽出する方法

C/C から呼び出されたときに Python 関数の戻り値を抽出する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-25 01:23:14996ブラウズ

How to Extract a Python Function's Return Value When Called from C/C  ?

C/C で呼び出された Python 関数からの戻り値の抽出

C/C からカスタム Python 関数を呼び出すと、拡張機能が可能になります。ただし、戻り値を抽出するのは困難な場合があります。ここでは、Python C-API を使用したソリューションを示します。

Python モジュール

Python モジュール (mytest.py) を作成します。

import math

def myabs(x):
    return math.fabs(x)

C/Cコード

C/C で python3 インタープリターをインポートします (test.cpp):

#include <Python.h>

int main() {
    Py_Initialize();
    PyRun_SimpleString("import sys; sys.path.append('.')");

関数のインポートと呼び出し

  1. Python をインポートするモジュール:
PyObject* myModuleString = PyString_FromString("mytest");
PyObject* myModule = PyImport_Import(myModuleString);
  1. 関数への参照を取得します:
PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
  1. 関数の引数を構築します:
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
  1. に電話してくださいfunction:
PyObject* myResult = PyObject_CallObject(myFunction, args);

戻り値の抽出

結果を double に変換します:

double result = PyFloat_AsDouble(myResult);

使用法

C/C コードでは、抽出された戻り値 (結果) を使用できるようになりました:

printf("Absolute value: %f\n", result);

注: これらの操作中にエラーがないか必ず確認してください。 C-API の詳細については、公式ドキュメントを参照してください。

以上がC/C から呼び出されたときに Python 関数の戻り値を抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。