Python程式語言快速上手教程

來源:互聯網
上載者:User

本來打算從網上找一篇入門教程,但因為Python很少是程式員的第一次接觸程式所學的語言,所以網上現有的教程多不是很基礎,還是決定自己寫下這些。

如果沒有程式基礎的話,可能會覺得本文涵蓋的內容有點多。對照大學裡面常教的C語言的教學速度,本文大約有四五個課時的內容;對照網上程式類的視頻 教程,大致相當於兩三個小時的內容;對於翻一本程式書籍,大約相當於翻一個小時書。也因此,如果有深入學習的打算的話,為了效率還是推薦看書。

如果暫時不能理解本文中的一些內容也沒關係,因為都是一些經常會用到的基礎知識,在實際編寫代碼的過程中會一直遇到。後面會大約有兩三篇關於實用代碼編寫的文章,可以選擇那時再對這些知識加深印象。

但如果是覺得技術對於SEO沒有必要而對本文沒有興趣的話,試問打算將SEO作為自己多久的職業?如果打算真正將它做好的話,在至少有上萬小時需要用去的精力裡面,從裡面抽幾十幾百小時去學習些技術應該是合情合理的。

若因文章有什麼沒表述清楚而導致無法理解,請務必幫忙提出。第一次寫程式類的較完整的教程,難免有疏漏之處。

為什麼學習Python

如果決定學習一些技術來輔助SEO的話,對於程式語言至少在我看來Python可以算是首選。

其一、Python入門相對簡單

如果誰在大學課程裡面接觸過C語言但對程式瞭解不多的話,或許會覺得程式就是像C那麼麻煩,其實不然,學了具有美感的Python代碼以後就會知道C代碼又臭又長。就算完全沒接觸過程式也沒關係,Python本身就適合作為程式的入門選擇。

我雖然很早就有寫程式,但那時是興趣使然,從未深入過,正式接觸程式是接觸SEO以後的事情,大約學了幾個小時以後就能寫些簡單的採集程式,到現在只要能想到需求就很少有技術無法實現的。所以沒什麼有基礎沒基礎的問題在,無論什麼的基礎都是需要自己打下的。

其二、Python代碼非常靈活

來看一段非常常用的程式碼範例,如果沒有程式基礎的話會看不懂這些代碼,但暫時沒關係,看程式碼數也能對比出代碼簡潔性。

PHP: 複製代碼 代碼如下:<?php
$list_1 = array(1,2);
$list_2 = array();
foreach ($list_1 as $current) {
array_push($list_2, $current+1);
}
print_r($list_2);
?>

Python: 複製代碼 代碼如下:list_1 = [1,2]
list_2 = [current+1 for current in list_1]
print list_2

Python代碼的第2行叫做“列表推導”,它提供了不少像這樣便利的語言特性可以使得代碼非常簡潔。

儘管文法靈活並非總是好事,靈活的代碼寫法意味著每個人寫出來的代碼往往風格迥異,會把團隊成員的水平差距拉大而不利於團隊開發。但對於小型SEO應用需求一般都是個人開發,此時代碼的書寫效率比起團隊合作性而言更重要。

其三、Python使用廣泛

Python在程式語言裡面受歡迎的程度大約是5-10位左右。排在其之前的有C#, Java, PHP等,但很多時候不是因為它們更強大,而是因為前面提到的原因,它們的代碼顯得相對不是很靈活從而適合團隊開發,所以才更受歡迎。

