Falscher Wert, der von einer C-Funktion zurückgegeben wurde, die über Python mithilfe von Ctypes aufgerufen wurde
Beim Aufrufen einer C-Funktion aus Python mithilfe von Ctypes muss die korrekte Angabe von sichergestellt werden Argument- und Rückgabetypen sind von entscheidender Bedeutung. Andernfalls kann es zu undefiniertem Verhalten und der Rückgabe falscher Werte kommen.
In Ihrem Fall haben Sie eine C-Funktion definiert, die eine Zahl potenziert, aber beim Aufruf aus Python falsche Ergebnisse erzielt. Der Schuldige ist offenbar die falsche Schreibweise des argtypes-Attributs. Der korrigierte Code lautet:
from ctypes import * so_file = '/Users/.../test.so' functions = CDLL(so_file) functions.power.argtypes = [c_float, c_int] # Correct spelling functions.power.restype = c_float print(functions.power(5,3))
Durch die Angabe von argtypes und restype weiß Ctypes, wie zwischen Python- und C-Datentypen konvertiert wird, um ordnungsgemäße Berechnungen und Werteverarbeitung sicherzustellen. Diese Korrektur sollte das Problem beheben und die erwartete Ausgabe zurückgeben.
Auswirkungen auf die Array-Verarbeitung
Wie Sie bereits erwähnt haben, möchten Sie schließlich eine C-Funktion aufrufen, die eine Zwei zurückgibt -dimensionales C-Array. Dies erfordert zusätzliche Überlegungen:
Wenn Sie sich sorgfältig mit diesen Aspekten befassen, sollten Sie in der Lage sein, mithilfe von Ctypes erfolgreich C-Funktionen aufzurufen, die zweidimensionale Arrays aus Python zurückgeben.
Das obige ist der detaillierte Inhalt vonWarum sind die Rückgabewerte meiner C-Funktion falsch, wenn sie aus Python mit ctypes aufgerufen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!