作為一門計算機語言來說,Python會有下面的特點。
我們可以和其他不是腳本語言的語言進行一個簡單的對比,如C,你需要去編譯去運行,有時候還需要解決跨平臺問題,本來你是在你的Windows上運行得好好的,但是有一天你換了一個Mac電腦的時候,問題變得很棘手,你甚至不知道怎么去解決問題。我沒有用過MFC,聽說很方便,但是在其他平臺下就沒有一個好的解決方案。這里可能跑得有點遠,但是不同的用戶可能在不同的平臺上,這也就是腳本語言的優(yōu)勢所在了。
你可能聽過,也可能了解過,不過在這里我們可能不會去講述那些基礎(chǔ)的語法的東西,我們想說的是代碼格式的重要性,在html中你可以這樣去寫你的代碼
<html><head><title>This is a Title
</title></head><body><div class="content">
<p>flakjfaklfjalfa</p></div>
</body></html>
又或者是js的minify,它可能會使你的代碼看起來像是這樣的:
function NolTracker(b,a){this.pvar=b;this.mergeFeatures(a)}
可能的是如果是python的話,你可能會遇到下面的問題。。
File "steps.py", line 10
try:
^
IndentationError: expected an indented block
如果你對JSLint、Lint這類的工具有點印象的話,你也可以認為python集成了這類工具。整潔的代碼至少應(yīng)該看上去要有整潔的衣服,就好像是我們看到的一個人一樣,而后我們才會有一個好的印象。更主要的一點是代碼是寫給人看的,而衣服更多的時候?qū)τ谙裎疫@樣的人來說,他首先應(yīng)該是要保暖的,其次對于一個懶的人來說。
程序應(yīng)該是具有可讀性的短文,它將在計算機上執(zhí)行,從而解決某些問題
我們需要去讀懂別人的代碼,別人也需要去讀懂我們的代碼。計算機可以無條件地執(zhí)行你那未經(jīng)編排過的程序,但是人就不是如此了。
var calc={add: function(a,b){return a+b;},sub: function(a,b){return a-b;},dif: function(a,b){if(a>b){return a;}else{return b;}}}
上面的代碼相對于下面的代碼可讀性沒有那么多,但是計算機可以無條件地執(zhí)行上面的代碼。上面的代碼對于網(wǎng)絡(luò)傳輸來說是好的,但是對于人來說并不是如此,我們需要一些工具來輔助我們?nèi)プx懂上面的代碼。如果代碼上寫得沒有一點可讀性,諸如函數(shù)命名沒有多少實際意義,如果我們把前面的函數(shù)就成這樣:
var c={
a: function(a,b){
return a+b;
},
s: function(a,b){
return a-b;
},
d: function(a,b){
if(a>b){
return a;
}else{
return b;
}
}
}
那么只有在我們理解了這個函數(shù)是干什么之后才能理解函數(shù)是干什么,而不是光看函數(shù)名就可以了。
在Javascript解決一個函數(shù)的辦法有很多,在其他一些語言如Ruby或者Perl中也是如此,解決問題的辦法有很多,對于寫代碼的人來說是一個享受的過程,但是對于維護的人來說并非如此。而這個和Python的思想不是很一致的是,Python設(shè)計的理念是
對于特定的問題,只要有一種最好的方法來解決就夠了
可讀性的代碼在今天顯得比以前重要的多,以前寫程序的時候我們需要去考慮使用匯編或者其他工具來提高程序的效率。
.global _start
.text
_start:
# write(1, message, 13)
mov $1, %rax # system call 1 is write
mov $1, %rdi # file handle 1 is stdout
mov $message, %rsi # address of string to output
mov $13, %rdx # number of bytes
syscall # invoke operating system to do the write
# exit(0)
mov $60, %rax # system call 60 is exit
xor %rdi, %rdi # we want return code 0
syscall # invoke operating system to exit
message:
.ascii "Hello, world\n"
所以上面的代碼的可讀性在今天新生一代的程序員來說可能沒有那么容易理解。芯片運行的速度越來越快,在程序上我們也需要一個越來越快的解決方案,而所謂的越來越快的解決方案指的不是運行速度上,而是開發(fā)速度上。如果你沒有辦法在同樣時間內(nèi)開發(fā)出更好的程序,那么你就可能輸給你的競爭對手。
我們終于又從一種語言跳到了另外一種語言,我們可能習慣了一種模式,而不敢于去嘗試新的東西,這些或許是我們的一些習慣又或者是因為害怕等等。
作為另外一個跨平臺能力很強的語言,這里說的是與Javascript、HTML比較,或許你會覺得C算是最好的,但是我們這里討論更多的是腳本語言,也就是直接可以運行的。在現(xiàn)在主流的大多數(shù)移動平臺上,python也有良好的支持,如Android,IOS,只是這些算是類Unix系統(tǒng)內(nèi)核,python還支持之前Nokia的Symbian。
開始之前我們需要確認我們的平臺上已經(jīng)有了python環(huán)境,也就是可以運行下面的Hello,World,你可以在網(wǎng)上很多地方看到,最簡單的地方還是到官網(wǎng),又或者是所用移動平臺的store下載。
Python的Hello,World有兩種形式,作為一種腳本語言來說,Javascript也是一種腳本語言,只是兩者之間有太多的不同之處,每個人都會有不同的選擇對于一種語言用來作為其的習慣。于是這就是我們的
print "Hello,World"
當我們把我們的腳本在shell環(huán)境下運行時
>>> print "Hello,world"
File "<stdin>", line 1
print "Hello,world"
^
IndentationError: unexpected indent
>>> print "Hello,world"
Hello,world
>>>
如果你沒有預(yù)料到縮進帶來的問題的時候,這就是一個問題了。
和我們在Javascript或者是CSS里面一樣,我們也可以用一個文件的方式來寫入我們的代碼,文件后綴名是py,所以創(chuàng)建一個helloworld.py,輸入上面的代碼,然后執(zhí)行
python helloworld.py
一個理想的結(jié)果,或許你試過C語言的helloworld,如果了解過GCC的話應(yīng)該是可以這樣的:
./a.out
也就是執(zhí)行編譯完后的程序,需要注意的是helloworld.py沒有編譯,不過也會輸出
Hello,world
我們想展示的是如何結(jié)合前面學習的內(nèi)容做一個更有意思的Hello,World。
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
我們需要去了解算法(algorithm),引經(jīng)據(jù)典的話就是這樣子:
a process or set of rules to be followed in calculations or other problem-solving operations, especially by a computer
也就是計算或其他解決問題的操作需要遵循的一個過程或者一套規(guī)則,書上還提到的說法是——解決問題的訣竅,讓我想起了hack一詞。我們總會去想某些東西是否有一個更快的計算方法,有時候在處理某些問題上也顯示了一個好的算法的重要性。
(來自于:HyryStudio)
大多數(shù)工程師、科學家使用科學計算軟件的目的都是為了快速解決其工作中遇到的問題,而不是開發(fā)出一套完整的軟件。這就是為什么MATLAB這樣的商用科學計算軟件十分流行的原因。而Python在這一點上實際上和MATLAB十分相似,我們也可以使用Python眾多的擴展庫快速寫出一次性的數(shù)據(jù)處理、運算的腳本。然而由于Python語言的一些高級特性,以及眾多的科學計算之外的擴展庫,我們可以將積累下來的一次性腳本進行改造,為它們提供命令行、GUI、數(shù)據(jù)庫、網(wǎng)絡(luò)等眾多接口,最終成為一套完整的工具包或者實用的計算軟件。而且由于是開源的自由軟件,我們可以在任何系統(tǒng)中安裝Python環(huán)境,運行我們 的程序。
Python一直保持著很強的實用主義,它通常不會去試著重新開發(fā)一整套函數(shù)庫,而是將現(xiàn)有的開源函數(shù)庫包裝成其擴展庫。而Python則通過這些擴展庫將眾多的開源函數(shù)庫連接在一起,是名符其實的膠水語言。例如由華盛頓大學的教授主導開發(fā)的 Sage ,就是一套以代替MATLAB、Mathematica、Maple等商用科學計算軟件為目的的開源系統(tǒng)。它通過Python結(jié)合了眾多的開源科學計算軟件,并通過網(wǎng)頁瀏覽器提供了一個與其交互的記事本文檔界面。 Python的科學計算擴展庫非常多,不同專業(yè)的技術(shù)人員都可以找到適合自己的擴展庫。下面是我經(jīng)常會用到的一個非常不完全的列表:
關(guān)于Python的包管理
Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。
Python 標準庫中的 urllib2 模塊提供了你所需要的大多數(shù) HTTP 功能,但是它的 API太渣了。它是為另一個時代、另一個互聯(lián)網(wǎng)所創(chuàng)建的。它需要巨量的工作,甚至包括各種方法覆蓋,來完成最簡單的任務(wù)。
以安裝requests為例:
命令:
sudo pip install requests
結(jié)果:
Downloading/unpacking requests
Downloading requests-2.4.3-py2.py3-none-any.whl (459kB): 459kB downloaded
Installing collected packages: requests
Successfully installed requests
Cleaning up...
用這個庫我們可以做些什么?看看官網(wǎng)的示例:
>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
到現(xiàn)在你會發(fā)現(xiàn)我們沒有說到任何的Python語法,這不是一本關(guān)于Python語法的書,如我們在開頭所說的。下面是我們將會在后面用到的代碼
#!/usr/bin/env python
import requests
url = "http://b.phodal.com/athome/1"
r = requests.get(url)
print r.text
更多建議: