Объединить коды на С++ и Python
Как объединить эти коды?
1) var st : string; i : integer; simvol : array of integer; k, max : integer; begin.
C#: WP8: как объединить одинаковые коды?
Здравствуйте. у меня есть 4 одинаковых функций, для четырех разных Image("Tap"-event). как их.
люди разбирающиеся в Python подскажите как написать коды для задачи
Жиу любит есть пироги,но ему не стоит потреблять их слишком много.Он не может считать количество.
Сервисные коды S5230 все коды работают сам проверял
все коды работают сам проверял *#197328640# — Debug Screen Version Information RF Test Base.
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Вы хотите передать массив c++ в код на python?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3

Сообщение было отмечено pcmax как решение
Решение
Вы пытались встроить в программу на c++ интерпретатор python?
Или же написать расширение-модуль на с++, которое могли бы подключать и использовать любые программы, написанные на python?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
я даже не знаю с чего начать. пока это все для меня ничего не говорит. что мне нужно дописать, чтобы сработала программа выше
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Что же тогда Вы читали по Вашему вопросу?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Это руководство читали?
https://docs.python.org/3.7/c-. ing-python
Или какое?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
Добавлено через 31 секунду
только не на прару страниц с выводом от отладчика
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Недолюбливаете отладчики?
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
Вы объясните толком, что хотите сделать, можно в с++ использовать использовать функции из pythob или в python использовать библиотеку на с++
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
Сообщение от ТабуретY 
Вы объясните толком, что хотите сделать, можно в с++ использовать использовать функции из pythob или в python использовать библиотеку на с++
хочу передать массив написанный на C++ в код на Python и прочитать его из него?
1291 / 908 / 479
Регистрация: 05.12.2013
Сообщений: 3,073
Сообщение от pcmax 
хочу передать массив написанный на C++ в код на Python и прочитать его из него?
То есть, основной код на с++, а массив передается в python, а затем после обработки, снова возвращается в с++?
Добавлено через 11 минут
Вот тут разные примеры https://stackoverflow.com/ques. with-numpy
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
Сообщение от ТабуретY 
а затем после обработки, снова возвращается в с++?
нет , все остальные действия и вывод массива должны быть из Python
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
А программа на c++, передав данные пайтоновской программе может завершать работу?
Или у неё ещё есть, что поделать?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
нет. C++ передаст массив, Python обработает и после будет вставка кода на C++ в Python . и возможно что в коде на C++ будут Ассемблерные вставки.
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Сообщение от pcmax 
и после будет вставка кода на C++ в Python
Т.е. код Python ещё вызовет какие-то сипласпласные функции?
399 / 73 / 7
Регистрация: 29.01.2018
Сообщений: 1,246
Сообщение от politoto 
код Python ещё вызовет какие-то сипласпласные функции?
помочь можете примером?
1832 / 928 / 167
Регистрация: 23.07.2018
Сообщений: 3,127
Записей в блоге: 3
Что тогда понимается под вставкой кода на C++ в Python?
Можете привести пример (необязательно рабочий), как это должно бы работать?
3802 / 2354 / 413
Регистрация: 09.09.2017
Сообщений: 10,208
pcmax, от вас как раз пытаются вытянуть какой же пример надо.
Вы говорите «С++ передает массив, Питон обрабатывает». Под это подходит минимум три варианта:
1. Программа на С++ запускается, формирует массив, после чего вызывает скрипт на Python и передает массив ему на обработку. Иначе говоря, весь код на Python работает под контролем кода на С++.
2. Программа на Python вызывает функцию на С++ (из модуля, библиотеки и т.п.), получает от нее массив и работает дальше. То есть тут наоборот, код на С++ работает внутри питоньего.
3. Две независимые программы, одна на С++, вторая на Python. Первая формирует массив и каким-либо способом (общая память, каналы, сигналы, азбука Морзе) передает во вторую. Тут обе программы работают независимо.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Дан массив S(50).Вывести те символы (и их коды), коды которых кратны 5 и определить их количество.
Дан массив S(50).Вывести те символы (и их коды), коды которых кратны 5 и определить их количество.
Ввести коды ASCII N символов. Выбрать из них и вывести только коды цифр
Нужна помощь с заданием: Ввести коды ASCII N символов. Выбрать из них и вывести только коды цифр. .
Даны два двоичных числа 10010000 и 00001001. Числа 16-е ASCII–коды и перевести их в 2-е коды
Добрый день, помогите с задачкой: Даны два двоичных числа 10010000 и 00001001. Числа 16-е.
Поиск простых чисел
Нам нужно вычислить простое число k. Ниже представлен один из способов выполнить это в Python:
def isPrime(n):
for num in range(2, n//2):
if n%num == 0:
return False
return Truedef kth_prime(k):
candidate = 2
while k:
if isPrime(candidate):
k -= 1
candidate += 1
return candidate - 1# Driver code
print(kth_prime(10000)) # The 10000th prime number is 104723"""
44.34user 0.00system 0:44.57elapsed 99%CPU (0avgtext+0avgdata 8572maxresident)k
0inputs+0outputs (0major+1587minor)pagefaults 0swaps
"""
Этому коду требуется около 42 секунд для вычисления 10000-го простого числа. Посмотрим, насколько быстро C сможет выполнить эту задачу с тем же алгоритмом:
#include
#include "primeheader.h"int isPrime(int n) for (int i=2; ireturn 0;
>
return 1;
>int kthPrime(int k) int candidate = 2;
while (k) if (isPrime(candidate))
k--;
candidate++;
>
return candidate-1;
>// Код драйвера
int main() printf("%d\n", kthPrime(10000));
return 0;
>
extern int kthPrime(int n);
Выполнение заняло всего 1,01 секунды!
Таким образом, если бы Python использовал этот модуль для вычисления простого числа k, мы бы сэкономили много времени. К счастью, это вполне осуществимо. Python предоставляет множество API для расширения функциональных возможностей.
Для начала создадим простую библиотеку Python с C для вычисления простого числа k. Выполним следующие шаги:
- Написание функции на C (этот шаг уже выполнен).
- Интеграция функции на C для работы с Python.
- Сборка.
Интеграция
Создаем функциональность для реализации CPython — структуры под названием PyObject. На этом этапе нам необходимо преобразовать типы данных C для использования в Python. В данном случае мы конвертируем все элементы в PyObjects.
#include "python3.6m/Python.h" // Python предоставляет API через файл заголовка Python.h
#include "primeheader.h"// Статическая функция, которая принимает аргументы PyObject и возвращает результат PyObject
static PyObject* py_kthPrime(PyObject* self, PyObject* args) int n;
if (!PyArg_ParseTuple(args, "i", &n)) // Проверка и анализ аргументов, полученных функцией, на возможность использования в C
return NULL;
return Py_BuildValue("i", kthPrime(n)); // Получаем результат из C, упаковываем его вместе с PyObject и возвращаем
>// Определение коллекции методов, вызываемых из модуля
static PyMethodDef PyFastPrimeMethods[] =
>;// Определение модуля
static struct PyModuleDef fastprimemodule = PyModuleDef_HEAD_INIT,
"fastprime",
"This module calculates the kth prime number",
-1,
PyFastPrimeMethods
>;// Этот метод вызывается при импорте кода в Python. Он создает экземпляр модуля и возвращает ссылку на него
PyMODINIT_FUNC PyInit_fastprime(void)
<
return PyModule_Create(&fastprimemodule);
>
Приведенный выше код C может показаться немного сложным тем, кто не знаком с такими сильно типизированными языками, как C++ или Java, но на самом деле он довольно прост.
Как было сказано ранее, все элементы представлены в PyObject. Статическая функция, которая возвращает указатель на PyObject, вызывается CPython при импорте библиотеки и вызове функции kthprime. Эта функция принимает два аргумента: self и args. Первая ссылается на PyObject, который вызвал функцию, или на сам экземпляр модуля.
Python также предоставляет множество методов C для анализа аргументов. PyArg_ParseTuple является одним из них.
Поскольку аргумент k передан как позиционный аргумент, Python передает его в качестве кортежа с одним элементом. “i” сообщает PyArg_ParseTuple о том, что необходимо найти целое число.
Если на каком-либо этапе статического метода вы возвращаете указатель NULL, интерпретатор Python предполагает, что что-то пошло не так, и выдает исключение. Если функция ничего не возвращает, передайте объект Py_None.
Сборка
Настало время собрать все части воедино.
Для начала компилируем код c_prime.c в перемещаемый формат. С помощью GCC можно скомпилировать код C в объектный файл, который будет содержать код в файле c_prime.c в формате машинного кода.
Затем компилируем код fastprime.c в объектный код, как было сказано ранее. Теперь соединяем все объектные файлы вместе со стандартной библиотекой для создания финальной версии кода. К счастью, Python предоставляет библиотеку disutils, которая значительно упрощает этот процесс.
from distutils.core import setup, Extension
setup(name='fastprime',
ext_modules=[
Extension('fastprime',
['fastprime.c'],
extra_objects=["c_prime.o"] # Relocatable compiled code of the c_prime to prevent recompiling each time
)
]
)# python setup.py build
Теперь у нас есть модуль Python с расширением .so (общий объект, аналогичный файлам .dll в Windows). Этот общий объект можно импортировать в Python и использовать для вычисления простого числа k.
import fastprime
print(fastprime.kthPrime(10000))
Этот фрагмент кода также выполняется за 1,01 секунды!
Таким образом, нам удалось ускорить код примерно в 40 раз. Возникает вопрос: почему этот способ так редко используется? На это есть несколько причин.
Во-первых, этот процесс занимает много времени. Если производительность важна для вашей системы, то, вероятно, вам изначально не следует использовать Python. Главная особенность Python заключается в том, что большая часть времени уходит на чтение, а не написание кода. Улучшенная читабельность кода помогает ему дольше сохранять свою актуальность.
Во-вторых, за ускорение приходится расплачиваться. Первоначальный медленный код Python был независим от машины. Как известно, Python компилируется в байт-код, а затем интерпретируется на виртуальной машине Python. Таким образом, можно сразу приступать к распространению кода, а всю оставшуюся часть работы предоставить Python (при использовании совместимой версии Python для запуска кода). А вот генерируемые объекты файлы C и C++ зависят от целевой машины. Таким образом, при внедрении объектных файлов на C код Python становится машинно-зависимым.
- Магические методы в Python
- Максимальная производительность Pandas Python
- Автоматизация работы с Python
Интеграция Python и C++
Недавно при прототипировании одной из частей разрабатываемого нами продукта возникла одна интересная задача: нужно было проверить склейку Python и C++. Связано это было с тем, что основной код был написан на плюсах, и необходимо было подключить внешнюю библиотеку Websockets, написанную на Python (на тот момент не было соответствующей библиотеки на C++). Схема взаимодействия при такой задаче достаточно простая. Из C++ вызывается функция подключения к серверу (на python), в качестве параметра передается его адрес. Соответственно, при получении сообщния Python передавает его обратно в метод C++.
При написании кода использовалась питоновская библиотека Websocket от Autobahn (http://www.tavendo.de/autobahn/clientlibraries.html), которую было необходимо вызывать из C++. Для этих целей в Python предусмотрен Python C-API (http://docs.python.org/extending/index.html), однако многие простые действия, например, вызов функций делается несколькими действиями. После небольшого гугления был найден ряд библиотек, позволяющих упростить подобные действия: Boost.Python (http://www.boost.org/doc/libs/1_39_0/libs/python/doc/index.html), SWIG(http://www.swig.org/), Py++, Pybindgen, Pyrex… В результате был выбран Boost.Python как наиболее популярное решение.
Для начала напишем простенький эхо клиент на Python, который будет раз в секунду посылать сам себе сообщение “Hello world”, принимать его и отдавать в C++. cppMethods будет объявлен в C++ коде, cppMethods.printMessage(msg) — как раз место склейки со стороны Python, непосредственно вызов функции C++, которая будет печатать полученное сообщение.
Вот код Python — echo-client.py:
from twisted.internet import reactor from autobahn.websocket import WebSocketClientFactory, WebSocketClientProtocol, connectWS import cppMethods class EchoClientProtocol(WebSocketClientProtocol): def sendHello(self): self.sendMessage("Hello, world!") def onOpen(self): self.sendHello() def onMessage(self, msg, binary): cppMethods.printMessage(msg) reactor.callLater(1, self.sendHello) def Connect(addressStr): factory = WebSocketClientFactory(addressStr) factory.protocol = EchoClientProtocol connectWS(factory) reactor.run()
Теперь напишем на C++ код, в котором опишем нашу функцию, вызываемую из питона. Для использования Python C-API нужно проинклудить Python.h. Обратите внимание, что на этом этапе мы еще не используем Boost.Python, лишь собственно родной Python C-API.
#include #include #include static PyObject * printString(PyObject * self, PyObject* args) < const char * toPrint; if(!PyArg_ParseTuple(args, "s", &toPrint)) < return NULL; >std::cout static PyMethodDef EmbMethods[] = < , >;
В последнем объявлении мы описали, что при вызове функции printMessage из Python будет вызван C++ метод printString.
Ну и наконец свяжем все это вместе. Для проверки работы websockets, помимо эхо-клиента, была использована ссылка на html5labs.
WebSocketConnect.cpp:
#include #include #include #include #include "PrintEmb.cpp" void WebSocketConnect() < using namespace boost::python; Py_Initialize(); Py_InitModule("cppMethods", EmbMethods); PyObject * ws = PyImport_ImportModule("echo_client"); std::string address = "ws://html5labs-interop.cloudapp.net:4502/chat"; call_method(ws, "Connect", address); Py_Finalize(); >
В этом месте мы все-таки воспользовались возможностями Boost, а именно функцией call_method, иначе бы нам понадобилось написать существенно больше кода.
Ну вот как-то так. Здесь мы поинициализировали EmbMethods для питона, назвав их cppMethods, а затем вызвали из Python метод Connect и передали в него строку “address”. В результате наше приложение раз в секунду печатает строку «Hello World» (которую посылает сам себе питон), а также любое сообщение, приходящее с сервера вебсокетов.
Вот таким образом можно связать Python и C++. Буду благодарен за комментарии по теме.
Upd. Поправил код в соответствии с замечаниями из комментариев.
Форум русскоязычного сообщества Ubuntu
Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!
- Форум русскоязычного сообщества Ubuntu »
- Ubuntu Russian LoCo »
- Разработка (Модератор: Azure) »
- C или python
Страницы: [1] 2 3 . 6 Все Вниз
Автор Тема: C или python (Прочитано 12936 раз)
0 Пользователей и 1 Гость просматривают эту тему.
Страницы: [1] 2 3 . 6 Все Вверх
- Форум русскоязычного сообщества Ubuntu »
- Ubuntu Russian LoCo »
- Разработка (Модератор: Azure) »
- C или python
Страница сгенерирована за 0.044 секунд. Запросов: 25.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.