天天看點

python初體驗(1)——基礎篇

我為什麼學習python

首先我的工作第一語言是c/c++(面向對象子集)。選擇學習python一方面是因為看很多人都說python開發效率高,是以想驗證一下;另一方面,Eric S. Raymond在文章:如何成為一名黑客 中對python的推薦。還有一方面,python的設計哲學:用一種方法,最好是隻有一種方法來做一件事,這一點我比較認同。

好了,我選擇的入門資料是python簡明教程。下面是我學習時的一些筆記和思考,上面有很明顯的c和C++的痕迹。

控制結構:

  1. 有c沒有的自然字元串的概念。
  2. 不支援i++。我對此表示歡迎。++會誘導程式員新手犯錯誤。我在c中基本上抛棄了++。
  3. python沒有switch,可以使用if elif else來實作同樣的功能。
  4. while後可以跟一個else從句。
  5. for i in range(1,5):,從1循環到5,但是不包括5。
  6. break語句仍然可以停止循環,但是,停止後,不會執行else塊。
  7. continue和之前相同。
  8. 函數入參沒有類型,如果實參和形參不符合會有什麼後果,如何避免。如果類型不符合,會直接運作失敗。
  9. 通過global可以告訴函數,變量屬于函數之外。但是,不鼓勵使用全局變量。它可以同時聲明多個。
  10. 預設參數:和c++一樣,用”= value”來表示。統一,它隻可以為最後一個參數設定預設參數。

資料結構:

字典:

字典類似于二叉樹,但是不知道字典内部使用的是什麼算法。

鍵值必須唯一,如果不唯一,添加的時候會發生什麼?linux 二叉樹是覆寫的。

答案:如果字典中已經有了一個key,這個時候再添加,它會覆寫掉原先的value。對它來說是設定。這個和linux 二叉樹倒是一緻。

和二叉樹類似,鍵是不允許改變的。如果改變會發生什麼後果。至少二叉樹改變後,這個數的結構會敗壞。而且,編譯器是無法檢測的。Python是否會檢查?

答案:是的,它在運作的時候會提示錯誤。因為他沒有編譯的概念。是以。。。

是否可以弄一個變量作為關鍵字?

答案:這樣是可以的,運作也是沒有問題的。但是如果更改這個關鍵字那?

但是如果更改這個關鍵字那?

答案:更改後發現字典并沒有随着改變,說明他隻是使用了這個變量的值,取他的值做常量,作為關鍵字,而不是使用變量作為關鍵字。

字典的效率好不好,他的内部使用的是什麼算法?二叉樹,hash,還是其他?

答案:哈希表。

字典的健是否可以類型不同?

答案:是可以的。

字典是dict的對象,元組是tuple的對象,清單時list的對象。

序列:

序列的兩個特點是索引操作符和切片操作符。一個是擷取一個項目,一個是擷取子序列。

清單和元組都是序列。

序列是從零開始的,這是數組一樣。不過他居然可以是負數!?

答案:負數的時候表示去最後的元素,-1表示最後一個。

什麼是切片?

答案:就是在一個序列中擷取一個子序列。對于切片,冒号是必須的,而數字不是必須的,如果沒有數字,這表示從頭開始或到結尾。全部沒有數字表示整個序列。

是否通過切片來為一個新的序列指派?

答案:可以的。

如果擷取元素超出範圍會怎樣?

答案:運作出錯。

如果切片時超出範圍會怎樣?

答案:本來以為會出錯,居然沒有,而隻是顯示為空。

清單,元組,字元串都是序列,都可以用序列的方法來操作。

元組

和list唯一不同的是,他不可以改變。

和c++不一樣,元組和list裡面可以存放不同類型的值。

myempty = ()表示空的元組;

myempty = (2,)必須加‘,’才可以表示隻有一個元組;否則是對象。

對象與引用

當你建立一個對象并給它賦一個變量的時候,這個變量僅僅 引用 那個對象,而不是表示這個對象本身!也就是說,變量名指向你計算機中存儲那個對象的記憶體。這被稱作名稱到對象的綁定。

C中的指針我比較熟悉,他應該相當于指針,但是,從外觀開不出什麼。我感覺這個特性和語言的初衷有些偏差:可能會導緻程式員出錯。

總的感覺:文法确實比較簡單,比較容易入手。