Проблемы с использованием кода C в Python | Комплект 1
Предпосылка: Использование кодов C в Python | Набор 1, Набор 2
Проблема №1: при использовании ctypes возникает проблема, заключающаяся в том, что исходный код C может использовать язык, который не соответствует точному отображению на Python.
Let’s take the example of divide()
function as it returns a value through one of its arguments. It is a common C technique but it is often not clear how it is supposed to work in Python.
divide = _mod.divide divide.argtypes = (ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_int)) x = 0 divide( 10 , 3 , x) |
Выход :
Отслеживание (последний вызов последний): Файл "", строка 1, в ctypes.ArgumentError: аргумент 3:: ожидается LP_c_int экземпляр вместо int
Проблема №2:
Даже если это работает, то есть нарушение неизменности целых чисел Python. Для аргументов, включающих указатели, должен быть создан совместимый объект ctypes, который передается, как в приведенном ниже коде.
x = ctypes.c_int() print ( "divide(10, 3, x) : " , divide( 10 , 3 , x)) print ( "x.value : " , x.value) |
Выход :
разделить (10, 3, x): 3 x.value: 1
Проблема №3:
In the code below, an instance of a ctypes.c_int is created and is passed in as the pointer object .c_int object can be mutated unlike a normal Python integer. To either retrieve or change the value, .value attribute can be used.
# int divide(int, int, int *) _divide = _mod.divide _divide.argtypes = (ctypes.c_int, ctypes.c_int, ctypes.POINTER(ctypes.c_int)) _divide.restype = ctypes.c_int def divide(x, y): rem = ctypes.c_int() quot = _divide(x, y, rem) return quot, rem.value |
Issue #4 : The avg()
function is a challenge.
Базовый код C ожидает длину, представляющую массив, и получает указатель. Однако со стороны Python на практике «массив» Python может принимать множество различных форм, он может быть массивом, списком, кортежем или массивом numpy, и, возможно, вы захотите поддержать несколько возможностей.
Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.