毕设做一个软件,要求算法效率的,主要的计算部分想用C语言,界面用python,请问这样可以么?
发布网友
发布时间:2022-04-29 18:03
我来回答
共3个回答
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:46
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?
热心网友
时间:2023-10-27 22:47
算法效率和你c语言的实现有关,和界面没多少关系的!
热心网友
时间:2023-10-27 22:47
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plaincopy
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plaincopy
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
热心网友
时间:2023-10-27 22:47
什么要求算法效率?你的程序有规定的时间和空间要求还是你的程序就是用来计算他人程序算法效率?