Python本身就内置了大量功能,但毕竟不是也不可能包罗万象,如果要实现特定扩展功能,一个办法就是用C/C++等静态语言在外部实现相应的功能,并按Python扩展规范打包为一个模块,然后在Python中import近来就可以使用了。
每个Python模块都内置三个变量:__doc__、__name__和__file__。__name__代表模块名,__file__代表模块文件名,可以用print显示出来。sys.path中存放了所有模块加载路径,模块必须放在这些目录中才能被正确import,如果要添加新的路径调用sys.path.append()函数;执行sys.exit()可以退出程序。dir()用来查看当前已经加载的模块,dir(模块名)用来查看该模块中的所有函数和成员。
现在总结我对Boost.Python开发的初步认识。
首先是编译出一份boost_python.dll,它是boost对Python模块开发规范细节的一个封装,通过它可以不用按Python的规范开发扩展模块,而按照boost.python的格式开发,相对简单多了,但运行时也多了这个动态库依赖。首先随便起个Win32动态库空项目名,然后在选项中的包含文件夹添加boost库路径,之后添加boost\libs\python\src下的所有cpp文件到项目中,头文件一个也不用添加。编译前要在预处理器中加入BOOST_PYTHON_DYNAMIC_LIB和BOOST_PYTHON_SOURCE的定义,最后生成DLL和LIB文件。
现在可以按boost规范编写Python扩展模块了,首先建立一个Win32动态库空项目,然后添加一个空cpp文件。在文件顶部先添加#include<boost/python.hpp>和usingnamespaceboost::python;两行。为了简单,先实现一个函数和一个类如下:
char const* foo()
{
}
class World
{
public:
};
然后在下面加入boost规范的Python模块声明:
BOOST_PYTHON_MODULE( test)
{
}
>>>import test
>>> test.foo()
'hello, world'
>>> dir(test)
['World', '__doc__', '__file__', '__name__','foo']
>>>obj = test.World()
>>> obj.set('Hello,Python!')
>>> obj.greet()
'Hello, Python!'
也可以将脚本保存为一个.py或.pyw文件,然后编译为.pyc文件,就像这样:
>>>import compiler
>>>compiler.compileFile("*.py")
得到一个*.pyc文件,可供应用程序调用执行,比如一个简单的程序:
#include<windows.h>
#include<Python.h>
int __stdcall WinMain( HINSTANCE hInstance, HINSTANCEhPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
}