python参考手册chm
A. 如何让python调用C和C++代码
如何让python调用C和C++代码
安装python后,会有一个chm格式的python手册。要搞明白如何让python调用C/C++代码(也就是写python的 extension),你需要征服手册中的
<<Extending && embedding>>厚厚的一章。在昨天花了一个小时看地头晕脑胀,仍然不知道如何写python的extension后,查阅了一些其他 书籍,最终在<<Python Programming On Win32>>书中找到了教程。
下面记录一下如何在visual studio 2005中,写一段C/C++的MessageBox代码,然后提供后python调用,最后的结果当然是显示一个MessageBox.
1. 首先要明白的是,所谓的python扩展(也就是你提供给python的c/c++代码,不一定是c/c++代码,可以是其他语言写的代码)是一个 dll,并且这个dll放在本机python安装目录下的DLLs目录下(譬如我机器上的路径是:F:\Program Files\Python25\DLLs),假如我们接下来要写的扩展mole名为mb,python调用的代码为: import mb
mb.showMsg("Python's really amazing, I kindda love it!")
python怎么找到我们的mb模块呢?就是上面说的,我们要生成一个mb.dll,然后拷贝到Dlls目录下面,为了区别普通的dll和python专用扩展的dll,我们的 mb.dll修改成mb.pyd(python dll)
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.h是包含python一些定义的头文件,在python的include目录下 /*
我的python版本是2.5, 因为安装python后它没提供debug下的lib库文件,因此你必须生成release版的dll,
想要生成dll版本的,你要到python官网上自己去下载python源代码,当然你可以继续生成release版本的dll,但dll中包含调试信息
*/
#pragma comment(lib, "python25.lib")
//先不管
static PyObject* mb_showMsg(PyObject* self, PyObject *args); /*
如果你的扩展是mb,那么必须实现一个initmb函数,并且从dll中导出这个函数,但我们在python中调用import mb时,python会去dll里去调用
initmb函数,这个函数告诉python我们有些什么函数,该怎么告诉python我们有一个showMsg函数呢?下面详解 */
//必须extern "C"下,这样不会在C++编译器里不会更改掉导出的函数名字,我第一次就犯了这样的错误
extern "C" __declspec(dllexport) void initmb() { /*
当调用mb.showMsg("Python's 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_InitMole("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;
//调用MB
int r = ::MessageBox(NULL, "hello", "Caption:Form C mole", MB_ICONINFORMATION | MB_OK);
//返回值
return Py_BuildValue("i", r); }
将上面这段混杂着大量注释的代码拷贝到你的编辑器里,然后编译生成mb.dll,修改后缀成mb.pyd,然后拷贝到python的DLLs目录下,打开idle(python的交互程序),写入代码: import mb
mb.showMsg("Python's really amazing, I kindda love it!")
可以看到弹出来一个MessageBox。
B. 如何使用sphinx生成Python第三方模块的文档
在使用Python的过程中,无疑我们经常需要下载安装第三方模块(如何安装:URL),而安装后我们必然会面临一个使用的问题,这时候我们需要阅读相关的文档。可是我们会发现下载的第三方模块目录的doc文件夹下只有一个conf.py文件和一些后缀为rst的文件,文档在哪里呢?
其实Python提供了专用的文档生成工具,有了这些工具就可以很方便地生成我们需要的文档了。本文就是介绍如何使用一些第三方工具(sphinx)来生成这些文档。
1.下载并安装Docutils:http://docutils.sf.net/。
2.下载并安装sphinx :http://pypi.python.org/pypi/Sphinx/1.1。Sphinx 是用来生成文档的,设计的初衷是为了生成python的文档。可以生成html、htmlhelp/chm、qthelp、devhelp、latex、man 等格式的文档。
3.在Widnows环境下,打开命令提示符,使用cd /d 命令将当前目录切换至Sphinx目录,运行命令:python sphinx-build.py -b html sourcedir builddir,其中,-b后面的字符串用于控制输出文档的格式,默认为html。sourcedir表示文档来源文件夹(一般就是包含conf.py文件的那个文件夹),builddir表示生成文档的目标文件夹。(注:在Windows环境下,请不要将sphinx文件夹、sourcedir 和builddir 设置成包含中文的路径,否则容易出现一些默名其妙的错误,例如编码错误。)
C. windows环境的python的环境变量
默认情况下,在windows下安装python之后,系统并不会自动添加相应的环境变量。此时不能在命令行直接使用python命令。
1. 首先需要在系统中注册python环境变量:假设python的安装路径为c:\python27,则修改我的电脑->属性->高级->环境变量->系统变量中的PATH为:
(为了在命令行模式下运行Python命令,需要将python.exe所在的目录附加到PATH这个环境变量中。)
PATH=PATH;c:\python27
上述环境变量设置成功之后,就可以在命令行直接使用python命令。或执行"python *.py"运行python脚本了。
2. 此时,还是只能通过"python *.py"运行python脚本,若希望直接运行*.py,只需再修改另一个环境变量PATHEXT:
PATHEXT=PATHEXT;.PY;.PYM
3. 另外,在使用python的过程中,可能需要经常查看某个命令的帮助文档,如使用help('print')查看print命令的使用说明。默认安装的python无法查看帮助文档,尚需进行简单的配置:
在python安装目录下,找到python272.chm,使用hh -decompile .python272.chm将其反编译出来,然后将其所在的目录加入到上面提到的PATH环境变量中即可。
4. 如何使Python解释器能直接import默认安装路径以外的第三方模块?
为了能import默认安装路径以外的第三方的模块(如自己写的模块),需要新建PYTHONPATH环境变量,值为这个模块所在的目录。
D. 如何从零开始学python
1、学习的时候,我们都是要从Python的基础语法开始学习 ,了解什么是Python的变量 什么是循环 什么是函数,什么是模块。类等等。总之,基础是学习以后高级开发的基石。
这个阶段可以,选择一些经典书籍或者视频进行学习。
书籍可以看看《python快乐编程—基础入门》这本书,是针对零基础学生来编写的书。
2、在学习完基础语法的时候,你也对python有了一定程度的了解了,也知道Python有很多的学习方向,比如说数据采集方向(爬虫),或者Web开发方向,也可能是最近特别火热的人工智能方向。每个方向所需要的技术都是不尽相同的,所以在我们学习完成Python的基础语法之后,一定要慎重选择自己之后的进阶方向。
3、在进阶阶段,建议以最新的python视频学习为主,相关书籍为辅,这个阶段主要是学的技术是最新的,不要给自己留一个学完之后技术已经过时的惨败后果。
此外还有一些小小的学习技巧分享给大家,希望大家调整好心态,坚持下去!
1.作为小白刚接触编程,理解起来慢很正常。不能理解的东西,也不要死磕太久,在不断的练习中,你对代码的理解会越来越深。
2.个人认为,人按学习能力可以暴力分为:上手快&忘得快,上手慢&理解深,上手快&理解深。好了,第三类人我就不想多说什么了。。。相信很多小伙伴都是第二类人!
3. 遇到问题,别死磕,多用搜索引擎,多看大牛的博客。
4. 觉得某个知识点时间花得久了,无非是想短时间投入,获得较大的成就感,或者说想一帆风顺敲代码,别遇到什么bug。不存在的。而且,一般情况下,花越多时间理解的知识点,花越多时间改好的bug,不是会获得越大的成就感才对嘛?!
E. 在中文版 Windows 上查看 python.chm,如何消除乱码
解决中文Windows上Python chm乱码的难题
在Python 3.6及更高版本的Windows环境中,遇到一个令人头痛的问题——Python的官方文档(python.chm)在中文版Windows上显示异常,中文字符出现乱码。问题的核心在于,Python的HTML字符编码从Unicode转换为Windows-1252,而Windows自带的chm查看器hh.exe却依赖于IE浏览器的内核,而IE并不支持这种编码。
原因解析
Windows chm查看器默认使用GBK编码,而Python 3.6之后的chm文件使用Windows-1252,这导致了hh.exe无法正确识别。即便手动选择西欧(ISO)编码,也只是临时解决当前网页的问题,对hh.exe本身的编码处理并无帮助。此外,hh.exe的菜单功能可能因为编码问题而显得不完整。
寻找解决方案
为了解决这个问题,我们不得不寻找替代方案。例如,Sumatra PDF这样的第三方阅读器,虽然非IE内核,支持cp1252,但遗憾的是,它缺少索引和搜索功能。真正的挑战在于hh.exe的编码受系统区域设置影响,而Windows的全局system locale设计并不灵活,无法为每个进程独立设定。
尝试性地,我们可以使用GetACP()函数查看当前的codepage,但有时可能会得到1252而不是系统默认的936。微软曾提供AppLocale来解决这个问题,但已不再推荐。取而代之的是开源项目Locale Emulator (LE),它允许我们为特定进程设置独立的locale。通过LEInstaller.exe和LEGUI.exe,我们可以为hh.exe设置西欧(cp1252)这样的locale,通过创建快捷方式,用LEProc.exe启动hh.exe,以解决乱码问题。
值得注意的是,对于32-bit系统,可以直接使用hh.exe,但64-bit系统需要使用C:WindowsSysWOW64hh.exe。LE通过API钩子技术实现这一功能,32-bit系统相对容易,而64-bit系统则需要额外的技巧。这是在2018年9月29日的解决方案,随着时间的推移,可能需要更新或寻找新的技术来优化处理。
总结
面对Python chm在中文Windows上的乱码问题,需要跳出常规的框架,采用更灵活的工具和方法。通过Locale Emulator,我们找到了一种可能的路径,尽管64-bit系统处理存在挑战,但解决方案的探索从未停止。持续关注最新技术发展,或许能为我们找到一个更加完美的解决之道。
F. python 帮助文档 怎么使用
python帮助文档是chm格式的(即英语“Compiled Help Manual”的简写,即“已编译的帮助文件”。)
CHM是微软新一代的帮助文件格式,利用HTML作源文,把帮助内容以类似数据库的形式编译储存。
python帮助文档在python安装目录的doc文件夹下,双击即可打开。
G. 大一该怎么学python
1)学好python的第一步,就是马上到python官网上下载一个python版本。我建议初学者,不要下载具有IDE功能的集成开发环境,比如Eclipse插件等。
2)下载完毕后,就可以开始学习了。学习过程中,我建议可以下载一些python的学习文档,比如《dive into python》,《OReilly - Learning Python》等等。通过学习语法,掌握python中的关键字语法,函数语法,数学表达式等等
3)学完了基本语法后,就可以进行互动式学习了。python具备很好的交互学习模式,对于书本上的例子我们可以通过交互平台进行操练,通过练习加深印象,达到学习掌握的目的。
4)通过以上三个步骤的学习后,我们大致掌握了python的常用方法、关键字用法以及函数语法等。接下去的学习上,我们就可以着手学习常用模块的使用, 比如os,os.path,sys,string模块等。我们可以在交互环境中先熟悉使用其中的函数,如果遇到函数的使用上的问题,可以参考python 安装后的自带chm帮助文件。
5)为了更好地掌握python,我们的学习不能只是停留在学习一些语法或者api阶段。在此阶段中,我们可以尝试用python解决我们项目中遇到的一 些问题,如果项目不是用python开发的,那我们可以想想能不能用python制作一些项目组可以使用的一些工具(utility),通过这些工具简化 项目组成员的任务,提高我们的工作效率。如果没有项目,我们也可以自己找些题目来自己练习练习。
6)经过以上锻炼后,我们的python知识水平肯定是越来越高。接下去的学习,我们就要更上一层楼。为了学以致用,真正能应用于项目开发或产品开发,我 们还必须学习企业应用开发中必须要掌握的网络和数据库知识。在此的学习就不光是python语言本身的学习了,如果之前没有学习和掌握很网络和数据库知 识,在此阶段我们可以借此机会补习一把。
7)在此,我想我们对python的使用以及信手拈来了,即使忘了api的用法,我们也可以在短时间内通过查看文档来使用api。那么接下去,我们要学习 什么呢?那就是设计能力,在学习设计能力的过程中,如果对类等面向对象的概念不清楚的,在此阶段也可以学习或加以巩固。就像飞机设计师设计飞机通过学习模 型来设计一样,我们也可以通过学习书上的经典例子来学习设计。等有了设计的基本概念后,我们就可以着手设计我们的程序了。在此阶段中,我们重要的是学习抽 象的思想,通过隔离变化点来设计我们的模块。
8)到此阶段,我们已经是真正入门了。在接下去的工作中,就是要快速地通过我们的所学来服务项目了。在此阶段,我们除了掌握python自带的模块外,我 们最好在掌握一些业界广泛使用的开源框架,比如twisted、peak、django、xml等。通过熟练使用它们,达到闪电开发,大大节省项目宝贵时 间。
9)你已经是个python行家了,在此阶段,我们在工作中会遇到一些深层次的、具体的困难问题。面对这些问题,我们已经有自己的思考方向和思路了。我们 时常会上网观看python的最新发展动态,最新python技术和开源项目,我们可以参与python论坛并结交社区中一些python道友。
10)你已经是个python专家,在此阶段你应该是个python技术传播者。时不时在组织中开坛讲座,并在博客上传播你的python见解。你会上论 坛帮助同行们解决他们提出的问题,你会给www.python.org网站提出你的宝贵建议,并为python语言发展献计献策。
任何知识的学习无止境,python的学习也不另外。在掌握python的用法、api和框架后,我们更要学习设计模式、开发方法论等