編者按:Python是一種面向對象、直譯式計算機程序設計語言。Python語法簡捷而清晰,具有豐富和強大的類庫。Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,并且被大量用戶所歡迎的、用途廣泛的語言。最近在微博上看到了 廖雪峰的 Python新手教程,教程中通過幽默的語言和視頻操作詳細描述了Python的安裝以及使用過程,讓初學者可以迅速掌握Python這門編程語言。這么好的文章不敢獨享,分享給大家!
以下為作者原文:
Python是著名的“龜叔”Guido van Rossum在1989年圣誕節期間,為了打發無聊的圣誕節而編寫的一個編程語言。
現在,全世界差不多有600多種編程語言,但流行的編程語言也就那么20來種。如果你聽說過TIOBE排行榜,你就能知道編程語言的大致流行程度。這是最近10年最常用的10種編程語言的變化圖:
總的來說,這幾種編程語言各有千秋。C語言是可以用來編寫操作系統的貼近硬件的語言,所以,C語言適合開發那些追求運行速度、充分發揮硬件性能的程序。而Python是用來編寫應用程序的高級編程語言。
當你用一種語言開始作真正的軟件開發時,你除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,來幫助你加快開發進度。比如說,要編寫一個電子郵件客戶端,如果先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。高級編程語言通常都會提供一個比較完善的基礎代碼庫,讓你能直接調用,比如,針對電子郵件協議的SMTP庫,針對桌面環境的GUI庫,在這些已有的代碼庫的基礎上開發,一個電子郵件客戶端幾天就能開發出來。
Python就為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(batteries included)”。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,也可以作為第三方庫給別人使用。
許多大型網站就是用Python開發的,例如YouTube、 Instagram,還有國內的 豆瓣。很多大公司,包括Google、Yahoo等,甚至 NASA(美國航空航天局)都大量地使用Python。
龜叔給Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復雜的程序。
總的來說,Python的哲學就是簡單優雅,盡量寫容易看明白的代碼,盡量寫少的代碼。如果一個資深程序員向你炫耀他寫的晦澀難懂、動不動就幾萬行的代碼,你可以盡情地嘲笑他。
那Python適合開發哪些類型的應用呢?
首選是網絡應用,包括網站、后臺服務等等;
其次是許多日常需要的小工具,包括系統管理員需要的腳本任務等等;
另外就是把其他語言開發的程序再包裝起來,方便使用。
最后說說Python的缺點。任何編程語言都有缺點,Python也不例外。優點說過了,那Python有哪些缺點呢?
第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。
但是大量的應用程序不需要這么快的運行速度,因為用戶根本感覺不出來。例如開發一個下載MP3的網絡應用程序,C程序的運行時間需要0.001秒,而Python程序的運行時間需要0.1秒,慢了100倍,但由于網絡更慢,需要等待1秒,你想,用戶能感覺到1.001秒和1.1秒的區別嗎?這就好比F1賽車和普通的出租車在北京三環路上行駛的道理一樣,雖然F1賽車理論時速高達400公里,但由于三環路堵車的時速只有20公里,因此,作為乘客,你感覺的時速永遠是20公里。
第二個缺點就是代碼不能加密。如果要發布你的Python程序,實際上就是發布源代碼,這一點跟C語言不同,C語言不用發布源代碼,只需要把編譯后的機器碼(也就是你在Windows上常見的xxx.exe文件)發布出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發布出去。
這個缺點僅限于你要編寫的軟件需要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟件授權的商業模式越來越少了,靠網站和移動應用賣服務的模式越來越多了,后一種模式不需要把源碼給別人。
再說了,現在如火如荼的開源運動和互聯網自由開放的精神是一致的,互聯網上有無數非常優秀的像Linux一樣的開源代碼,我們千萬不要高估自己寫的代碼真的有非常大的“商業價值”。那些大公司的代碼不愿意開放的更重要的原因是代碼寫得太爛了,一旦開源,就沒人敢用他們的產品了。
因為Python是跨平臺的,它可以運行在Windows、Mac和各種Linux/Unix系統上。在Windows上寫Python程序,放到Linux上也是能夠運行的。
要開始學習Python編程,首先就得把Python安裝到你的電腦里。安裝后,你會得到Python解釋器(就是負責運行Python程序的),一個命令行交互環境,還有一個簡單的集成開發環境。
目前,Python有兩個版本,一個是2.x版,一個是3.x版,這兩個版本是不兼容的,因為現在Python正在朝著3.x版本進化,在進化過程中,大量的針對2.x版本的代碼要修改后才能運行,所以,目前有許多第三方庫還暫時無法在3.x上使用。
為了保證你的程序能用到大量的第三方庫,我們的教程仍以2.x版本為基礎,確切地說,是2.7版本。請確保你的電腦上安裝的Python版本是2.7.x,這樣,你才能無痛學習這個教程。
如果你正在使用Mac,系統是OS X 10.8或者最新的10.9 Mavericks,恭喜你,系統自帶了Python 2.7。如果你的系統版本低于10.8,請自行備份系統并免費升級到最新的10.9,就可以獲得Python 2.7。
查看系統版本的辦法是點擊左上角的蘋果圖標,選擇“關于本機”:
如果你正在使用Linux,那我可以假定你有Linux系統管理經驗,自行安裝Python 2.7應該沒有問題,否則,請換回Windows系統。
對于大量的目前仍在使用Windows的同學,如果短期內沒有打算換Mac,就可以繼續閱讀以下內容。
首先,從Python的官方網站 www.python.org下載最新的2.7.6版本,地址是這個:
http://www.python.org/ftp/python/2.7.6/python-2.7.6.msi
然后,運行下載的MSI安裝包,不需要更改任何默認設置,直接一路點“Next”即可完成安裝:
默認會安裝到C:Python27目錄下,但是當你興致勃勃地打開命令提示符窗口,敲入python后,會得到:
‘python’不是內部或外部命令,也不是可運行的程序或批處理文件。
這是因為Windows會根據一個Path的環境變量設定的路徑去查找python.exe,如果沒找到,就會報錯。解決辦法是把python.exe所在的路徑C:Python27
添加到Path中。
在控制面板中打開“系統屬性”,點擊“高級”,“環境變量”,打開“環境變量”窗口,在系統變量中,找到“Path”變量,然后點擊“編輯”:
在“編輯系統變量”的窗口中,可以看到,變量名是Path,在變量值的最后面,先添加一個分號“;”(注意用英文輸入法,千萬不要輸入中文分號),再寫上C:Python27(如果安裝的時候沒有更改過安裝目錄),然后連續點“確定”,“確定”,“確定”把所有窗口都關掉。
現在,再打開一個新的命令行窗口(一定要關掉原來的命令行窗口,再新開一個),輸入python:
看到上面的畫面,就說明Python安裝成功!
你看到提示符>>>
就表示我們已經在Python交互式環境中了,可以輸入任何Python代碼,回車后會立刻得到執行結果。現在,輸入exit()
并回車,就可以退出Python交互式環境(直接關掉命令行窗口也可以!)。
學會如何把Python安裝到計算機中,并且熟練打開和退出Python交互式環境。
現在,了解了如何啟動和退出Python的交互式環境,我們就可以正式開始編寫Python代碼了。
在寫代碼之前,請千萬不要用“復制”-“粘貼”把代碼從頁面粘貼到你自己的電腦上。寫程序也講究一個感覺,你需要一個字母一個字母地把代碼自己敲進去,在敲代碼的過程中,初學者經常會敲錯代碼,所以,你需要仔細地檢查、對照,才能以最快的速度掌握如何寫程序。
在交互式環境的提示符>>>
下,直接輸入代碼,按回車,就可以立刻得到代碼執行結果。現在,試試輸入100+200
,看看計算結果是不是300:
很簡單吧,任何有效的數學計算都可以算出來。>>> 100+200
300
如果要讓Python打印出指定的文字,可以用print
語句,然后把希望打印的文字用單引號或者雙引號括起來,但不能混用單引號和雙引號:
>>> print 'hello, world'
hello, world
這種用單引號或者雙引號括起來的文本在程序中叫字符串,今后我們還會經常遇到。
最后,用exit()
退出Python,我們的第一個Python程序完成!唯一的缺憾是沒有保存下來,下次運行時還要再輸入一遍代碼。
在Python的交互式命令行寫程序,好處是一下就能得到結果,壞處是沒法保存,下次還想運行的時候,還得再敲一遍。
所以,實際開發的時候,我們總是使用一個文本編輯器來寫代碼,寫完了,保存為一個文件,這樣,程序就可以反復運行了。
現在,我們就把上次的'hello, world'
程序用文本編輯器寫出來,保存下來。
所以問題又變成了:用什么文本編輯器?
推薦兩款文本編輯器:
一個是 Sublime Text,免費使用,但是不付費會彈出提示框:
一個是
Notepad++,免費使用,有中文界面:
請注意,用哪個都行,但是絕對不能用Word和Windows自帶的記事本。Word保存的不是純文本文件,而記事本會自作聰明地在文件開始的地方加上幾個特殊字符(UTF-8 BOM),結果會導致程序運行出現莫名其妙的錯誤。
安裝好文本編輯器后,輸入以下代碼:
print 'hello, world'
注意print
前面不要有任何空格。然后,選擇一個目錄,例如C:Workspace
,把文件保存為hello.py
,就可以打開命令行窗口,把當前目錄切換到hello.py
所在目錄,就可以運行這個程序了:
也可以保存為別的名字,比如C:Workspace>python hello.py
hello, world
abc.py
,但是必須要以.py
結尾,其他的都不行。此外,文件名只能是英文字母、數字和下劃線的組合。
如果當前目錄下沒有hello.py
這個文件,運行python hello.py
就會報錯:
python hello.py
python: can't open file 'hello.py': [Errno 2] No such file or directory
報錯的意思就是,無法打開hello.py
這個文件,因為文件不存在。這個時候,就要檢查一下當前目錄下是否有這個文件了。
還有同學問,能不能像.exe文件那樣直接運行.py文件呢?在Windows上是不行的,但是,在Mac和Linux上是可以的,方法是在.py文件的第一行加上:
#!/usr/bin/env python
然后,通過命令:
<code>$ chmod a+x hello.py</code>
就可以直接運行hello.py了,比如在Mac下運行:
用print
加上字符串,就可以向屏幕上輸出指定的文字。比如輸出'hello, world'
,用代碼實現如下:
>>> print 'hello, world'
print
語句也可以跟上多個字符串,用逗號“,”隔開,就可以連成一串輸出:
>>> print 'The quick brown fox', 'jumps over', 'the lazy dog'
The quick brown fox jumps over the lazy dog
print
會依次打印每個字符串,遇到逗號“,”會輸出一個空格,因此,輸出的字符串是這樣拼起來的:
print
也可以打印整數,或者計算結果:
>>> print 300
300
>>> print 100 + 200
300
因此,我們可以把計算100 + 200
的結果打印得更漂亮一點:
>>> print '100 + 200 =', 100 + 200
100 + 200 = 300
注意,對于100 + 200
,Python解釋器自動計算出結果300
,但是,'100 +
200 ='是字符串而非數學公式,Python把它視為字符串,請自行解釋上述打印結果。
現在,你已經可以用print
輸出你想要的結果了。但是,如果要讓用戶從電腦輸入一些字符怎么辦?Python提供了一個raw_input
,可以讓用戶輸入字符串,并存放到一個變量里。比如輸入用戶的名字:
>>> name = raw_input()
Michael
當你輸入name = raw_input()
并按下回車后,Python交互式命令行就在等待你的輸入了。這時,你可以輸入任意字符,然后按回車后完成輸入。
輸入完成后,不會有任何提示,Python交互式命令行又回到>>>
狀態了。那我們剛才輸入的內容到哪去了?答案是存放到name
變量里了。可以直接輸入name
查看變量內容:
>>> name
'Michael'
什么是變量?請回憶初中數學所學的代數基礎知識:
設正方形的邊長為a
,則正方形的面積為a x a
。把邊長a
看做一個變量,我們就可以根據a
的值計算正方形的面積,比如:
若a=2,則面積為a x a = 2 x 2 = 4;
若a=3.5,則面積為a x a = 3.5 x 3.5 = 12.25。
在計算機程序中,變量不僅可以為整數或浮點數,還可以是字符串,因此,name
作為一個變量就是一個字符串。
要打印出name
變量的內容,除了直接寫name
然后按回車外,還可以用print
語句:
>>> print name
Michael
有了輸入和輸出,我們就可以把上次打印'hello, world'
的程序改成有點意義的程序了:
name = raw_input()
print 'hello,', name
運行上面的程序,第一行代碼會讓用戶輸入任意字符作為自己的名字,然后存入name
變量中;第二行代碼會根據用戶的名字向用戶說hello
,比如輸入Michael
:
C:Workspace> python hello.py
Michael
hello, Michael
但是程序運行的時候,沒有任何提示信息告訴用戶:“嘿,趕緊輸入你的名字”,這樣顯得很不友好。幸好,raw_input
可以讓你顯示一個字符串來提示用戶,于是我們把代碼改成:
name = raw_input('please enter your name: ')
print 'hello,', name
再次運行這個程序,你會發現,程序一運行,會首先打印出please enter your name:
,這樣,用戶就可以根據提示,輸入名字后,得到hello, xxx
的輸出:
C:Workspace> python hello.py
please enter your name: Michael
hello, Michael
每次運行該程序,根據用戶輸入的不同,輸出結果也會不同。
在命令行下,輸入和輸出就是這么簡單。
raw_input
和print
是在命令行下面最基本的輸入和輸出,但是,用戶也可以通過其他更高級的圖形界面完成輸入和輸出,比如,在網頁上的一個文本框輸入自己的名字,點擊“確定”后在網頁上看到輸出信息。