1. 程式人生 > >寫指令碼不熟練的程式設計師不是好程式設計師----小話python(1)

寫指令碼不熟練的程式設計師不是好程式設計師----小話python(1)

作者:陳曦

日期:2012-6-30 11:18:06 

環境:[Mac 10.7.1 Lion Intel-based i3,支援64位指令  Python 2.7.1  gcc4.2.1] 

轉載請註明出處

Q1: 指令碼的本質是什麼?

A: 它就是一段程式碼,只不過讓對應的直譯器執行即可;和它相對應的是編譯型程式碼,需要編譯成可執行檔案或者目標檔案,在指定平臺上執行或者使用。

Q2: 為什麼寫指令碼不熟練的程式設計師不是好程式設計師?

A: 如果程式設計師主要寫的就是特定型別的指令碼,那肯定是這樣;如果不是,當主要工作不是寫指令碼時,程式設計師要做的不僅僅是寫本職工作,還不可避免地需要處理相關的測試和驗證工作。例如,訪問某個網站一直不通,需要確定此地址是否可訪問,伺服器返回什麼,進而確定問題在於什麼。在此時,如果一味希望採用編譯型語言來編寫這樣的程式碼,實踐中的時間和精力是不夠的,所以,指令碼成了很好地選擇。

Q3: 在您所瞭解的指令碼中,最喜歡哪個?

A: 對於windows下批處理,linux shell, mac shell, python, perl, VBScript這些指令碼中,最喜歡的就是python.原因在於,它從一方面很像c語言,簡潔,很多時候程式碼很易懂易寫;另一方面很像c++,支援面向物件的處理。

Q4: 給個mac下python語言的hello程式碼吧。

A: 首先得確定已經安裝了python直譯器。

可以看出,已經安裝了。如果沒有,可以使用macport進行安裝。

編寫如下程式碼,儲存為hello.py:

print "hello, python!\n"

執行:

Q5: 每次命令列輸入python,感覺還挺煩的,有沒有更簡單的方式?

A: 那麼建立一個python的軟連結吧,取名為p.只要沒有衝突就行。

此時,可以使用p命令代替python.

Q6: 對於建立變數和使用變數呢,這樣的程式碼如何寫?

A: 對於建立變數和使用變數,它沒有什麼很奇怪的語法,不像bash或者perl那樣,需要一個$符號,有時還需要$()這種形式。從大二開始學習了bash, 到現在依然會忘記$符號有時該如何處理。python才看1天,就記住了它的處理方式,因為它對變數的宣告和定義根本不需要$。

i = 5
print i
i = i + 1
print i
i = '12'
print i

儲存為var.py.

執行:

可以看出,它的處理很簡潔,i是變數,初始化的時候是i,使用的時候依然是i,很容易看懂。

Q7: 有時,可能需要計算大整數運算結果,如果使用程式語言,比如c語言等等來計算,可能需要編寫大整數計算的程式碼,這可能是個耗時的過程,python可以提供類似的計算功能嗎?

A: 是的。python直譯器可以提供的一個基本功能就是計算功能, 同時它可以提供直接輸入功能,簡單明瞭。如下:

Q8: 可是c語言同樣提供了double這樣的型別,可以操作很大的資料,上面的過程用c程式碼同樣可以方便實現?

A: 是的,是可以實現,但是如果需要計算一個表示式非要使用c語言,那過程顯得太複雜了。

Q9: 有時,需要計算的表示式很多,如果像上面那樣一個一個輸入,豈不太複雜了?

A: python提供的基本功能就是解釋字串,把表示式放進字串中,讓python來解釋即可。

上面的eval可以對字串引數進行計算。需要計算很多個表示式的時候,我們可以將表示式放在一個檔案中:

1+1
2*3
12%3
12**2
14.5+34.5-12.5

儲存為expr_cal.  然後編寫指令碼讀取檔案中的資料,一行一行計算值:
file = open("expr_cal", "r")
all_lines = file.readlines()

for line in all_lines:
    print eval(line)

file.close()

儲存為expr_cal.py. 然後執行:

可以看到,上面的程式碼已經正確地執行了。

Q10: 有時,對於編碼問題,很討厭的一個問題,為了確定某個字元的某種編碼的資料是什麼,python可以提供簡單的方式嗎?

A: 是的。如下:

上面可以看到,字串 “你好” 對應的unicode編碼,UTF8編碼和GB2312編碼對應的資料,方便易查。在出現編碼問題的時候,不要慌張,python輕鬆給出結果。

Q11: 對於複數的運算,python有沒有提供對應的實現?

A: 是的。複數運算也很簡單和直接:

Q12: 有的時候會忘記平臺預設的換行符是什麼,有什麼方法可以得到嗎?

A: 使用os的linesep可以得到它。如下:

如果在其它平臺,可能得到不同的結果。

Q13: 在開發和修復bug過程中,可能需要對某個指定大小檔案進行操作,那麼如何快速生成一個指定大小的檔案?

A: python提供了檔案操作介面,可以很方便解決這個問題。如下,生成一個100MB大小的檔案,最後一個位元組為0:

執行完後,可以找到這樣大小的檔案:

Q14: 在網路訪問過程中,經常需要確定某個網頁對應的html資料,而且有時需要對於html的資料進行搜尋,有什麼比較好的方法?

A: 使用指令碼實現是個不錯的選擇,對於資料的分析比較直接,雖然使用瀏覽器來檢視原始碼也是一種方式。如下:

上面讀取的資料沒有完全顯示。

從上面可以看出,其實指令碼發揮著很大的作用。工欲善其事必先利其器,python就是一個很好的器。

作者:陳曦

日期:2012-6-30 11:18:06 

環境:[Mac 10.7.1 Lion Intel-based i3,支援64位指令  Python 2.7.1  gcc4.2.1] 

轉載請註明出處