Python教程原文.docx

上传人:b****4 文档编号:26879358 上传时间:2023-06-23 格式:DOCX 页数:93 大小:86.14KB
下载 相关 举报
Python教程原文.docx_第1页
第1页 / 共93页
Python教程原文.docx_第2页
第2页 / 共93页
Python教程原文.docx_第3页
第3页 / 共93页
Python教程原文.docx_第4页
第4页 / 共93页
Python教程原文.docx_第5页
第5页 / 共93页
点击查看更多>>
下载资源
资源描述

Python教程原文.docx

《Python教程原文.docx》由会员分享,可在线阅读,更多相关《Python教程原文.docx(93页珍藏版)》请在冰豆网上搜索。

Python教程原文.docx

Python教程原文

1前言

Python是一个容易学习又功能强大的程序语言。

它含有高效率的高阶数据结构,也是一个简单但是有效果的对象导向程序语言(object-orientedprogramming)。

Python优雅的语法及动态型态识别(dynamictyping),加上直译式(intepretion)的本质,使得它成为一个在多种功能多种平台上撰写脚本(scripts)及快速开发的理想语言。

各种主要平台的Python直译器(interpreter)及延伸的标准链接库(library)都可以在Python的网站(http:

//www.python.org)上免费下载及自由流传(包含原始码及二元执行档(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"指令跟"python

对后者而言,不单单只有执行这个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。

如下所示:

python

Python1.5.2b2(#1,Feb281999,00:

02:

06)[GCC2.8.1]onsunos5

Copyright1991-1995StichtingMathematischCentrum,Amsterdam

>>>

当你输入需要多行的结构时,直译器就会自动会出现延续上一行的prompt符号,下面的例子是if叙述的情况:

>>>the_world_is_flat=1

>>>ifthe_world_is_flat:

...print"Becarefulnottofalloff!

"

...

Becarefulnottofalloff!

3.2直译器及其周边环境

3.2.1程序错误处理

当有错误产生时,直译器就会在屏幕印出错误的信息以及stacktrace的所有数据。

在互动模式之下,印完数据之后会再印出prompt来。

如果输入是来自于档案的话,在出现错误的情况下直译器在印出stacktrace之后程序会以nonzeroexit的状态结束。

(此处讨论不包含已经由try叙述及except子句处理外的状况(Exceptions))。

有些的程序错误是没有办法挽救并且会造成nonzeroexit的结束情况,这常常是内部的不一致或是某种runningoutofmemory所造成。

所有的错误信息都会被写入至标准errorstream之中,正常的程序执行的输出则会写入到标准(standardoutput)输出之中。

如果在primary或是secondaryprompte之下打入中断字符(通常是Control-C或是DEL),这会造成输入的中断并且会回到prompt之下。

(有一个GNUReadlinepackage的问题可能会使这个功能失效。

)在指令执行之中打入中断字符则会引起KeyboardInterrupt的exception,而这是可以在try叙述中处理的。

3.2.2执行Python脚本

在BSD之类的Unix系统上,我们可以在script的最前面加入以下的叙述(类似shellscript),并改变档案属性为可执行:

#!

/usr/bin/envpython

如此script就会变成可执行档,可以直接执行(假设Python的直译器是在user的$PATH)变量之中)。

"#!

"这两个字必须在script档案的最前面。

值得一提的是"#"在Python之中也当作注解(comment)部分开始的符号。

3.2.3交互式启动档

当你使用互动模式的时候,如果可以在每次直译器要启动时先执行一些命令的话将是很有用的。

要达成如此功能,你可以设定一个文件名称给环境变量$PYTHONSTARTUP,这个档案可以包含你想要在启动时执行的命令,类似.profile在Unixshell中的用法。

这个启动档(startupfile)只有对在互动模式下有效,如果你用Python读入script时就没有用,在当/dev/tty是命令的输入来源也没有用(其它的情况与互动模式相类似)。

这个startupfile所执行命令的命名空间是与其它互动模式下输入的指令相同,所以在startupfile内定义或是import的对象,在之后的互动模式指令中都是可以直接使用的。

你也可以在这个startupfile中改变sys.ps1及sys.ps2,如此就可以改变你的primaryprompt及secondaryprompt。

如果你在你的startupfile中想要使用另外的在目前目录的startupfile,你只需要在主要startupfile(globalstart-upfile)写入"ifos.path.isfile('.pythonrc.py'):

execfile('.pythonrc.py')"。

如果你想要在你的script之中使用startupfile的话,你必须在你的script中写入:

importos

filename=os.environ.get('PYTHONSTARTUP')

iffilenameandos.path.isfile(filename):

execfile(filename)

4非正式的Python介绍

在底下的例子里,你可以很容易区别凡是需要输入的地方都会出现prompts(">>>"或"..."),凡是输出的结果则没有。

如果你想要跟着这个教学文件一起做的话,你就得打入所有在prompts之后的指令,凡是没有prompts出现的行就是直译器输出的结果。

值得注意的是,secondarypromt之后如果什么东西都没有,表示这是一个空行(直接按ENTER的结果),也表示这是一个多行指令的结束。

在本文件中的大部分例子,都有加上注释,甚至是那些互动模式下的例子。