一般來說,多數提供API的網路服務都會提供Python介面(如百度網盟、Amazon雲端服務等),而另一些比Python某些方面更強的語言則 沒有這麼廣泛的支援度,比如代碼更加靈活一些的GO語言。(多數Web服務的API介面有:C#、PHP、Java、Python、Ruby、Perl, 所以一般情況下選擇其中至少一種語言學習)

Python的模組也非常多,有許多既有模組意味著可以少做很多事情。比如下載一個網頁,在很多語言裡面都需要5-10行代碼,而Python僅需兩行:

複製代碼 代碼如下:import urllib2
print urllib2.urlopen('http://g.cn/').read()

另外有意思的是以前Google限制過自己內部使用Python語言進行開發。原因有二:一、因為Python編寫效率高,之前被其過多的運用;二、Python語言的執行效率較慢。而對於SEO,卻正是最需要注重編寫效率而一般無需在意執行效率的。

至此廢話了不少,但興趣往往是學習的最好動力,希望沒有白白廢話。

安裝環境與配置

Python程式和普通程式略有不一樣,通常情況下沒有可以直接在Windows下面雙擊啟動並執行exe檔案,雖然並非無法編譯成exe但相對較麻煩,實際運用中很少會去如此操作。

Python程式就是一段文字代碼,儲存到尾碼名為.py的檔案裡面。在電腦安裝了Python的運行環境以後,方可以運行py檔案。(其實很多程式都依賴於運行環境,最常見的是.net Framework,只不過這個在Windows上預裝了,一般感覺不到罷了)

對於Windows系統需要安裝運行環境,Linux系統則一般內建Python無需配置。

Python運行環境的下載連結為:http://python.org/getit/

在這個頁面上,通常是在第一個下載連結,尋找並下載:Python 2.7.x Windows Installer (Windows binary — does not include source)

需要注意的是下載的最好是2.7.x版本(x代表任意數值,2.7這個大版本都是類似的),而Python 3以上的版本和先前版本區別較大,對於初學者不建議使用。

下載後安裝,沒什麼需要特別注意的地方。一般安裝在預設路徑,即c:\python27\,不要將之放在目錄層級很深的檔案夾,不然啟動並執行時候比較麻煩。

作業系統

前面已經提到,Python可以在Windows及Linux系統下運行,它還支援更多系統,如Mac等,甚至也可以在越獄過的iPhone等裝置上面編寫並運行Python程式。

但因為Python的一個主要強大之處在於其模組的支援,有了模組就可以方便的做很多事情。而模組的配置在Windows等系統裡面往往有些麻煩,Linux往往容易得多,所以過了入門階段以後,推薦在Linux環境下進行開發。

Linux環境的搭建有三種選擇:

1.本機安裝Linux系統。適合在Linux下長期工作的人,需要對Linux的基礎知識有一定的瞭解。主要缺點是總有些Windows裡面才能啟動並執行程式,偶爾需要切換系統。我主要是在這樣的環境下工作。

2.在Windows裡面安裝VMware等虛擬機器,然後在虛擬機器裡面安裝使用Linux。適合初學者,但因為虛擬機器的關係,除非電腦配置很好, 不然兩邊系統的運行效率都會比較低下。且虛擬機器不利於塑造學習Linux的氣氛,因為用虛擬機器的時候碰到問題,多數人會傾向用Windows解決而非用 Linux,那麼就較難熟悉它。個人不怎麼推薦這種選擇。

3.買一台Linux的VPS,使用SSH遠程操作。主要優點是在工作及家裡都可以很方便的連上伺服器,不用每天把程式、資料等隨著隨身碟之類的帶來 帶去;也可以在不影響Windows使用的情況下使用Linux。但缺點同樣明顯,沒有圖形介面對入門者不友好;因為網路延時的關係,寫代碼的效率經常受 影響等等。對於初學者,個人比較推薦這個解決方案。

至於VPS的購買,推薦Linode或PhotonVPS等,大約每月50-150RMB能買一個可以用來書寫運行普通程式的VPS,也可以同時在上面放兩三個小網站。

Linux有很多發行版可以選擇來安裝,如Ubuntu,Fedora等。

對於在本機上搭建Linux環境時,因為擁有圖形介面,若是工作為主要目的,推薦安裝Fedora。它和伺服器最常用的CentOS系統同出Red Hat系,很多地方比較接近,熟悉它對於熟悉CentOS也有較大助益。

如果在本機安裝,且有時會將Linux系統用作觀看視頻等娛樂之用的話,推薦Ubuntu,它在日常使用方面略勝Fedora一籌。

對於VPS上面搭建Linux,則推薦CentOS系統,因為它使用最廣泛,所以各種軟體對其的支援往往更好。

對應Linux環境解決方案1,一般使用隨身碟載入iso鏡像進行安裝;對於解決方案2,一般直接由虛擬機器軟體載入iso鏡像安裝;對於解決方案3,一般VPS都可在其後台直接選擇作業系統無需自己安裝,比較方便。

編輯器

書寫代碼前面首先需要有一個合適的編輯器。儘管Windows內建的記事本也不是不可以使用,但編寫程式時會非常不順手。

對於Windows系統的編輯器,較簡單的我比較推薦Notepad++,當然也可以選擇更流行的UltraEdit。

也可以使用IDE,這是用來開發軟體項目的Integration Environment的統稱,它在開發大型項目時具有較大優勢,但在處理小型需求時可能顯得略有不靈活。IDE裡面比較好的有Eclipse,加上PyDev外掛程式即可開發Python程式,它在Windows和Linux裡面皆可以使用。

如果平常需要書寫的代碼量很大,或是對自己的學習能力較有自信的話,對於Linux推薦Vim,Windows則推薦gVim(Vim的圖形介面)。它和普通編輯器書寫代碼有極大的不同之處,往往需要幾天的學習時間與幾個月的熟練時間,但書寫代碼的效率一般可以快不少。

開始編寫程式

Hello World!

“Hello World”最早的出處是電腦領域的最經典書籍之一——《The C Programming Language》,後來被廣泛沿用。”Hello World”程式的目的只是在螢幕上輸出一個”Hello World”,儘管很簡單,當它作為每個人第一個所寫的程式時還是有著較大的意義。

開啟編輯器,輸入一行:(友情提示:複製粘貼不利記憶) 複製代碼 代碼如下:print "Hello World!"

完畢。儲存檔案到c:\hello.py(路徑隨意)。

按Win + R快速鍵,開啟“運行”,輸入CMD,斷行符號,開啟命令列提示符。(Linux圖形介面的話是Ctrl+Alt+T來開啟終端)

輸入:

(Windows)
c:\python27\python.exe c:\hello.py

(Linux)
python 路徑/hello.py

可以看到程式運行並顯示了一行“Hello World!”。至此,第一個程式完成了。

變數與賦值

複製代碼 代碼如下:s = 'Hello World!'
print s

程式輸出:
Hello World!

上述代碼,s稱為變數;第一行所做的操作叫做賦值。

再來個例子加深印象:

複製代碼 代碼如下:a = 1
b = 2
print a + b

程式輸出:
3

函數

複製代碼 代碼如下:def hello(name):
s = 'Hello ' + name + '!'
return s
print hello('world')
print hello('semwatch')

程式輸出:
Hello world!
Hello semwatch!

函數是用來封裝一系列的行為的,通過傳遞一個或多個參數進入函數(def hello(name)),然後函數再返回一個計算之後的數值(return s)。

於是print hello(‘world')就相當於輸出hello函數運行之後的運算結果,即輸出Hello world!

可以再看這個例子來加深理解:

複製代碼 代碼如下:def add_num(a, b)
return a + b
print add_num(1, 2)
print add_num(2, 3)

程式輸出:
3
5

迴圈及判斷

後面提到的for迴圈、while迴圈及if判斷,這是所有程式語言裡面的基礎,務必完全掌握。

(Python裡面沒有其他語言常有的do while迴圈,也沒switch case判斷)

for迴圈:

PHP範例: 複製代碼 代碼如下:for($i=0;$i<10;$i++) {
echo "$i\n";
}
?>

之所以這裡舉一個PHP的例子,是因為多數程式語言的for迴圈都和該例是類似的文法,先以這種形式舉例。

應該較容易理解,給變數i賦值0($i=0),每次迴圈的時候+1($i++),在i小於10的時候就一直迴圈($i<10),所以迴圈10次。

echo語句負責把每次迴圈時候的數字輸出,此例中會依次輸出0-9這些數字,不過沒必要研究echo文法,只需理解for迴圈的概念就行了。

Python的for迴圈文法比較另類,但也很簡潔:

複製代碼 代碼如下:for i in range(10):
print i

這兩句語句會和前面一樣,依次輸出0-9這些數字,且print語句會自動每次輸出後換行。

while迴圈:

複製代碼 代碼如下:i = 0
while i < 10:
i = i + 1
print i

代碼的意思是,先給i賦值0,然後當i小於10的時候,不斷執行迴圈體裡面的內容。此處即為將i的值加1,並輸出i。

運行後輸出的結果依次是0-9幾個數字。

if判斷:

複製代碼 代碼如下:i = 1
if i < 2:
print "i<2"
else:
print "i>=2"

程式輸出:
i<2

程式先給i賦值1,然後判斷i是否小於2,如果小於2則輸出i<2,不然輸出i>=2。

另外等於和不等於的判斷符號是如下的:

複製代碼 代碼如下:i = 1
if i == 1:
print "i=1"
elif i != 1:
print "i!=1"

等於是==符號,這點容易混淆。使用=符號在多數語言裡面會產生一些問題,而在Python裡面會直接視為代碼錯誤。而不等於符號是!=,也可以使 用<>,但<>號在如今的程式語言裡面使用越來越少,也可能在Python的日後版本裡被棄用,所以一般推薦使用!=。

上面代碼中第三行elif是else if的簡寫。意為如果i==1沒有滿足的話,就繼續判斷i!=1是否滿足。

列表與字典

多數語言都有“數組”,它是一個存著多個數值的變數。而Python沒有,類似的是“列表”和“字典”等。

如果有PHP基礎的話,看下以下對比就可以很快理解它們:

列表:

PHP

複製代碼 代碼如下:$l = array(1,2,3);
?>

Python

複製代碼 代碼如下: l = [1,2,3]

字典:

PHP

複製代碼 代碼如下:$d = array(
'a' => 1,
'b' => 2,
'c' => 3,
);
?>

Python

複製代碼 代碼如下:d = {
'a': 1,
'b': 2,
'c': 3,
}

如果沒有其他語言基礎的話,通過實際代碼來理解列表及字典或許更合適。

列表: 複製代碼 代碼如下:l = [1,2,3]
for current in l:
print current

啟動並執行結果會依次輸出1-3這些數字。(Python裡面沒有PHP的foreach文法,全都使用for完成)

字典:

複製代碼 代碼如下:d = {
'a': 1,
'b': 2,
'c': 3,
}
for key in d:
print key
print d[key]

啟動並執行結果會輸出a1b2c3,分六行顯示。

解釋下字典,字典的結構是這樣的:

dict = {key: value, key2: value2, …}

for迴圈可以在每次迴圈的時候,把相應的key賦值給變數,如果要訪問對應的value,就需要使用類似dict[key]這樣的,即尋找dict裡面對應key的value。

類似的,列表也有類似操作,如:

複製代碼 代碼如下:l = [1,2,3]
print l[1]

運行輸出:
2

它的意思是輸出資料行表l的第1項。需要注意的是,對於絕大多數程式語言,都是從第0項開始算的。即這裡l[0]是1,l[1]是2,l[2]是3。

字串及切片

字串如其名,是一串字元。如print “Hello World!”就是輸出字串Hello World!。Python裡面的字串比較特殊,它和列表一樣屬於序列類型,很多使用方法上和列表一樣。

複製代碼 代碼如下:s = "abc"
print s[1]

運行結果會輸出b。

根據這樣的特性,可以衍生出一些簡潔的代碼運用。比如要輸出”Hello World!”這個字串的前5個字元的話,多數語言會和PHP類似是這樣做的:

複製代碼 代碼如下:$s = "Hello World!";
echo substr($s,0,5);
?>

而Python簡單得多:

複製代碼 代碼如下:s = "Hello World!"
print s[:5]

兩段代碼都會輸出Hello。

其中的s[:5]使用了Python的“切片”特性,完整的寫法應該是s[0:5],但0可以省略,這裡代表著輸出這個序列索引號從0開始到5之前的內容。

當然列表也是可以使用切片的,如:

複製代碼 代碼如下:l = [1,2,3]
print l[1:]

運行後輸出[2,3]。

意味著從索引號1開始,輸出到列表的最後。

知識點匯總

將前面所有的內容加上一些新的知識點,融合成一段代碼。認真思考每一個輸出的結果是如何出來的,就能更好的理解這些。因為知識點比較多,可以暫時不求甚解,但這些都是任何程式語言裡面都會有的基礎內容,最終是必須掌握的。

代碼中,#號意味著注釋的開始,這些內容不會被運行。

另外代碼的第一行聲明了代碼編碼為utf-8。因為注釋中出現了非英文字元,所以就需要指定編碼,不然程式會報錯。

複製代碼 代碼如下:# -*- coding:utf-8 -*-
str_1 = 'Hello'
str_2 = 'World!'

#以下語句都會輸出Hello World!

#print語句中的逗號意味著不換行,而是用空格間隔它們
print str_1, str_2

#以下和上面一句是同樣的效果
print str_1,
print str_2

#同樣可以用字串串連符
print str_1 + ' ' + str_2

#也可以用格式化操作符,它比前者更常用
#會將後面的變數依次替換到前面的%x上面
#%s指定替換為字串,若替換整數則為%d,小數%f
print '%s %s' % (str_1, str_2)

#會輸出00 11 22
for i in range(3):
print '%d%d' % (i, i),
print '' #輸出一個空的字串用於換行

#會輸出11 22 33
for i in range(1, 4):
print '%d%d' % (i, i),
print ''

#會輸出00 22 44
for i in range(0, 5, 2):
print '%d%d' % (i, i),
print ''

#會輸出0 1 0 1 0
i = 0
while i < 5:
i += 1 #等同於i = i + 1
if i % 2==0: #如果i除2的餘數為0
print 1,
else:
print 0,
print ''

#會輸出c
i = 3
if i==1:
print 'a'
elif i==2:
print 'b'
elif i==3:
print 'c'
else:
print 'error'

#會輸出1 2 3 3 4 4 5 5 6
for i in range(10):
i += 1
print i,
if i < 3:
continue #如果i<3則中斷該次迴圈,從迴圈體的頭部重新運行
elif i > 5:
break #如果i>5則中斷整個迴圈
print i,

最後

雖然現在提及的是程式,但SEO要涉及的技術遠不僅是程式。儘管很想從頭開始提及所有應該學習的方面,無奈這是幾本書都寫不完的,單用幾篇文章更無法窮盡。

在接下來的文章裡面,將跳空一些知識點,如果讀者沒有相關基礎,則需自行學習。之後將跳過的包括但不限於:

1. 基礎Web知識,比如非ASCII字元集的URL需要編碼等常識:http://www.w3school.com.cn/html/html_urlencode.asp

2. 瀏覽器開發人員工具的運用,可以選擇Chrome的開發人員工具、或Firefox的Firebug外掛程式等,個人推薦用Chrome。尤其需要先瞭解其抓 包功能,在採集資料的時候經常要用到。抓包功能在Chrome開發人員工具裡面,對應的是”Network”選項卡。

3. 獨立配置Python的pycurl模組。此處主要有兩種選擇,一種是在Windows系統安裝Curl、再安裝setuptools、最後安裝模組,比 較麻煩也不推薦,且以後其他模組在Windows裡面配置可能也是這麼麻煩。另一種選擇即是配置一個Linux環境,在CentOS及Fedora等系統 裡面,執行:sudo yum install python-pycurl,在Ubuntu等系統裡面,執行sudo apt-get install python-pycurl。之後將大量的使用到這個模組,所以務必配置好。Linux的入門命令可見:http://ooxx.me/common-ssh-commands.orz

4. 瞭解Regex。它是用來處理字串的強大工具,可以在百度上尋找資料對它做初步的瞭解,至少要Crowdsourced Security Testing道.*?和[\s\S]*?這兩個的含義,它們在採集資料的過程中是最常用的。這是一個很不錯但難度較高的正則教程,可能不是很適合初學:http://manual.phpv.net/regular_expression.html

此外最好買一本Python書籍,雖然因為SEO沒必要對程式涉及很深入,大多程式類書籍上的多數知識的重要性不高。比如每本書都會花大量篇幅去介 紹物件導向編程的思路與實現,但SEO的多數需求往往只有幾百行代碼,一般都不太會去涉及這些。不過,一開始的一些基礎知識學習的過程中,容易疏漏或者遺 忘知識點,有一本書會好得多。

尚未找到比較適合SEO看的Python書籍。我自己手邊有一本《Python核心編程》,應該說還可以吧。如果不確定買哪本的話,可以到這個論壇去找下pdf試看,它上面各類電腦書籍應該是相對最齊全的:http://club.topsage.com/forum-300-1.html

但不要只看pdf,一般學一門語言至少備一本紙質書籍,它應該是在自己不清楚或忘記了哪些知識點以後,可以隨時拿來翻看的工具書。

文章作者:ZERO

本文來自semwatch 轉載請註明出處連結及作者。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.