展开全部#读file = = open(file, r)dict = (())()#写testDict = {a:1,b:2}file = = open(file,w+)((testDict))()
要搞明白如何让python调用C/C++代码(也就是写python的extension),你需要征服手册中的<>厚厚的一章。
在昨天花了一个小时看地头晕脑胀,仍然不知道如何写python的extension后,查阅了一些其他书籍,最终在<>书中找到了教程。
1. 首先要明白的是,所谓的python扩展(也就是你提供给python的c/c++代码,不一定是c/c++代码,可以是其他语言写的代码)是一个dll,并且这个dll放在本机python安装目录下的DLLs目录下(譬如我机器上的路径是:F:/Program Files/Python25/DLLs),假如我们接下来要写的扩展module名为mb,python调用的代码为:import (Pythons really amazing, I kindda love it!) 2. 搭建环境,我们要使用python提供的c头文件和lib库来进行扩展的开发。
在vs 2005下点击菜单 工具->选项, 打开选项对话框,选择项目和解决方案->VC++目录, 然后在右边显示以下内容的目录得comboBox上选择包含文件”,添加python的include目录(我的机器上是F:/Program Files/Python25/include),然后选择库文件,添加python的libs目录(我的机器上是F:/Program Files/Python25/libs)。
既然扩展是一个dll,接下来我们要建立一个“动态链接库”工程,然后开始写代码: #include //python.h是包含python一些定义的头文件,在python的include目录下/*我的python版本是2.5, 因为安装python后它没提供debug下的lib库文件,因此你必须生成release版的dll, 想要生成dll版本的,你要到python官网上自己去下载python源代码,当然你可以继续生成release版本的dll,但dll中包含调试信息*/#pragma comment(lib, )//先不管static PyObject* mb_showMsg(PyObject* self, PyObject *args);/*如果你的扩展是mb,那么必须实现一个initmb函数,并且从dll中导出这个函数,但我们在python中调用import mb时,python会去dll里去调用 extern C __declspec(dllexport) void initmb(){/*当调用(Pythons really amazing, I kindda love it!)时, 相当于你告诉python我有一个showMsg函数,我们怎么告诉python去调用我们dll里的mb_showMsg函数呢?技巧就是下面的方式,定义一个字典数据结构,key => showMsg, value =>mb_showMsg,METH_VARARGS是函数调用方式,仔细查手册吧*/static PyMethodDef mbMethods[] = { {showMsg, mb_showMsg, METH_VARARGS}, {NULL, NULL, NULL} /*sentinel,哨兵,用来标识结束*/};//告诉python我们的模块名叫mb, 模块包含的函数都在mbMethods字典里 PyObject *m = Py_InitModule(mb, mbMethods);}/*接下来实现核心功能showMsg*///第一个self参数我们用不着,具体查手册,第二个参数是python传给我们的参数,它是一个python的参数tuple static PyObject* mb_showMsg(PyObject* self, PyObject *args){//我们的showMsg函数需要的是一个字符串参数 const char* msg = NULL;/*调用特殊参数解码python传递给我们的参数,s是string,我们传递接收参数的变量地址, 如果你的功能函数需要两个参数,在PyArg_parseTuple后面继续添加接受参数的变量地址, 这个函数的原型是类似printf的不定参数的形式 PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);*/if (!PyArg_ParseTuple(args, s, &msg)) return NULL;//调用MBint r = ::MessageBox(NULL, hello, Caption:Form C module, MB_ICONINFORMATION | MB_OK);//返回值return Py_BuildValue(i, r);}将上面这段混杂着大量注释的代码拷贝到你的编辑器里,然后编译生成,修改后缀成,然后拷贝到python的DLLs目录下,打开idle(python的交互程序),写入代码:import (Pythons really amazing, I kindda love it!)
Python的特色简单Python是一种代表简单主义思想的语言。
阅读一个良好的Python程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python的这种伪代码本质是它最大的优点之一。
它使你能够专注于解决问题而不是去搞明白语言本身。
易学就如同你即将看到的一样,Python极其容易上手。
前面已经提到了,Python有极其简单的语法。
免费、开源Python是FLOSS(自由/开放源码软件)之一。
简单地说,你可以自由地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的自由软件中。
FLOSS是基于一个团体分享知识的概念。
这是为什么Python如此优秀的原因之一——它是由一群希望看到一个更加优秀的Python的人创造并经常改进着的。
高层语言当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节。
可移植性由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工作在不同平台上)。
如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就可以在下述任何平台上面运行。
这些平台包括Linux、windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC!解释性这一点需要一些解释。
一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1)。
这个过程通过编译器和不同的标记、选项完成。
当你运行你的程序的时候,连接/转载器软件把你的程序从硬盘复制到内存中并且运行。
而Python语言写的程序不需要编译成二进制代码。
你可以直接从源代码 运行 程序。
在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。
事实上,由于你不再需要担心如何编译程序,如何确保连接转载正确的库等等,所有这一切使得使用Python更加简单。
由于你只需要把你的Python程序拷贝到另外一台计算机上,它就可以工作了,这也使得你的Python程序更加易于移植。
面向对象Python即支持面向过程的编程也支持面向对象的编程。
在 面向过程 的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。
在 面向对象 的语言中,程序是由数据和功能组合而成的对象构建起来的。
与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
可扩展性如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
可嵌入性你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
丰富的库Python标准库确实很庞大。
它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
记住,只要安装了Python,所有这些功能都是可用的。
这被称作Python的“功能齐全”理念。
除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
本文地址: http://akl.dhslw.com/jishuwz/06c7aa27fed2b05d38e4.html
上一篇:请写出这些报纸名称你平时读过哪些报纸至少...