我是怎樣通過類比來學習 python2 的

轉載請註明出處:
(http://blog.csdn.net/BruceHurrican/article/details/53541663)

在學習 python 之前我對 python 是個小白。在工作中用到好多第三方的工具(如 freeline),這些工具中就有好多 .py 的文件, 爲了弄懂這些文件裏的邏輯纔來學習python 的,當前 freeline 採用的是 python2版本的,所以我是以 python2來學習的。PS: 我是做安卓的,對 Java 什麼知道的多些,python 就……T_T

環境搭建

首先交待下我的學習工具,mac, pyCharm, sublime。
剛開始不推薦用 pyCharm 直接寫 python 代碼,因爲好多東西 IDE 都幫我們做了,有些基礎原理方面的東西就學不到了。

因爲我用的是 mac ,已經幫我安裝了 python,如果沒有安裝 python 的話,需要自行去安裝,傳送門
在終端輸入

python –version

我的電腦出現的是 Python 2.7.10,表示我的電腦已經可以使用 python 了。

知識點整理

如前所述,我對 java 知道的多點,所以在學習 python 時總是習慣性的拿 python 和 java 來對比,不曉得哪個大牛說過,≖‿≖✧程序語言具有類比性,學好了一門,再去學另一門會容易些。不敢說我對 java 理解的有多透徹,以我 leader 的評價來說,算是熟悉吧,畢竟開發 android app 夠用了。扯遠了,哈……

先整體瞭解下 java 和 python 的異同吧
1. 從編譯類型上來說 python 是解釋型語言,java 是編譯型語言也是解釋型語言。python 是不需要編譯的,可以直接運行的。java運行速度快,python慢,代碼量上python少,java快。java是靜態語言,聲明變量必須指明變量類型,python是動態語言,必須指明變量類型。
2. 兩者都對數據類型敏感,不同的數據類型之間的轉換是需要類型轉換的。
3. 書寫單行語句時,java 必須以分號”;”結尾,python是可加可不加分號的,如下:

python
 print 'aa' # 1
 print 'bb'; #2

注意,如果 #1,#2在同一行的話,則#1後面必須加分號,如下:

  python
      print 'aa'; print 'bb'

-4. java 中雙引號表示字符串,單引號表示字符,python 中 兩種符號都表示字符串,python 中沒有字符這種數據類型,另外 python 中還可以用 三個單引號 ”’來表示字符串

a=”’hello python”’
三個單引號還可以用來顯示多行字符串
b = ”’hello python
hello java”’

-5. python 中對換行非常敏感,多條語句執行時,就是依據換行和縮進來決定招行範圍的,如:

python
if 1<0:
    print 'hello python' #1
    print 'hello python2' #2
print 'hello java' #3

if 判斷語句只能影響到 #1,#2,影響不到#3。這是因爲 python 中不像 java 可能通過 花括號”{}”來表示代碼塊,方法體,python 對應的稱爲代碼組,函數,代碼組,函數是以冒號開始的相同縮進表示屬於相同的代碼組或函數,所以在 python 中不能隨便縮進,不像 java,在一行語句前多敲幾下空格是不影響最終結果的
6. python 中用中括號”[]”表示列表

c=[1,2,3,4]

相當於 java 中的集合,可以增刪改查,
7. python 中 的圓括號代表可讀列表,只能讀取不能修改相當於 java 中的常量數組。
8. python 中的 字典和 java 中的 map 有點類似都是KV 結構

python
dd = {'a':1,'b':2,'c':3}

-9. python 中使用其他包下的函數需要引包使用 import 關鍵字,這點和 java 一樣
10. 重複執行命令,在 java 中如果要打印兩遍同樣的信息,要麼循環,要麼寫兩遍同樣的語句,python 中只需要在調用的地方加上”*2”即可

python
    print 'aa'*2

-11. python是面向對象的,這點和 java 相同,但是寫法上又有點不同,因爲在 Java 語法中,在類名後是用花括號包括的部分稱爲類體,在 python 中無此用法。python 中是依靠冒號的縮進組成的代碼組來表示類體的,如:

python
    class KK:
        def __init__(self,name):
            self.name = name
        def showName(self):
            print 'name: ', name

    ks=KK('bruce')
    ks.showName()

”’_ _ init _ _(self,name)”’是類的構造函數, name 是入參,self 是本身,類的實例化沒有 new 關鍵字,調用實例方法和 Java 類似,
12. 垃圾回收機制,和 java 類似,當對象不再被引用時,會調用類 del方法回收內存
13. java 和 python 都支持繼承,區別是 python 支持多繼承,java 繼承的關鍵字 extends 而 python 是用圓括號來表示,多個父類用逗號分隔,如

python
    class KK:
    '測試類'
    def __init__(self, name):
        self.name = name
    def showName(self,msg):
        print 'name: ', self.name + msg
    def __del__(self):
        class_name = self.__class__.__name__
        print class_name + '銷燬'
class SS:
    'SS'
    def __init__(self):
        print '調用子類構造方法2'
    def showTxt(self,msg):
        print msg
class TT(KK,SS):
    'TT'
    def __init__(self):
        print '調用子類構造方法'

-14. python 子類重寫父類方法直接聲明一個同名同參的方法即可,沒有 java 的 override 關鍵字。
15. 類變量的權限,對於成員變量,類實例可以訪問,這點類似 Java 類中的 public 修飾的成員變量。對於私有變量 python 中在類中聲明時須加兩個下劃線

class TT:
__ss = 30

按照 Java 的思維習慣,私有變量是不能被外部實例訪問,如上

tt=TT()
tt.__ss

會報錯 AttributeError: TT instance has no attribute ‘_ss’,這樣理解也沒有什麼問題,但是 python 和 Java 在訪問私有變量是有個很大的不同,上述方法行不通,但是可以通過 tt._TT__ss 的形式來訪問私有變量,這樣私有變量也不是“私有”了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章