您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > Python教程(原文)
1前言Python是一个容易学习又功能强大的程序语言。它含有高效率的高阶数据结构,也是一个简单但是有效果的对象导向程序语言(object-orientedprogramming)。Python优雅的语法及动态型态识别(dynamictyping),加上直译式(intepretion)的本质,使得它成为一个在多种功能多种平台上撰写脚本(scripts)及快速开发的理想语言。各种主要平台的Python直译器(interpreter)及延伸的标准链接库(library)都可以在Python的网站()上免费下载及自由流传(包含原始码及二元执行档(binaryform))。在该网站上也有许多的档案及连结,包括了免费、第三者开发的Python模块、程序及工具,以及许多的附带文件。Python的直译器也可以很容易的延伸,可以加入新的由C或是C++(或其它可以由C呼叫的程序语言)所写的函数或是数据型态。Python也很适合用来当作其它应用程序的延伸语言(译者言:比如说用Python来延伸CAD,DBMaker等的功能)。本教学文件将非正式的介绍给读者Python语言及系统的基本观念及特性。如果读者手边有一个Python的直译器将有助于获得实际的知识,但是本文件的解释都很充足,所以如果单纯离线阅读也是可以的。若对于标准的对象及模块有兴趣的话,请参阅PythonLibraryReference。若是要知道正式Python语言的标准定义的话,可参考PythonReferenceManual。若有兴趣用C或C++写延伸的功能的话,请参考ExtendingandEmbeddingthePythonInterpreter以及Python/CAPIReference。市面上也有许多更深入探讨Python的书籍。本教学文件并不试图完整的介绍每一个Python的特性,甚至也不试图介绍每一个常用的功能。相反的,本文件介绍许多Python值得认识的功能,并且让读者对这个语言的大致风貌有一个了解。在读完此书之后,读者应该可以开始读及写Python的模块及程序,并且应该可以开始学习各种在PythonLibraryReference所介绍的模块了。2开胃菜如果你曾经写过大型的shellscript,你大概能了解那种感觉:你想要新增加一个功能,但是这个script已经实在有够大够慢够复杂的了,或者说,你想要加入的新功能需要呼叫系统功能或是其它函数,但是这些功能/函数只有C才能呼叫。你要解决的问题好像并没有严重到要重新用C来写整个程序,或者有些问题因为要用到可变长度的字符串或是特别的数据结构(像是用排序过的文件名称组成序列(list)),用C来写实在比shell麻烦的太多,又或者是你根本不是对C很熟。另外一个情境是这样的:也许你要使用好几个C的链接库,但是标准开发C程序的过程(写/编译/测试/重新编译)实在太花时间,你需要能快速的开发好软件。又或者你已经些好一个应用程序,这个程序可以使用一个延伸的语言来控制。你不想创造一种语言,然后还得写好这个语言的编译器,还得把这个编译器跟你的程序放在一起。在这些情况之下,Python也许正是你所需要的语言。Python虽然简单,却是不折不扣的程序语言。对大型的程序来说,它比起shell能提供更多的结构性及支持。另外一方面,它也提供了比C语言更多的错误检查。由于Python是一个非常高阶的语言,所以它有许多内建的数据型态像是有弹性的数组及字典(dictionary)等等,如果用C来做的话得花上你大半天的时间。正是因为Python有较为一般性的数据型态,Python可以应用的范围比起awk甚或是Perl要广的很多,最起码,Python跟这些语言一样容易开发。Python的另外一个特点就是可以将程序切成小模块,然后这些模块还可以应用在其它的程序之中。Python本身也有一个相当大的标准模块库可以让你来使用,或者当作学习Python程序设计的范例。在Python中也有内建的模块可以提供许多功能,诸如:档案I/O、系统呼叫、sockets,甚至是与Tk之类的GUI工具互动的接口。Python是一个直译式的语言,可以省掉你在开发程序时不少编译及连结程序的时间。这个Python的直译器甚至可以交互式的使用,让你在写一些小程序来试验Python语言的特性,或是测试程序时可以写节省不少时间。你还可以用Python直译器来当作计算器呢。Python让你可以写出非常精练及可读性高的程序。用Python写出的程序通常比用C或C++写的程序要短得多,其理由如下:因为其高阶的数据型态,使得你可以用很简单的叙述(statement)就能够表达复杂的运作过程Python使用缩排来代替C/C++中常见的前后括号{}Python不需要变量或是参数的宣告Python是延伸性高的语言。如果你知道如何写C语言的程序的话,你很容易就可以在Python的直译器中加入新的内建函数(function)或是模块,这样做的好处是你可以让程序中关键的部分速度调到最快,或者是连结Python到binary的链接库(例如是厂商做好的图形链接库)去。一但你真的需要,你也可以把Python直译器加入到你用C写的应用程序里面去,然后Python就变成你的应用程序的延伸或是商业化的语言了。另外一提的是,这个程序的命名由来是源自于BBC著名的节目``MontyPython'sFlyingCircus'',跟其它恶心的爬虫类没有任何关系。如果你的文件中要提到MontyPython的话,不但照准,而且还相当鼓励。2.1然后呢现在你应该对Python感到有一些兴趣了吧,接下来你将看到比较多的的细节讨论。学习语言的最好途径是使用之,赶快动手吧。在下一章我们将讨论到如何使用Python的直译器,虽然相当的普通,但是如果你要尝试一下之后的范例的话,这是重要的基础。本教学文件的其余部分将用许多的例子介绍Python语言的各种不同的特性,先从简单的表示式(expressions)开始,将会谈到叙述(statements)及数据型态,然后是函式(functions)及模块(module),最后会谈到较高深的观念像是例外情形(exceptions)及使用者自订的类别(user-definedclasses)等等。3使用Python的直译器3.1如何启动直译器在Unix之类的操作系统上,如果有安装的话,Python直译器通常安装在/usr/local/bin/python这个目录中。你可能需要先在Shell中设定寻找/usr/local/bin目录,这样你才可以在Shell中打入以下的指令来启动Python直译器python你的Python直译器安装的位置是可以在安装时设定的,因此也有可能安装在其它的地方。你也许需要问你周遭的Python大师或是系统管理员才能知道正确的安装位置(/usr/local/python是另外一个普遍的可能安装所在)。要离开Python直译器的话,打入EOF的字符(在Unix上是Control-D,在DOS及Windows上是Control-Z就会使得直译器离开(zeroexitstatus)。如果行不通的话,你可以打入以下指令离开直译器:importsys;sys.exit().Python直译器使用每行编辑,应该不难使用。在Unix上,也许安装Python直译器的人有安装使用GNUreadline链接库的功能,这样的话你会有交互式编辑以及编辑过去数据的功能。最简单的检查你有没有这项功能的方法就是在Python的提示之下打入Control-P,如果有哔声的话,就表示你有这项功能,你可以翻到附录A去看特殊键的用法。如果你没有听到哔声,或是只出现P的话,就表示你没有这项功能,你得使用退格键(backspace)来清除目前所在行的字符了。Python直译器的操作方法根Unixshell很像:当被呼叫时所连结的标准输入是ttydevice(终端机)的话,直译器会互动的读及执行所输入的指令。当被呼叫时加入文件名称参数或所连结的标准输入是连到档案的话,直译器就会读入并执行该档所含有的script。第三种启动直译器的方法是打入以下的指令python-ccommand[arg]...,这个指令会执行command所代表的叙述(这跟shell的-coption很像),因为Python叙述(statement)常有空白及特殊字符,所以用此法时可以把command所代表的叙述用””括起来,以免跟shell的其它特殊字符或是参数有所混淆。要注意的是pythonfile指令跟pythonfile指令是有所区分的。对后者而言,不单单只有执行这个script,而且程序中有关输入的需求(例如呼叫input()或是raw_input())也都会由这个file来满足。由于此file已经在程序执行之初已经被从头到尾读过一次,所以一执行这个程序将会马上就碰到了EOF。相反的对于前一个写法来说,程序的输入需求是由任何连结到Python直译器的标准输入(standardinput)的装置或档案来满足的,而这个也许才是你所想要的结果。当script档案在使用的时候,也许你会想要执行这个script然后还可以之后继续进入互动的模式。这时你可以加入-i这个选项。但是如同前一段所说的,如果此script是由标准输入来读进去的话就没有办法这样做了。3.1.1参数的传递如果interpreter认识sys的话(译:可用“importsys”指令),script的文件名及附加传入的参数都会被纪录在sys.argv这个变量并并传给script来使用。sys.argv是一列的字符串,长度至少为1,如果你什么都档案或参数都没传的话,sys.argv[0]就是一个空字符串。如果script的名字是'-'(就是标准输入的意思)的话,sys.argv[0]就会被设为'-'。当使用-ccommand的话,sys.argv[0]就被设定为'-c'所有的在-ccommand之后的option(例如–i)都会被当成sys.argv而被command所处理,所以就不是当作option一样的来看待了。3.1.2互动模式当指令是由tty终端机来传入时,我们称之为互动模式(interactivemode)。在此模式之下会出现主要的命令提示符号(primaryprompt)来提示输入下一个指令,这个primaryprompt通常是。如果是指令是延续上一行的话就会出现secondaryprompt符号,这个secondaryprompt就通常是...。一进入python的互动模式的话直译器会出现一个欢迎信息,以及版本编号辑版权说明,接下来就是第一个prompt。如下所示:pythonPython1.5.2b2(#1,Feb281999,00:02:06)[GCC2.8.1]onsunos5Copyright1991-1995StichtingMathematischCentrum,Amsterdam当你输入需要多行的结构时,直译器就会自动会出现延续上一行的prompt符号,下面的例子是if叙述的情况:the_world_is_flat=1ifthe_world_is_flat:...printBecarefulnottofalloff!...Becarefulnottofalloff!3.2直译器及其周边环境3.2.1程序错误处理当有错误产生时,直译器就会在屏幕印出错误的信息以及stacktrace的所有数据。在互动模式之下,印完数据之后会再印出prompt来。如果输入是来自于档案的话,在出现错误的情况下直译器在印出stacktrace之后程序会以nonzeroexit的状态结束。(此处讨论不包含已经由try叙述及except子句处理外的状况(Exceptions))。有些的程序错误是没有办法挽救并且会造成nonzeroexit的结束情况,这常常是内部的不一致或是某种runningoutofmem
本文标题:Python教程(原文)
链接地址:https://www.777doc.com/doc-2847582 .html