Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengekstrak Nilai Pulangan Fungsi Python Apabila Dipanggil daripada C/C ?

Bagaimana untuk Mengekstrak Nilai Pulangan Fungsi Python Apabila Dipanggil daripada C/C ?

Linda Hamilton
Lepaskan: 2024-12-25 01:23:14
asal
1030 orang telah melayarinya

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

Mengekstrak Nilai Pulangan daripada Fungsi Python yang Dipanggil dalam C/C

Memanggil fungsi Python tersuai daripada C/C membolehkan fungsi lanjutan, tetapi mengekstrak nilai pulangan boleh mencabar. Berikut ialah penyelesaian menggunakan Python C-API.

Modul Python

Buat modul Python (mytest.py):

import math

def myabs(x):
    return math.fabs(x)
Salin selepas log masuk

Kod C/C

Import penterjemah python3 dalam C/C (test.cpp):

#include <Python.h>

int main() {
    Py_Initialize();
    PyRun_SimpleString("import sys; sys.path.append('.')");
Salin selepas log masuk

Mengimport dan Memanggil Fungsi

  1. Import modul Python:
PyObject* myModuleString = PyString_FromString("mytest");
PyObject* myModule = PyImport_Import(myModuleString);
Salin selepas log masuk
  1. Dapatkan rujukan kepada fungsi:
PyObject* myFunction = PyObject_GetAttrString(myModule, "myabs");
Salin selepas log masuk
  1. Bina hujah fungsi:
PyObject* args = PyTuple_Pack(1, PyFloat_FromDouble(2.0));
Salin selepas log masuk
  1. Panggil fungsi:
PyObject* myResult = PyObject_CallObject(myFunction, args);
Salin selepas log masuk

Mengekstrak Nilai Pulangan

Tukarkan hasil kepada dua kali ganda:

double result = PyFloat_AsDouble(myResult);
Salin selepas log masuk

Penggunaan

Dalam kod C/C anda, kini anda boleh menggunakan nilai pulangan yang diekstrak (hasil):

printf("Absolute value: %f\n", result);
Salin selepas log masuk

Nota: Ingat untuk menyemak sebarang ralat semasa operasi ini. Untuk butiran lanjut tentang C-API, rujuk dokumentasi rasmi.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Nilai Pulangan Fungsi Python Apabila Dipanggil daripada C/C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan