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

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

Linda Hamilton
リリース: 2024-12-25 01:23:14
オリジナル
930 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート