站长论坛
标题:
Python快速入门
[打印本页]
作者:
tznktg
时间:
2007-10-10 09:00
标题:
Python快速入门
Python是一门高级的、面向对象的动态编程语言,它与Java和Perl在某些方面有相似之处,可以运行在多种平台上,包括Windows、Linux、Unix和移动设备。15年前Python作为一门应用程序专用的脚本语言被发明,它现在是进行脚本编写和用于动态内容框架的郑重选择。
事实上,它正在被世界上一些动态编程组织所使用,包括NASA和Google等等。Python还是Zope和Django这两个Web开发框架所依赖的语言。它健康的增长速度意味着现在就是您把它加到自己工具箱里去的绝佳时机。本篇快速入门指南将简要介绍Python的基础知识,从变量到控制流语句,再到异常和文件的输入和输出。
在这个系列文章里,我会为您打下一个基础,并提供更多复杂的和具体的代码,以及在真正开发环境里使用Python的建议。
为什么要学习Python?
它具有多种用途:Python可以被用作脚本语言,成为在一个软件系统里将其它组件粘在一起的“胶水”,这和Perl非常类似。它可以被用作应用程序开发语言,就像Java或者C#。它可以被用作Web开发语言,就和您使用PHP类似。不论您需要做什么,您都有机会用到Python。
它是免费的:Python是真正的开放源代码语言,这意味着它可以免费下载和免费使用,再加上多种免费的工具和集成开发环境(IDE),您不花一分钱就可以开始使用Python了。
它非常稳定:Python面市已经超过15年了,这比Java的时间更长,而且即使经过定期的更新,它也只到了2.5版。您现在编写的任何代码将在很长一段时间里能够用在未来的版本里。
它很容易和其它语言一起使用:通过SWIG for C和Jython for Java,将Python代码和C语言或者Java代码集成在一起很容易,这两个工具允许Python代码调用C语言或者Java的函数,反过来也可以。这意味着每当您需要再提高一点速度时,您可以将Python集成在当前的项目里,或者把C语言代码嵌入到Python项目里。
它很容易学习和使用:Python的句法和伪代码很相像,换句话说编写Python代码很简单。这也就使得Python成为进行快速应用程序开发和创建原型的首选,因为它缩短了开发的时间。
它很容易读懂:这种概念很简单,那就是一门很容易编写的语言应该也很容易读懂,这让Python的开发人员能够更容易共同完成工作。
好了,已经听够了,我烦了。我到哪里才能获得它?
很容易,事实上如果您运行的是Mac或者Unix,您就已经有机会使用它了。您只需要调出终端,输入“python”就能够启动解释器了。如果您还没有,或者想要升级到最新的版本,访问它的下载页面就行了。
您可以选择安装ActivePython,这是一个二进制的Python发行版本,能够省掉您很多麻烦事。在大多数平台上,它有一个图形安装程序,您需要做的只是点击一些对话框,设置安装的路径和组件。在Windows下,您可以通过开始菜单启动它的解释器,或者在任何系统上只需要在终端上输入“python”就行了。虽然ActivePython一般要更容易安装一些,但是它往往要比Python官方的发行版滞后。截止到本文编写的时候,它只有用于Python 2.4的版本。
交互模式
现在就是在交互模式调用解释器的时候了,这会启动一个与命令行类似的提示符,您可以在上面运行Python的表达式。它让您能够运行一些简单的表达式,而不需要每次都编写Python。现在就让我们来试一试。
Python 2.5 (r25:51908, Oct6 2006, 15:24:43)
[GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13ubuntu4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello World"
Hello World
>>>
第一和第二行是Python的环境信息,它是针对我的安装环境的,所以您在自己机器上看到的信息可能会有所不同。但是交互模式的用处远远不止显示一个友好的招呼,它还能够在关键的时候变成一个好用的计算器。由于它是编程语言的一部分,所以您可以使用中间变量来进行更加复杂的计算。
>>> 2+2
4
>>> 2.223213 * 653.9232
1453.8105592415998
>>> x,y = 5,20
>>> x + y
25
>>> tax = 52000 * (8.5/100)
>>> print tax
4420.0
>>> "hello" + "world"
'helloworld'
>>> "ring " * 7
'ring ring ring ring ring ring ring '
作者:
tznktg
时间:
2007-10-10 09:00
另外一个需要知道的很有用的Python类型是列表;一个按顺序排列的其他类型的序列。列表可以像字符串一样进行加法或者乘法运算,还能够被索引和切成子列表,叫做切片:
>>> x = [1,2,3,4,5,6,7,8,9,10]
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x + [11]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
>>> x + [12] * 2
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 12]
>>> x[0], x[1], x[9]
(1, 2, 10)
>>> x[1:3], x[4:], x[2:-2]
([2, 3], [5, 6, 7, 8, 9, 10], [3, 4, 5, 6, 7, 8])
>>> x[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
交互模式很适合于进行快速和复杂的计算,但是一旦您开始编写行数较多的语句,或者您想要把程序保存下来供以后使用,那么就要放弃命令行而开始编写Python程序了。幸运的是这很容易,只需要把命令输入到.py文件里再用相同的命令运行它就可以了。
控制流程
就像您最喜欢的编程语言一样,Python利用各种常见的方式通过if、while和for语句来控制程序的执行。在Python里,if语句看起来就像下面这样:
if a > b:
print a
else:
print b
您会看到,和C或者Java这样的语言不同,Python没有使用花括号把语句集中到一起。Python的语句不是通过缩进的距离来集中语句的,语句的主体会一直扩展,只要它下面的语句具有相同或者更大的缩进。
x = 3
y = 4
if x > y:
x = x + 1
y = y + 1
例如,在上面的代码里,x = 3和y = 4就是程序的结尾。
x = 3
y = 4
if x > y:
x = x + 1
y = y + 1
但是在第二个例子里就以y等于5结尾。
Python还有while和for循环。While循环很简单:
while a > b:
a = a + 1
For循环的工作方式可能与您在其它编程语言里使用的方式稍有不同,它不是增加一个计数器,而是在一个序列里重复连续的项目,这和Perl或者PHP的foreach类似。如果确实需要使用计数器,没有问题,您可以使用内置的range(范围)函数来生成一个数字列表,就像下面这样:
for i in range(10):
print i
如果您需要它,您可以通过break或者continue语句更加细致地控制Python里的循环。Continue语句会把执行跳到循环的开头,而break语句会过早地结束循环。
for x in range(10):
if x % 2 == 0:
continue
if x > 6:
break;
print x
这段代码会产生下面的输出:
1
3
5
一个真正的程序:cat
现在我们手头已经差不多有了所需要的各种工具来编写一个小型但是完整的程序,例如Unix上常见的筛选器cat(或者Windows上的type程序)。Cat这个筛选器会接受文本文件的名字作为参数,并打印其内容,或者如果没有给出文件名,就把用户输入的内容显示在终端上。但是在能够编写这个程序之前,我们需要引入一些新的东西:
作者:
tznktg
时间:
2007-10-10 09:00
打开和读取文件
在Python里,文件就是对象,这就像其他类型一样,具有用于读取和编写的方法。例如,我们有一个叫做lines.txt的文本文件,里面有下列内容:
line1
line2
line3
我们查看这个文件内容的方法主要有两种,按字符或者按行。下面的代码就显示了这两种方式的不同:
>>> lines1 = file("lines.txt")
>>> lines1.read()
'line1 line2 line3 '
>>> lines2 = file("lines.txt")
>>> lines2.readlines()
['line1 ', 'line2 ', 'line3 ']
文件对象的read()方法会把文件读取到一个字符串里,而readlines()方法则返回一个字符串列表,每行一个字符串。对文件对象进行更加精细地控制是有可能的,例如一次不把整个文件读取到内存里。更多信息请参看Python的库文档(
http://docs.python.org/lib/bltin-file-objects.html
)。
导入模块和查询命令行参数
Python带有大量的库模块,其中含有用于常见任务的函数,例如字符串和文字处理,对常用Internet协议、操作系统操作和文件压缩的支持等。在这个网页上(
http://docs.python.org/lib/lib.html
)可以找到标准库模块的完整列表。为了使用这些函数,您必须把它们的模块导入到程序的命名空间里,就像下面这样:
>>> import math
>>> math.sin(math.radians(60))
0.8660254037844386
在这个例子里,您可以看到我们利用模块的名字(也就是math.sin)来参考导入的函数。如果您准备大量使用模块而不想麻烦地在每次使用它的时候都输入模块的名字,那么您可以像下面这样导入模块:
>>> from math import *
>>> sin(radians(60))
0.8660254037844386
在另外一个模块里可以使用命令行参数:sys,通过它可以访问Python的解释器。命令行参数被保存在这个模块中一个叫做argy的列表里,下面的例子说明了一个每行打印输出所有命令行参数的简单程序。
import sys
for argument in sys.argv:
print argument
在带有多个参数运行时,这个程序会生成下面的输出结果,第一个参数总是脚本的名字。
% python args.py many command line arguments
args.py
many
command
line
arguments
从控制台输入
从控制台输入的方式在图形界面和Web内容发布时代看起来似乎有点古老,但是这种方式对于任何设计用来使用管道的程序是必需的。Phython有很多方法,能够根据您需要对标准输入缓冲区进行控制的量来处理输入,但是在大多数情况下,简单调用raw_input()就可以完成raw_input()的工作,就好像C语言或者Java里的readline程序一样,捕捉每一个字符直到newline并返回一个含有它们的字符串,就像下面这样:
name = raw_input()
print "Hello ", name
用异常来处理错误
只要您是程序员,碰到运行错误就在所难免;即使最优秀、最强健的代码也有可能产生用户错误、硬件故障或者是您没有考虑到的状况。由于这个原因,Python就像大多数现代语言一样,利用异常来提供运行错误处理机制。异常具有自己的优势,它们可以在程序的一个级别出现,然后在堆栈里被捕捉到,这意味着在深层无法获取的错误可以在别的地方来处理,而不会造成整个程序的崩溃。在Python里使用异常很简单:
try:
filename = raw_input()
filehandle = file(filename)
print len(filehandle.readlines())
except EOFErrror:
print "No filename specified"
except IOError:
print filename, ": cannot be opened"
作者:
tznktg
时间:
2007-10-10 09:01
在这个例子里,一段代码被放在try语句的里面,这表示在执行这段代码期间异常可以出现。然后有两种类型的异常被捕捉到,第一种是EOFError,它在raw_input()调用到达newline之前的最后一个行字符的时候出现;第二种是IOError,它在打开文件出错的时候出现。无论是在哪种情况下,如果出现异常,那么文件中打印行号的那一行都不会被访问到。
如果出现的是其他的异常而不是上面提到的这两种,那么它们就会被传递到高层的堆栈。异常是处理运行错误的一种便捷方式,因此您会很快就希望在自己的函数里使用它们,而且您会很高兴地知道这在Python里很容易使用。
try:
raise ValueError, "Invalid type"
except ValueError:
print "Exception Caught"
最终的产品
既然您已经有了编写筛选器所需要的所有工具,那么就让我们来完整地看看这个程序吧。在开始看程序之前,利用学到的知识想一想每一行用来完成什么任务:
import sys
if len(sys.argv) < 2:
while 1:
try:
line = raw_input()
except:
break
print line
else:
for filename in sys.argv[1:]:
try:
file_contents = open(filename).read()
print file_contents,
except IOError:
print "Error: Cannot open", filename
这个程序很简单,如果没有命令行参数(当然,除了脚本名),那么程序就会开始从控制台读取内容,直到被中断。如果有命令行参数,那么它们就会被打开并按顺序打印出来。
看到没有,您就轻轻松松学会了Python。在下一篇文章里,我将讨论如何开发一个寻找用在Web页面上的所有图片的Python程序。
欢迎光临 站长论坛 (http://www.tzlink.com/bbs/)
Powered by Discuz! X3.2