Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Panggil Kaedah Python dan Dapatkan Nilai Pulangannya daripada C/C?

Bagaimanakah Saya Boleh Panggil Kaedah Python dan Dapatkan Nilai Pulangannya daripada C/C?

Barbara Streisand
Barbara Streisandasal
2024-12-04 21:43:11244semak imbas

How Can I Call Python Methods and Retrieve Their Return Values from C/C  ?

Memanggil Kaedah Python dan Mendapatkan Nilai Pulangan daripada C/C

Dalam persekitaran C /C, anda mungkin menghadapi senario di mana anda perlu mengakses fungsi yang ditakrifkan dalam modul Python. Artikel ini akan membincangkan cara menggunakan fungsi ini dengan berkesan dan mengekstrak nilai pulangannya.

Pertimbangkan coretan kod Python berikut:

import math

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

Untuk memanggil fungsi ini daripada C , anda boleh menggunakan Python Ciri-ciri C-API. Mulakan dengan memasukkan pengepala Python.h untuk akses API:

#include <Python.h>

Untuk memulakan persekitaran Python, gunakan Py_Initialize():

Py_Initialize();

Seterusnya, anda boleh mengimport modul Python yang diperlukan :

PyRun_SimpleString("import mytest;");

Untuk melaksanakan fungsi tersuai, gunakan Fungsi PyObject_GetAttrString() untuk mendapatkan rujukan kepadanya, buat argumen menggunakan fungsi PyTuple_Pack() dan gunakan fungsi tersebut menggunakan PyObject_CallObject():

PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
PyObject* myResult = PyObject_CallObject(myFunction, args);

Akhir sekali, tukar nilai pulangan Python kepada C double menggunakan yang PyFloat_AsDouble() fungsi:

double result = PyFloat_AsDouble(myResult);

Pastikan untuk mengendalikan sebarang kemungkinan ralat sepanjang proses dengan memasukkan mekanisme pengendalian pengecualian. Pendekatan ini menyediakan kaedah komprehensif untuk memanggil fungsi Python daripada C/C dan mengakses nilai pulangannya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Panggil Kaedah Python dan Dapatkan Nilai Pulangannya daripada C/C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn