我為什麼學習python
首先我的工作第一語言是c/c++(物件導向子集)。選擇學習python一方面是因為看很多人都說python開發效率高,所以想驗證一下;另一方面,Eric S. Raymond在文章:如何成為一名駭客 中對python的推薦。還有一方面,python的設計哲學:用一種方法,最好是只有一種方法來做一件事,這一點我比較認同。
好了,我選擇的入門資料是python簡明教程。下面是我學習時的一些筆記和思考,上面有很明顯的c和C++的痕迹。
控制結構:
- 有c沒有的自然字串的概念。
- 不支援i++。我對此表示歡迎。++會誘導程式員新手犯錯誤。我在c中基本上拋棄了++。
- python沒有switch,可以使用if elif else來實現同樣的功能。
- while後可以跟一個else從句。
- for i in range(1,5):,從1迴圈到5,但是不包括5。
- break語句仍然可以停止迴圈,但是,停止後,不會執行else塊。
- continue和之前相同。
- 函數入參沒有類型,如果實參和形參不符合會有什麼後果,如何避免。如果類型不符合,會直接運行失敗。
- 通過global可以告訴函數,變數屬於函數之外。但是,不鼓勵使用全域變數。它可以同時聲明多個。
- 預設參數:和c++一樣,用”= value”來表示。統一,它只可以為最後一個參數設定預設參數。
資料結構:
字典:
字典類似於二叉樹,但是不知道字典內部使用的是什麼演算法。
索引值必須唯一,如果不唯一,添加的時候會發生什嗎?linux 二叉樹是覆蓋的。
答案:如果字典中已經有了一個key,這個時候再添加,它會覆蓋掉原先的value。對它來說是設定。這個和linux 二叉樹倒是一致。
和二叉樹類似,鍵是不允許改變的。如果改變會發生什麼後果。至少二叉樹改變後,這個數的結構會敗壞。而且,編譯器是無法檢測的。Python是否會檢查?
答案:是的,它在啟動並執行時候會提示錯誤。因為他沒有編譯的概念。所以。。。
是否可以弄一個變數作為關鍵字?
答案:這樣是可以的,運行也是沒有問題的。但是如果更改這個關鍵字那?
但是如果更改這個關鍵字那?
答案:更改後發現字典並沒有隨著改變,說明他只是使用了這個變數的值,取他的值做常量,作為關鍵字,而不是使用變數作為關鍵字。
字典的效率好不好,他的內部使用的是什麼演算法?二叉樹,hash,還是其他?
答案:雜湊表。
字典的健是否可以類型不同?
答案:是可以的。
字典是dict的對象,元組是tuple的對象,列表時list的對象。
序列:
序列的兩個特點是索引操作符和切片操作符。一個是擷取一個項目,一個是擷取子序列。
列表和元組都是序列。
序列是從零開始的,這是數組一樣。不過他居然可以是負數!?
答案:負數的時候表示去最後的元素,-1表示最後一個。
什麼是切片?
答案:就是在一個序列中擷取一個子序列。對於切片,冒號是必須的,而數字不是必須的,如果沒有數字,這表示從頭開始或到結尾。全部沒有數字表示整個序列。
是否通過切片來為一個新的序列賦值?
答案:可以的。
如果擷取元素超出範圍會怎樣?
答案:運行出錯。
如果切片時超出範圍會怎樣?
答案:本來以為會出錯,居然沒有,而只是顯示為空白。
列表,元組,字串都是序列,都可以用序列的方法來操作。
元組
和list唯一不同的是,他不可以改變。
和c++不一樣,元組和list裡面可以存放不同類型的值。
myempty = ()表示空的元組;
myempty = (2,)必須加‘,’才可以表示只有一個元組;否則是對象。
對象與引用
當你建立一個對象並給它賦一個變數的時候,這個變數僅僅 引用 那個對象,而不是表示這個對象本身!也就是說,變數名指向你電腦中儲存那個對象的記憶體。這被稱作名稱到對象的綁定。
C中的指標我比較熟悉,他應該相當於指標,但是,從外觀開不出什麼。我感覺這個特性和語言的初衷有些偏差:可能會導致程式員出錯。
總的感覺:文法確實比較簡單,比較容易入手。