Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Kaedah Python yang Dipanggil daripada C/C?

Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Kaedah Python yang Dipanggil daripada C/C?

DDD
DDDasal
2024-12-07 06:36:16388semak imbas

How Can I Retrieve the Return Value of a Python Method Called from C/C  ?

Mengekstrak Nilai Pulangan Kaedah Python yang Dipanggil daripada C/C

Artikel menunjukkan cara memanggil kaedah Python daripada C/C dan mengekstrak nilai pulangannya. Walaupun kod yang disediakan dalam soalan boleh mencetak hasil secara berkesan ke stdout, ia tidak menawarkan cara untuk menangkap nilai untuk manipulasi selanjutnya dalam C.

Pendekatan yang disyorkan melibatkan penggunaan kaedah yang disediakan oleh Python C- API, yang membolehkan interaksi langsung dengan objek dan fungsi Python. Berikut ialah contoh cara mengubah suai kod untuk mengekstrak nilai pulangan:

PyObject* myModuleString = PyString_FromString((char*)"mytest");
PyObject* myModule = PyImport_Import(myModuleString);
PyObject* myFunction = PyObject_GetAttrString(myModule, (char*)"myabs");
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
PyObject* myResult = PyObject_CallObject(myFunction, args);
double result = PyFloat_AsDouble(myResult);

Dalam kod ini, kami mula-mula mengimport modul, mendapatkan rujukan kepada fungsi, mencipta tuple dengan hujah untuk fungsi , panggil fungsi, dan akhirnya ekstrak nilai pulangan sebagai dua kali ganda.

Untuk memastikan pengendalian yang betul, adalah penting untuk mengurus ralat dengan sewajarnya, seperti yang dicadangkan oleh Mark Tolonen dalam ulasan. Untuk maklumat lanjut dan kes penggunaan yang rumit, rujuk dokumentasi C-API Python di http://docs.python.org/c-api/.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Nilai Pulangan Kaedah Python yang Dipanggil 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