Python
python
道格拉斯范朋克
中间件
展开
-
VS Code中的Python入门
VS代码中的Python入门在本教程中,您将使用Python 3在Visual Studio Code中创建最简单的Python“Hello World”应用程序。通过使用Python扩展,您可以将VS Code变成一个非常轻量级的Python IDE(您可以找到PyCharm的高效替代品)。先决条件:要成功完成本教程,您必须执行以下操作:1、为vs code 安装python扩...翻译 2018-12-15 19:21:40 · 4760 阅读 · 0 评论 -
Boost.Python教程:默认参数
Boost.Python包装(成员)函数指针。不幸的是,C ++函数指针没有默认参数信息。使用默认参数获取函数f:int f(int,double = 3.14,char const * =“hello”);但是指向函数f的指针类型没有关于其默认参数的信息:int(*g)(int,double,char const*) = f; // 默认值丢失当我们将此函数指针传递给d...原创 2019-04-12 11:24:41 · 1331 阅读 · 0 评论 -
Boost.Python教程:对象接口
Python是动态类型的,与静态类型的C ++不同。Python变量可以包含整数,浮点数,列表,字典,元组,str,long等等。从Boost.Python和C ++的角度来看,这些Pythonic变量只是类object实例。我们将在本章中看到如何处理Python对象。如前所述,Boost.Python的目标之一是在保持Python感觉的同时提供C ++和Python之间的双向映射。B...原创 2019-04-15 17:16:28 · 4418 阅读 · 0 评论 -
Boost.Python教程:嵌入,从c/c++中调用python代码
使用解释器到现在为止,您应该知道如何使用Boost.Python从Python调用C ++代码。但是,有时您可能需要反过来:从C ++端调用Python代码。这需要您将Python解释器嵌入到C ++程序中。目前,Boost.Python并不直接支持嵌入时您需要的所有内容。因此,您需要使用Python / C API填补空白。但是,Boost.Python已经使嵌入变得更加容易,...原创 2019-04-15 17:27:08 · 2819 阅读 · 0 评论 -
Boost.Python教程:迭代器
在C ++中,特别是STL,我们在任何地方都看到了迭代器。Python也有迭代器,但这是两个非常不同的令人讨厌的东西。C ++迭代器:C ++有5种类型(随机访问,双向,转发,输入,输出) 有两种操作类别:重新定位,访问 需要一对迭代器来表示(第一个/最后一个)范围。Python迭代器:1类(前进) 1个操作类别(next()) 最后引发StopIteration异常典型...原创 2019-04-15 17:43:25 · 288 阅读 · 0 评论 -
Boost.Python教程:异常传输
必须在Python代码的边界捕获所有C ++异常。这个边界是C ++遇到Python的地方。Boost.Python提供了一个默认的异常处理程序,用于转换选定的标准异常,然后放弃:raise RuntimeError, 'unidentifiable C++ Exception'用户可以提供自定义翻译。这是一个例子:struct PodBayDoorExcept...原创 2019-04-15 17:46:01 · 728 阅读 · 0 评论 -
Boost.Python教程:通用技术
下面介绍一些有用的技术,您可以在使用Boost.Python包装代码时使用这些技术。创建包Python包是一组模块,为用户提供某种功能。如果您不熟悉如何创建包,Python教程中提供了对它们的一个很好的介绍。但是我们使用Boost.Python包装C ++代码。我们如何为用户提供一个漂亮的包界面?为了更好地解释一些概念,让我们使用一个例子。我们有一个有不同含义的C ++库:...原创 2019-04-15 19:03:18 · 481 阅读 · 2 评论 -
Boost.Python教程:导入有依赖关系的动态库
1、如果导入的动态库依赖其他的动态库,只需把直接导入的动态库的后缀改为pyd,其他依赖的动态库在环境变量path里必须能够找得到。否则经常报错;ImportError: DLL load failed: 找不到指定的模块。2、ImportError: dynamic module does not define init function,错误原因一般是导出的接口有错误,dll匹配...原创 2019-04-17 16:48:53 · 1196 阅读 · 0 评论 -
Python在windows下使用dll与工程常见错误(vs调试python调用的pyd)
unindent does not match any outer level 翻译是 缩进与任何外部缩进级别都不匹配常见的问题是缩进没有对齐,可以使用notepad查看对齐情况(视图 -> 显示符号 -> 显示空格与制表符)Unresolved reference没有给变量赋值pyd后缀文件的含义:* .pyd文件是否与DLL相同?是的,.pyd文件是dll,但有一些差...原创 2019-04-23 19:31:44 · 2820 阅读 · 1 评论 -
Boost.Python教实现分析:instance_holder.hpp
<boost/python/instance_holder.hpp> 提供了类instance_holder,它是包含包装类的C ++实例的类型的基类。Class templateinstance_holderClassintance_holder析构Classintance_holder修饰符Classintance_holder观察者instan...原创 2019-05-08 17:08:04 · 443 阅读 · 0 评论 -
Boost.Python包装私有析构函数的类:boost::python::object::value_holder<Value>::~value_holder()错误
使用boost::python包装含有私有析构函数的类是行不通的。也就是说单例一般也是没办法直接包装的,当然可以曲线实现编译出错如下:boost\python\object\value_holder.hpp(134):errorC2248:“XXXCLASS::XXXCLASS”:无法访问private成员(在“XXXCLASS”类中声明),参见XXXCLASS的声明,例如:...原创 2019-05-08 19:01:09 · 499 阅读 · 0 评论 -
python3使用pip报错
错误信息:pip is configured with locations that require TLS/SSL, however the ssl module inPython is not available.错误原因:1、OpenSSL没有配置到环境变量中(如果安装的是anaconda,环境变量配置缺少)2、OpenSSL没有安装(更多可能性)解决方法:1、...原创 2019-05-19 16:49:25 · 1183 阅读 · 2 评论 -
Boost.Python教程:重载
以下说明了手动包装重载成员函数的方案。当然,相同的技术可以应用于包装重载的非成员函数。我们这里有我们的C ++类:struct X{ bool f(int a) { return true; } bool f(int a, double b) { return true; } bool f(in...原创 2019-04-12 11:09:50 · 561 阅读 · 0 评论 -
Boost.Python教程:函数
在本章中,我们将更详细地介绍Boost.Python驱动的函数。我们将看到一些工具,可以将C ++函数暴露给Python,避免潜在的pifall,例如悬空指针和引用。我们还将看到一些工具,使我们更容易公开利用C ++特性(如重载和默认参数)的C ++函数。继续阅读......但在此之前,您可能想要启动Python 2.2或更高版本并键入 >>> import th...原创 2019-04-12 11:07:37 · 573 阅读 · 0 评论 -
boost中的Python开发
概要欢迎来到Boost.Python,它是一个C ++库,它实现了C ++和Python编程语言之间的无缝互操作。该库包括以下支持:参考文献和指针 全球注册类型强制 自动跨模块类型转换 高效的函数重载 C ++到Python异常翻译 默认参数 关键字参数 在C ++中操作Python对象 将C ++迭代器导出为Python迭代器 文档字符串内容教程 建筑和测试...翻译 2019-03-21 11:37:09 · 288 阅读 · 0 评论 -
Boost.Python教程:导出函数
目录快速开始建立Hello World暴露类构造函数类的数据成员类属性遗产类虚函数具有默认实现的虚函数类操作符/特殊功能功能呼叫政策超载默认参数自动重载对象接口基本界面派生对象类型提取C ++对象枚举从PyObject*创建boost::python::object嵌入使用解释器迭代器例外...原创 2019-03-21 14:08:28 · 843 阅读 · 0 评论 -
Boost.Python教程:建立Hello World
从开始到结束现在你要做的第一件事是构建Hello World模块并在Python中自己尝试。在本节中,我们将概述实现这一目标所需的步骤。我们将使用与每个boost发行版捆绑在一起的构建工具:bjam。 注意 建筑没有bjam 除了bjam之外,当然还有其他方法可以构建你的模块。这里写的不应该被视为“唯一的方式”。除了bjam之外,当然还有其他构建工具。...原创 2019-03-21 14:57:33 · 494 阅读 · 2 评论 -
Boost.Python教程:暴露类
现在让我们向Python暴露一个C ++类。考虑我们要向Python暴露的C ++类/结构:struct World{ void set(std::string msg) { this->msg = msg; } std::string greet() { return msg; } std::string msg;};我们可以通过编写相应的Boo...原创 2019-04-10 14:34:01 · 448 阅读 · 0 评论 -
Boost.Python教程:暴露类的构造
我们之前的示例没有任何显式构造函数。由于World被声明为普通结构,因此它具有隐式默认构造函数。 Boost.Python默认公开默认构造函数,这就是我们能够编写的原因>>> planet = hello.World()我们可能希望用非默认构造函数包装一个类。让我们以前面的例子为基础:struct World{ World(std::string m...原创 2019-04-10 15:13:21 · 703 阅读 · 0 评论 -
Boost.Python教程:暴露类的数据成员
数据成员也可以暴露给Python,以便可以将它们作为相应Python类的属性进行访问。我们希望公开的每个数据成员可以被视为只读或读写。考虑这个类Var:struct Var{ Var(std::string name) : name(name), value() {} std::string const name; float value;};我们的C ++...原创 2019-04-10 15:27:03 · 438 阅读 · 0 评论 -
Boost.Python教程:暴露类的属性
在C ++中,具有公共数据成员的类通常不受欢迎。设计良好的类利用封装隐藏了类的数据成员。访问类数据的唯一方法是通过访问(getter / setter)函数。访问函数公开类属性。这是一个例子:struct Num{ Num(); float get() const; void set(float value); ...};但是,在Python中,属性访...原创 2019-04-10 15:36:10 · 954 阅读 · 0 评论 -
Boost.Python教程:类的继承
在前面的示例中,我们处理的是非多态的类。通常情况并非如此。大多数时候,我们将包含通过继承相关的多态类和类层次结构。我们经常需要为从抽象基类派生的类编写Boost.Python包装器。考虑这个简单的继承结构:struct Base { virtual ~Base(); };struct Derived : Base {};及在Base和Derived对象实例上运行的一组C ++函数:...原创 2019-04-10 16:02:18 · 693 阅读 · 0 评论 -
Boost.Python教程:类的虚函数
在本节中,我们将学习如何通过虚函数使函数表现为多态。继续我们的示例,让我们向Base类添加一个虚函数:struct Base{ virtual ~Base() {} virtual int f() = 0;};Boost的目标之一。Python对现有的C ++设计的干扰最小。原则上,应该可以在不更改第三方库的情况下公开第三方库的接口。在我们的Base类中添加任何东...原创 2019-04-12 10:25:47 · 1096 阅读 · 0 评论 -
Boost.Python教程:类的虚函数的默认实现
我们在上一节中已经看到了如何使用Boost.Python的类包装器工具包装具有纯虚函数的类。如果我们希望改为包装非纯虚函数,那么机制就有点不同了。回想一下,在上一节中,我们用一个纯虚函数包装了一个类,然后用C ++实现它,或者从它派生的Python类。我们的基类:struct Base{ virtual int f() = 0;};有一个纯虚函数f。但是,如果其成员函...原创 2019-04-12 10:29:25 · 739 阅读 · 0 评论 -
Boost.Python教程:类操作符/特殊功能
Python运算符C以丰富的操作符而闻名。 C ++通过允许运算符重载将其扩展到极限。 Boost.Python利用了这一点,并且可以很容易地包装C ++运算符驱动的类。考虑文件位置类FilePos和一组采用FilePos实例的运算符:class FilePos { /*...*/ };FilePos operator+(FilePos, int);FilePos ...原创 2019-04-12 10:38:37 · 346 阅读 · 0 评论 -
libboost_pythonPY_MAJOR_VERSIONPY_MINOR_VERSION-vc141-mt-gd-x32-1_67.lib编译问题
使用boost1.6.7在vs2015下编译,遇到问题,还以为自己配置错了。原来是boost的bug,修改方式:include/boost/python/detail/config.hpp// Set the name of our library, this will get undef'ed by auto_link.hpp// once it's done with it:...原创 2019-06-17 21:18:31 · 684 阅读 · 0 评论