对于许多程序员来说,Python的大名应该有所耳闻。而对于Python的评论大多褒贬不一。有的甚至说Python是以其慢速运行而闻名于世。在此我并不是要去评论别人的对于错,我只是站在一个比较客观的角度来谈谈Python这一计算机语言。
Python是一种解释性语言,而且属于OpenSource的项目。但是,你可以将其用于商业用途。并且可以将其放在商业的产品光盘中一同发售。当然,人们也可以从www.Python.org或者OpenSource的网站上免费获得其安装程序或者源代码。Python最初是在苹果计算机上被编译成功的,但现在他已经可以运行于世界上主流的操作平台之上了。他不只有Windows版本的。同时还有Linux,Unix等很多平台上都可以使用他,在RedHat9中,还将其作为开发必须的一项语言被安装。对于Python的代码类型,基本可分为3种,分别是字节代码,二进制代码,优化代码。他们的后缀名分别是.py .pyc .pyo 这些代码都可以直接运行。无需做任何的编译或者连接。而在使用这些类型的代码上,Python会更具不同的情况选择不同的类型。如下:
#!/usr/bin/python
#MyPython.py
class python:
def __init__(self):
self.name='python'
def yourname(self):
print self.name
#!/usr/bin/python
#main.py
import MyPython
py=MyPython.python
py.yourname()
在运行时,Python会检测在main.py的当前目录中有没有MyPython.pyc文件,如果没有那么导入MyPython.py并且同时生成MyPython.pyc为下次更快的导入做好准备。这样,可以减少不少初始化的时间。而且,这一切无需用户介入,Python会自动完成。对于其语法,不的不承认,他的语法是众多其他语言中相对简单的,他排除了许多繁琐的思索。如下:
#!/usr/bin/python
a=2003
print a
a='Hello python'
print a
a=[2,0,0,3]
print a[0]
以上的代码可以被正常运行,其结果如下:
2003
Hello python
2
如果是C++至少需要声明3组变量。而对于Python一个变量就可以了。不但如此,Python的对代码块的管理也有他的独特之处。下面是Python与C++对于同样一个While循环的比较
#!/usr/bin/python
#python source
a=0
while (a<=10):
a=a+1
print 'The number is '+a
print 'while is end'
//Build by G++ or VC++
//C++ Source
#include <iostream>
int main()
{
while(a<=10)
{
a=a+1;
cout<<"The number is "<<a<<endl;
}
cout<<"while is end";
return 0;
}
对于以上代码的比较,可以看出,C++等语言是以{}来管理块的,而Python是以缩进来管理的。这样做的确有他的优越性。相信许多程序员都有过漏去{}的经历。如果,使用的编译器或者解释器优秀的话,你的确可以非常容易的加上漏去的{}。但是,如果不是这样,我想你会在复杂的代码中开始漫游了。因为,可能你的编译器会告诉你一个错误的错误信息,这个错误的位置可能会离你真正错误的地方很远(大概有十万八千里吧)。相对于此,以缩进管理方式的Python来说,程序员几乎不用考虑这种问题。其次以缩进方式区分块的Python在进行复杂的嵌套中,Python代码就显得明了许多了。如下面的Python与C++在嵌套上的比较:
#!/usr/bin/python
#python source
class python:
def Hello(self):
print 'Hello'
def count(n):
in=0
while(in<=n):
in=in+1
print in
//buile by G++ or VC++
//C++ Source
#include <iostream>
int main()
{
class python
{
public:
void Hello(void)
{
cout<<"Hello"<<endl;
}
void count(int n)
{
int in=0;
while(in<=n)
{
in=in+1;
cout<<in<<endl;
}
}
};
return 0;
}
相比较来看,Python的代码更能分清其层次,而对于C++这样的代码虽然能够编译成功。但是,对于其日后的维护,会造成无尽的痛苦。同时,就在我刚才写C++Source的时候,也差点漏了};。由此,可以看出Python的语法简洁。同时,他的出错能力也非常强。在一般情况下,Python的解释器能够准确指出错误的位置和原因。如下面的代码:
#!/usr/bin/python
import A
a=0
print _a
_a=b
运行以上的代码Python将抛出如下的错误信息:
Traceback (most recent call last):
File "E:\source.py", line 1, in ?
import A
ImportError: No module named A
Traceback (most recent call last):
File "E:\source.py", line 3, in ?
print _a
NameError: name '_a' is not defined
Traceback (most recent call last):
File "E:\source.py", line 4, in ?
_a=b
NameError: name 'b' is not defined
可以很容易的看出错误的原因和位置。在这种机制中当你调试复杂的程序时,你不用担心不能快速的解决问题。你只要按照Python的错误提示,一步步修正就可以了。
对于Python的应用范围,我个人大概的将其分为三类。
第一类时软件类,这我想不说大家也应该很清楚的。相对于C++等语言,Python的优势在于他的快速开发和代码开放。对于Python,你可以开一个记事本或者Kwriter来编写代码,然后保存,运行就可以了。即使再复杂的代码也是如此。这大大减少了开发周期,加快了开发速度。相对于传统的 编辑,编译,连接运行。Python可时少了不少的麻烦。三步并两一步。又由于Python的简洁的代码和短暂的培训时间,所以,对于软件的开发和维护都变得非常容易。而Python的代码解释性,对于用户而言,只要安装有Python以后,对于Python的软件就不必再安装Python了。对软件直接运行也可以,有一劳永逸的感觉。而对于开发者来说,产品的更新和修复更加容易。或许只要使用用户浏览一张网页的时间,就可以从根本上修复产品中的Bug。这要感谢Python的代码重用和灵活的代码管理。而对于再用户处发生的错误,开发者可以更具Python自带的错误诊断来得知情况。而且,在网上有很多有关Python的代码库,而且,这些都是免费的,对于开发的企业来说,可以节省一笔相当可观的开发资金。所以说,Python在软件市场也有其的特点和市场。
第二类是网络类,随着现代网络的飞速发展。各种网络服务器脚本纷纷涌现。Perl,PHP,ASP等等都占一席之地。而Python自然也能应用于此。相对于PHP和ASP。Python能够实现从服务器软件到服务器脚本的所有功能。其中ZOPE服务器软件便是很好的例子。对于网络,Python有一组模块是专门针对它的。其中有Socket CGI和SocketServer等等,当然,Python也能够和一些大规模数据库很好的支持。甚至可以直接与他们连接无需通过其他的中间插件。应用Python强大的支持和Python简洁的代码。相信你可以在断时间内写出出色的动态网站。
第三类是教育类。Python最初就是为了教育而开发的一种语言。应用于教育当然是情理之中的事情。在程序员中,如果你询问他们的入门语言是什么,我想许多都会说Basic更多的人说VB。其实,Basic并非最好的入门级语言。暂且不论Basic没有OOP的编程思想。在代码运行的时候还要编译和连接,虽然Basic和Python一样是解释性语言。而其语法实在让人无法忍受,比如在判断语句后要加then代替C++中的{}的确有些落伍了。对于学习编程更主要的是学习如何去用语言去思索。明白程序是如何运作的,更要知道,一些程序的基本编程思想。这一切是Python所能做到的。Python的编程思路和语法更像C++而且,支持类编程和代码重用。不论从何种角度来看,Python在让初学者了解编程是怎么一回事上是最好的语言。而Python另一个功能——即时运行。也为初学者学习编程增加不少的方便。如下在运行Python解释器后,如下运行:
>>>print 'Hello Python'
Hello Python
这个对于初学者很重要,因为他们可以运用这种机制一行行输入代码,看看代码发生了什么作用。了解程序是如何运行的。这个对于深入编程是很重要的。而且,对于初学者的疑问,这种机制可以方便的解决其疑问。而对于初学者的独特想法,这种机制能够让初学者更快的得到这种想法的可行性。在资金上,如果对于普通的中小学高中等为了让学生学一些编程思想就花几千元卖一套VisualBasic实在是大材小用了。而且,VisualBasic必须运行于Windows这样,大家又要为每台计算机花一千多卖操作系统。这样一来教学机构可是要花费相当可观的一笔资金。而Python是免费的,许多资源都是免费的。而且Python也可以运行于免费的Linux系统上。所以,总体来说比使用VB的资金投入就更小了。
当然,任何事物都有它的两面性。人们不是常说,科学是一把双刃剑么?不错Python也有他不足的地方。首先,是函数的定义,代码如下:
def myfunction(number):
return number+10
这段代码只看函数的定义时不能知道myfunction返回是什么类型的数据,而number也不知道是什么数据类型。只有深入代码本身才可以了解这一切。再看看如下的代码:
#!/usr/bin/python
class myclass:
def __init__(self):
self.name='myclass'
def nothing(self):
print 'end'
看来这个代码一切正常,nothing方法什么都不做。但在运行时Python会提示nothing有错误,并会波及到下面的代码。所以,不得不如此定义:
#!/usr/bin/python
class myclass:
def __init__(self):
self.name='myclass'
def nothing(self):
return
print 'end'
同时,我在最初所说的速度慢也是一个事实。不过,根据Python官方网站的报道。最新的Python2.3在速度上由于采用新的算法。所以,比以前的版本快30%左右。对于Python自带的GUI模块Tkinter,其中文支持相当不好。必须对其中显示和接收的中文转成unicode的才可以。不过,由于Python的众多库的支持。GUI也可以用wxPython写。他对中文的支持非常好,而且功能非常强大,几乎可以取代Python自带的Tkinter成为流行的GUI。最后是Python没有优秀的IDE环境,虽然这对于熟悉Python的人来说并不重要,但是对于吸引人们使用Python的确少些说服力。
对于Python的未来,我觉得非常看好。首先,Python的代码运行机制非常类似于Java语言。同样可以拥有字节代码和二进制代码的运行方法。甚至比Java在代码的运行上更灵活。再来,Python的语法更为稳定,由于Python是一个解释器中的老前辈,所以,在多年的开发中成为一个相对稳定和完善的语言。Python的模块也不像Java那么复杂,编写也更为快捷。所以,Python未来将向Java这一方向发展。可能将会用于移动设备的开发。同时,网络的支持也自然会提高,虽然,Python的网络支持已经相当完善甚至超越了现在许多的网络脚本。但是,网络的日新月异Python必须更加更新才可以。比如XML技术,虽然现在的Python也支持,但是XML模块的运行速度还是比较慢。在程序的开发上,Python有其优势。不单是由于他的本地程序的支持非常好,对于网络的支持也超乎许多人的意料。在教学方向,Python以其简洁易懂的代码能够成为学习就算机语言的流行语言之一。
以上只是我使用Python的一些看法。当然,只是我一个人的一面之见是会有错误的。所以,如果有任何不足的地方还请各位多多指点小生。我的看法:不论是思想还是程序,只有在不断的交流中才能完善。
STUDIO软件开发组
站长:北斗星君(黄庠魁)