注释(comment)在Python中是以"#"之后的东西都是注释(译:

跟Perl一样)。

注释可以自成一行,也可以跟在空格符或是程序代码的后面。

但是,如果"#"是在字符串常数(stringliteral)之中的话,就不代表注释的意义,而只是一个普通字符罢了。

底下是一些例子:

#thisisthefirstcomment

SPAM=1#andthisisthesecondcomment

#...andnowathird!

STRING="#Thisisnotacomment."

4.1把Python当作计算器来用

现在我们来试一试一些简单的Python指令吧。

请先启动Python的直译器并且等待primaryprompt(">>>")的出现。

(应该不会很久的)

4.1.1数字

直译器就好像一个计算器一样:

你可以打入一个表示式(expression),然后直译器会把这个expression的执行结果秀出来。

Expression的语法都很简单直接,一般的运算符号+,-,*以及/的用法就跟其它的程序语言(像是Pascal或C)一样。

你也可以用括号"()"来表示运算执行的先后次序。

例子如下:

>>>2+2

4

>>>#Thisisacomment

...2+24

>>>2+2#andacommentonthesamelineascode

4

>>>(50-5*6)/4

5

>>>#Integerdivisionreturnsthefloor:

...7/3

2

>>>7/-3

-3

跟C语言一样,等于符号("=")其实是表示设定某个值给一个变量的意思。

虽然设定("=")运算本身是有结果值的,但是直译器并不会输出其结果来。

>>>width=20

>>>height=5*9

>>>width*height

900

一个值是可以同时设给许多变量的:

>>>x=y=z=0#Zerox,yandz

>>>x

0

>>>y

0

>>>z

0

浮点数的运算在Python里面也是支持的,如果整数与浮点数(带小数点或e的数)进行运算的话,整数部分会先转换(convert)成浮点数再进行运算。

>>>4*2.5/3.3

3.0303030303

>>>7.0/2

3.5

甚至连复数的运算也支持喔,只需要把虚数部分加上"j"或是"J"在其后就可以了。

如果实部不为零的话,复数的写法就写成"(real+imagj)"。

或者,我们也可以用函数的方式来表示复数为"complex(real,imag)"的形式。

>>>1j*1J

(-1+0j)

>>>1j*complex(0,1)

(-1+0j)

>>>3+1j*3

(3+3j)

>>>(3+1j)*3

(9+3j)

>>>(1+2j)/(1+1j)

(1.5+0.5j)

复数的虚数部分及实数部分的值都是以浮点数(floatpointnumbers)来表示的,如果z代表一个复数的话,你可以很轻易的用z.real以及z.imag得到一个复数的实数部分及虚数部分。

>>>a=1.5+0.5j

>>>a.real

1.5

>>>a.imag

0.5

复数没有办法直接用(float(),int()或是long())转换成浮点数或是整数。

事实上,复数没有直接对应的实数,你必须用abs(z)来得到z的magnitude(以浮点数表示),或是如上所述用z.real直接得到其实数部分。

>>>a=1.5+0.5j

>>>float(a)

Traceback(innermostlast):

File"",line1,in?

TypeError:

can'tconvertcomplextofloat;usee.g.abs(z)

>>>a.real

1.5

>>>abs(a)

1.58113883008

在互动模式之下,最后一个印出来的expression的值会储存在一个特殊变量"_"之中。

这表示,当你用Python的直译器来当作计算器用的时候,想要连续做运算其实是方便许多的。

如下例:

>>>tax=17.5/100

>>>price=3.50

>>>price*tax

0.61249999999999993

>>>price+_

4.1124999999999998

>>>round(_,2)

4.1100000000000003

对于使用者来说,"_"这个变数是一个只读的变数。

你没有办法设定一个值给它,当你这样做的时候,事实上你是重新创造一个同名的变量,但是跟之前系统内建的"_"这个变量是一点关系也没有的了。

4.1.2字符串

除了数字之外,Python也有能力处理字符串(string)。

字符串在Python中有很多种表达方式,它可以放在双括号””之中,也可以放在单括号’’里面:

>>>'spameggs'

'spameggs'

>>>'doesn\'t'

"doesn't"

>>>"doesn't"

"doesn't"

>>>'"Yes,"hesaid.''

"Yes,"hesaid.'

>>>"\"Yes,\"hesaid."

'"Yes,"hesaid.'

>>>'"Isn\'t,"shesaid.'

'"Isn\'t,"shesaid.'

字符串常数(stringliterals)是可以跨越多行的,其表示方法有很多。

如果要换行的话可以用”

}”符号来表示之。

如下例:

hello="Thisisaratherlongstringcontaining\n\

severallinesoftextjustasyouwoulddoinC.\n\

Notethatwhitespaceatthebeginningofthelineis\

significant.\n"

printhello

这个例子会印出以下的结果:

Thisisaratherlongstringcontaining

severallinesoftextjustasyouwoulddoinC.

Notethatwhitespaceatthebeginningofthelineissignificant.

你也可以用成对的三个单引号(""")或双引号(''')来表示字符串。

在此情况下你所打入的ENTER就会直接被解读为换行符号而不需要再用\n了。

print"""

Usage:

thingy[OPTIONS]

-hDisplaythisusagemessage

-HhostnameHostnametoconnectto

"""

这个例子

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1