Как мне написать модуль на основе C для обработки словарей Python? - PullRequest
3 голосов
/ 27 мая 2019

Мне недавно нужно написать модуль для бота группового чата, который отвечает на каждое сообщение и выяснять, есть ли что-нибудь, что соответствует ключевым словам. Сам робот основан на Python и предоставляет API-интерфейсы Python. В связи с необходимостью ведения бизнеса я могу написать эту процедуру на языке Си, вот так:

import my_c_module

DICTIONARY = {} # nested dictionary containing keywords, replies, modes, group context etc

async def respond_to_mesg():
    ....
    invokes the c function
    ....

функция c должна обработать сообщение и словарь и посмотреть совпадения.

Основная часть, которая меня смущает, это то, что я не знаю, как заставить C работать с этим словарем. Какую структуру данных необходимо использовать здесь?

1 Ответ

2 голосов
/ 27 мая 2019

Сначала вам нужно создать общую библиотеку для файла c.Допустим, имя файла - library.c, который имеет функцию myfunction.

int myFunction(int num) 
{ 
    if (num == 0) 

        // if number is 0, do not perform any operation. 
        return 0; 
    else
        // if number is power of 2, return 1 else return 0 

    num & (num - 1) == 0 ? return 1 : return 0 
}

Вы можете скомпилировать вышеуказанный файл c library.c, используя следующую команду.

cc -fPIC -shared -o dicmodule.so library.c

Вышеуказанная инструкция сгенерирует общую библиотеку с именем dicmodule.so.Теперь давайте посмотрим, как использовать его в Python.В python у нас есть одна библиотека с именем ctypes.Используя эту библиотеку, мы можем использовать функцию C. в python.

import ctypes 
NUM = 16      
# dicmodule loaded to the python file 
# using fun.myFunction(), 
# C function can be accessed 
# but type of argument is the problem. 

fun = ctype.CDLL(dicmodule.so)   
# Now whenever argument  
# will be passed to the function                                                         
# ctypes will check it. 

fun.myFunction.argtypes(ctypes.c_int) 

# now we can call this  
# function using instant (fun) 
# returnValue is the value  
# return by function written in C  
# code 
returnVale = fun.myFunction(NUM)

Надеюсь, это понятно. Вам нужно изменить это в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...