#!/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)
void count(int n)
{
int in=0;
while(in<=n)
}
};
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了。對軟件直接運行也可以,有一勞永逸的感覺。而對于開發者來說,產品的更新和修復更加容易?;蛟S只要使用用戶瀏覽一張網頁的時間,就可以從根本上修復產品中的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這一方向發展??赡軐糜谝苿釉O備的開發。同時,網絡的支持也自然會提高,雖然,Python的網絡支持已經相當完善甚至超越了現在許多的網絡腳本。
但是,網絡的日新月異Python必須更加更新才可以。比如XML技術,雖然現在的Python也支持,但是XML模塊的運行速度還是比較慢。在程序的開發上,Python有其優勢。不單是由于他的本地程序的支持非常好,對于網絡的支持也超乎許多人的意料。
在教學方向,Python以其簡潔易懂的代碼能夠成為學習就算機語言的流行語言之一。
以上只是我使用Python的一些看法。當然,只是我一個人的一面之見是會有錯誤的。所以,如果有任何不足的地方還請各位多多指點小生。我的看法:不論是思想還是程序,只有在不斷的交流中才能完善