C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf

Übergeben Sie eine Reihe von Floats aus Python und geben Sie die Summe und den Durchschnitt in einem Taple zurück.

capi.py


import myModule as capi
import random
x=[random.uniform(0, 100) for x in range(100)]
s=0.0
for a in x:
    s=s+a
print("c ",s,s/len(x))
a=capi.fsum_avr(x)
print("py",a)

Wenn du rennst
>python capi.py
py 5025.24247203747 50.252424720374705
c  (5025.24247203747, 50.252424720374705)

capilib.c


#include <Python.h>
static PyObject* fsum_avr(PyObject* self, PyObject* args)
{
    long n;
    double sum=0.0,avr,a;
    PyObject* c_list, *item;
    if (!PyArg_ParseTuple(args, "O", &c_list)) return NULL;   
    // Check list
    if PyList_Check(c_list) n = PyList_Size(c_list);
    else return NULL;
    for (int i = 0; i < n; i++){
        item = PyList_GetItem(c_list, i);
        a = PyFloat_AsDouble(item); // Increment the reference count
        sum = sum + a;
        Py_DECREF(item); // Decrement the reference count
    }
    avr=sum/n;
    return Py_BuildValue("(dd)",sum,avr);
}
static PyMethodDef myMethods[] = {
    { "fsum_avr",fsum_avr, METH_VARARGS, "sum avr"},
    { NULL }
};
static struct PyModuleDef myModule = {
    PyModuleDef_HEAD_INIT,"myModule","C API Module",-1,myMethods
};
PyMODINIT_FUNC PyInit_myModule(void){
    return PyModule_Create(&myModule);
}

** Aufmerksamkeitspunkt **

  1. PyArg_ParseTuple (args, "O", & c_list) setzt die Adresse des Listenarrays mit "O" auf & c_list. O (object) [PyObject *] Store a Python object (without any conversion) in a C object pointer. The C program thus receives the actual object that was passed. The object's reference count is not increased. The pointer stored is not NULL.
  2. Geben Sie Py_BuildValue ("(dd)", sum, avr) zurück. Gibt die Summe und den Durchschnitt in tapple zurück.

Siehe den Link für ** Argumentinterpretation und Wert **.

setup.py


from distutils.core import setup, Extension
setup(name = 'myModule', version = '1.0.0',  \
   ext_modules = [Extension('myModule', ['capilib.c'])])

** Erstellen einer Bibliothek **

capi>python setup.py install

Recommended Posts

C-Sprache zum Anzeigen und Erinnern Teil 5 Rufen Sie die C-Sprache aus dem Python-Array (Argument) auf
C-Sprache zum Anzeigen und Erinnern Teil 2 Rufen Sie die C-Sprache aus der Python-Zeichenfolge (Argument) auf
C-Sprache zum Sehen und Erinnern Teil 3 Rufen Sie die C-Sprache aus Python auf (Argument) c = a + b
C-Sprache zum Sehen und Erinnern Teil 1 Rufen Sie die C-Sprache aus Python auf (Hallo Welt)
Gehen Sie zur Sprache, um Teil 8 zu sehen und sich daran zu erinnern. Rufen Sie die GO-Sprache von Python aus auf
Gehen Sie in die Sprache, um Teil 7 C in der Sprache GO zu sehen und sich daran zu erinnern
Rufen Sie die c-Sprache von Python aus auf (python.h)
Rufen Sie C-Sprachfunktionen von Python auf, um mehrdimensionale Arrays auszutauschen
[Python] So rufen Sie eine Funktion von c aus Python auf (ctypes edition)
Rufen Sie Matlab von Python zur Optimierung auf
Rufen Sie C von Python mit DragonFFI auf
Python, um von einer anderen Sprache zu wechseln
Rufen Sie C / C ++ von Python auf dem Mac auf
[Python] Drücken Sie Keras von TensorFlow und TensorFlow von c ++, um die Ausführung zu beschleunigen.
Rufen Sie mit ctypes Ihre eigene gemeinsam genutzte Bibliothek in C-Sprache von Python aus auf
[Es ist noch nicht zu spät, Python ab 2020 zu lernen] Teil 3 Python Language Basic (1)
Von Python bis zur Verwendung von MeCab (und CaboCha)
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Socket-Kommunikation in C-Sprache und Python
Generieren Sie mit Python eine C-Sprache aus dem S-Ausdruck
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 1).
So generieren Sie eine Sequenz in Python und C ++
Erstellen Sie ein C-Array aus einer Python> Excel-Tabelle
Schreiben von Protokollen in eine CSV-Datei (Python, C-Sprache)
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 3).
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen von Klassen Teil ➀
Versuchen Sie, das Programm "FORTRAN77 Numerical Computing Programming" auf C und Python zu portieren (Teil 2).
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen von Klassen Teil ➁
Rufen Sie Python-Skripte aus Embedded Python in C ++ / C ++ auf
Liste des zu verschiebenden und zu merkenden Python-Codes
Ich möchte C ++ - Code aus Python-Code erstellen!
Eine einfache Möglichkeit, Java von Python aus aufzurufen
Die Geschichte der Portierung von Code von C nach Go (und zur Sprachspezifikation)
Übergeben Sie ein Array von PHP an PYTHON und führen Sie eine Numpy-Verarbeitung durch, um das Ergebnis zu erhalten
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
Änderungen von Python 2 zu Python 3.0
Einführung in die Python-Sprache
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen einer einfachen Funktion Teil ➀
Rufen Sie Rust von Python an, um schneller zu werden! PyO3-Tutorial: Umschließen einer einfachen Funktion Teil ➁
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
So schneiden Sie ein Block-Multiple-Array aus einem Multiple-Array in Python
So tauschen Sie Elemente in einem Array in Python aus und wie kehren Sie ein Array um.
Lernen Sie die Grundlagen und Tipps der kanonischen Python-Ausdrücke von Grund auf neu
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Objektorientiert in C-Sprache: "○ ✕ game" wurde überarbeitet und nach Python portiert
Verwenden Sie eine Skriptsprache für ein komfortables C ++ - Leben - OpenCV-Port Python zu C ++ -
Wie man Python oder Julia von Ruby aus aufruft (experimentelle Implementierung)
Flirte von PHP nach Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
Portiert von der R-Sprache von "Sazae-sans Janken Data Analysis" nach Python
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
[First Ripple] [I am] Rufe JavaScript (Node.js) von Python auf und verarbeite Ripple
Einführung in die in C Language Part 1 Server Edition erlernte Socket-API
Installieren Sie mecab auf dem gemeinsam genutzten Sakura-Server und rufen Sie es von Python aus auf
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
So erhalten Sie eine Zeichenfolge aus einem Befehlszeilenargument in Python
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
[C-Sprache] So erstellen, vermeiden und erstellen Sie einen Zombie-Prozess