我现在正在试验python函数.我找到了一种方法将python函数导入c/c ++代码,但不是相反.
我有一个c ++程序,它有一定的功能.我想将已编译的c ++程序"导入"我的python脚本并调用c ++函数.
为简单起见,假设c ++函数非常简单:
int square(x)
{
return x*x;
}
Run Code Online (Sandbox Code Playgroud)
并且编译的程序名为Cprog.
我想我的python脚本是这样的:
import Cprog
print Cprog.square(4)
Run Code Online (Sandbox Code Playgroud)
这可能吗?我在互联网上搜索无济于事,我希望你们中的一位大师可能会有一个聪明的方式来解决这个问题......
我正在寻找一种简单的方法将C++类实例暴露给python嵌入式解释器.
我想将我的C++世界Foo实例暴露给python世界(并被视为Foo类).
这是可能的,如果是这样,怎么样?
我认为这几乎就像在第一个答案中: boost :: python :: ptr或PyInstance_New用法
我想这意味着我应该boost.Python用来包装我的图书馆?
我唯一的目标是在嵌入式python解释器中操作我的Coo Coo实例(不确定它是否可以使用前面的方法完成).
希望我很清楚,谢谢你的帮助.
更新
谢谢你的回答.事实上,我已经将我的Foo类暴露给python(使用swig).
是)我有的:
我的Foo课程:
class Foo{...};
Run Code Online (Sandbox Code Playgroud)
我的包装库(包括Foo类)暴露给python:所以我可以启动python解释器并执行以下操作:
import my_module
foo=my_modulde.Foo()
Run Code Online (Sandbox Code Playgroud)
我想要的是:
有一个C++主程序嵌入python解释器并操纵C++世界变量.
int main(int argc, char **argv)
{
Foo foo; // instanciates foo
Py_Initialize();
Py_Main(argc, argv); // starts the python interpreter
// and manipulates THE foo instance in it
Py_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在更清楚了吗?:)
偏最小二乘(PLS)算法在scikit-learn库中实现,如下所述:http: //scikit-learn.org/0.12/auto_examples/plot_pls.html 在y是二进制向量的情况下,变体正在使用该算法,偏最小二乘判别分析(PLS-DA)算法.sklearn.pls中的PLSRegression模块是否也实现了这种二进制情况?如果没有,我在哪里可以找到它的python实现?在我的二进制文件中,我正在尝试使用PLSRegression:
pls = PLSRegression(n_components=10)
pls.fit(x, y)
x_r, y_r = pls.transform(x, y, copy=True)
Run Code Online (Sandbox Code Playgroud)
在transform函数中,代码在此行中获得异常:
y_scores = np.dot(Yc, self.y_rotations_)
Run Code Online (Sandbox Code Playgroud)
错误消息是"ValueError:矩阵未对齐".Yc是规范化的y向量,self.y_rotations_ = [1.].在拟合函数中,如果原始y是单变量向量(y.shape 1 = 1),则self.y_rotations_ = np.ones(1).
我正在编写一个python/C++应用程序,它将从python中调用C++扩展中的方法.
说我的C++有一个类:
class A
{
private:
int _i;
public:
A(int i){_i=i;}
int get_i(){return _i;}
}
A a=A();
Run Code Online (Sandbox Code Playgroud)
无论如何,python可以a在C++中获取对象并调用其成员函数,即:
import cpp_extension
a=cpp_extension.A()
print a.get_i()
Run Code Online (Sandbox Code Playgroud)
任何对一般阅读的提及也表示赞赏.
在任何地方,我都可以轻松找到有关使用Python C 扩展编写方法并在 Python 中使用它的示例。就像这个:Python 3 扩展示例
$ python3
>>> import hello
>>> hello.hello_world()
Hello, world!
>>> hello.hello('world')
Hello, world!
Run Code Online (Sandbox Code Playgroud)
如何编写一个 hello word 全功能 Python 类(而不仅仅是一个模块方法)?
我认为这How towrapp a C++ object using pure Python Extension API (python3)? 问题有一个例子,但它似乎并不小,因为他在上面使用(或包装?)C++ 类。
例如:
$ python3
>>> import hello
>>> hello.hello_world()
Hello, world!
>>> hello.hello('world')
Hello, world!
Run Code Online (Sandbox Code Playgroud)
这个带有 C 扩展的 Python 类示例的等价物是什么?
我会这样使用它:
from .mycextensionsmodule import ClassName
classname = ClassName("Hello")
classname.talk( 'world!' )
# prints "Hello world!"
Run Code Online (Sandbox Code Playgroud)
我的目标是编写一个完全用 C 编写的类以提高性能(我的项目中的所有其他类都将使用 Python,除了这个)。我并不是在寻找使用 …
这可能有点愚蠢,但我正在尝试使用 ctypes 来调用接收复数向量作为参数的函数。但在 ctypes 中没有 c_complex 类。有人知道如何解决这个问题吗?
编辑:我指的是python的ctypes,以防还有其他......
我们有一些用 C 定义的数据结构,但需要从 C/C++ 以及 Python 代码中使用它。一般来说,C 代码不是很复杂,我们讨论的是一些包含常量、枚举、“普通”结构和带有位域的压缩结构的头文件。这些文件定义了必须在微控制器和更强大的计算机上使用的两个软件部分之间的接口,因此是 C 结构。我们希望使用结构来解码消息并使用名称访问不同的部分,而不是使用位掩码或类似技术。
当然,我们可以将常量复制到 python 文件,使用python 的 struct 模块从/到原始数据转换,或者使用一些像bitstruct这样的库来打包结构。
但所有这些都将包括编写高度冗余的代码,如果规范的一小部分略有变化,则需要在许多不同的文件和语言中进行更改。能否以更自动化、更不容易出错的方式完成?
我有一些框架在 C++ 和一个基于 django 的 Web 应用程序中执行特定任务。这个想法是启动这个框架,从中接收一些数据,发送一些数据或请求并检查它在某个时期的状态。
我正在寻找最好的沟通方式。两个应用程序都运行在同一台服务器上。我想知道 C++ 中的 json 服务器是否是个好主意。Django 会向这个服务器发送一个请求,服务器会解析它,并委托一个工作线程来完成任务。几乎所有需要发送的数据都是类似字符串的。其他数据将存储在数据库中,因此没有问题。
JSON 是个好主意吗?也许你知道一些更好的 C++ 和 django 之间本地通信的机制?
我尝试使用链接:从python调用C/C++?,但我不能这样做,这里我有声明extern"C"的问题.所以请建议假设我有一个名为'function.cpp'的函数,我必须在python代码中调用这个函数.function.cpp是:
int max(int num1, int num2)
{
// local variable declaration
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
Run Code Online (Sandbox Code Playgroud)
那么我如何在python中调用这个函数,因为我是c ++的新手.我听说过'cython',但我不知道.
我有c ++库需要与插入模块的Python进行通信.通信假设通过Python实现一些回调c ++接口.
我已经阅读过有关编写扩展的内容,但不知道如何开发继承.
所以关于:C++:
class Broadcast
{
void set(Listener *){...
}
class Listener
{
void notify(Broadcast* owner) = 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要像Python这样的东西:
class ListenerImpl(Listener):
...
def notify(self, owner):
...
Run Code Online (Sandbox Code Playgroud)
注意,我不想使用Boost.
我尝试将Python脚本嵌入到我的C++程序中.在阅读了有关嵌入和扩展的一些内容之后,我了解了如何打开自己的python脚本以及如何将一些整数传递给它.但现在我有点不明白如何解决我的问题.我必须做两件事,从C++调用Python函数并从我的嵌入式Python脚本调用C++函数.但我不知道从哪里开始.我知道我必须编译.so文件以将我的C++函数暴露给Python,但这不是我能做的,因为我必须嵌入我的Python文件并使用C++代码控制它(我必须使用脚本语言,使一些逻辑易于编辑).
那么,有什么方法可以做这两件事吗?从C++调用Python函数并从Python调用C++函数?
这是我的C++代码
#include <Python.h>
#include <boost/python.hpp>
using namespace boost::python;
// <----------I want to use this struct in my python file---------
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
// Exposing the function like its explained in the boost.python manual
// but this needs to be compiled to a .so to be read from the multiply.py
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
// <---------------------------------------------------------------
int …Run Code Online (Sandbox Code Playgroud) 我发现了这个 C++ Python 绑定示例: Calling C/C++ from python? 根据那里的答案,我创建了一些测试文件:
foo.cpp:
#include <iostream>
#include <utility>
int bar_2(int a, int b){
return a*b;
}
std::pair<int, int> divide(int dividend, int divisor)
{
return std::make_pair(dividend / divisor, dividend % divisor);
}
extern "C" {
int bar_2_py(int a, int b){ return bar_2(a,b); }
std::pair<int, int> divide_py(int d, int div){return divide(d,div);}
}
Run Code Online (Sandbox Code Playgroud)
fooWrapper.py:
#!/usr/bin/env python
from ctypes import cdll
lib = cdll.LoadLibrary('./libfoo.so')
def bar_2(a, b):
res = lib.bar_2_py( a,b )
return res
def divide(d,div):
res = …Run Code Online (Sandbox Code Playgroud) 我用 Python 制作了一个 GUI,我只是想知道如何将 C 文件导入到 python 中,这样每次单击 GUI 上的按钮时,都会执行 C 程序中的不同方法。我尝试了“Python”导入方法:
sys.path.insert(0, '/home/pi/Desktop/FTPclass.py')
import FTPclass
Run Code Online (Sandbox Code Playgroud)
这适用于我导入的 python 文件,但是当我对我的 c 文件执行相同操作时,它抱怨说我的“testinc”模块不存在。
感谢大家提前的帮助。〜尼莫斯
python ×13
c++ ×8
ctypes ×3
boost-python ×2
c ×2
function ×2
binding ×1
boost ×1
class ×1
cpython ×1
django ×1
import ×1
json ×1
python-3.x ×1
python-c-api ×1
scikit-learn ×1
struct ×1
swig ×1
word-wrap ×1