宏觀上:2.x 源碼不規范,混亂,冗余。
3.x 源碼優美清晰,統一標准,去除了冗余。
默認編碼方式:2.x ASCII碼 3.x UTF-8
用2.x 處理中文時,需要聲明編碼方式(由於cmd終端默認編碼為GBK,所以聲明為utf-8時,在cmd終端上,中文顯示為亂碼。)
# -*- encoding:utf-8 -*-
數據類型:
- 整型,2.x分int和long兩種,3.x只有int類型。
運算符:
- 不等於,2.x可以使用<>和!=;3.x只能使用!=
print()方法:
2.x可以不用括號,寫成
for letter in 'Python': print '當前字母:', letter
3.x必須有括號
print('當前字母:', letter)
input方法:
2.x 中,input()會處理成和輸入數據相應的類型,是最終目標地址里內容的數據類型
3.x 中,input()得到的數據統一都是字符串。
但2.x中,有raw_input()方法,和3.x中的input()作用相同。可見,2.x中,input()有着更復雜的內部實現,用來轉化數據類型。
range()函數:
2.x中,xrange()等價於3.x的,range()返回一個數字的列表。
3.x中,range()返回可迭代對象,可用list()轉化為列表。
dict內建方法:
ps. 3.6之前,字典是無序的;3.6(包括3.6)之后,有序。這個有序和無序的區別是解釋器造成的。字典數據類型本身還是無序的。
dict.popitem()無序字典下,是隨機刪除;有序字典下,是刪除最后一對。
dict.keys()
2.x中,返回列表類型的鍵序列
3.x,返回dict_keys類型的數據,可用list()轉換為列表類型
迭代器生成器:
3.x 支持 __iter__()和__next__()
2.x 支持__iter__(),next()
經典類新式類:
2.x 中存在經典類和新式類,默認是經典類,可通過繼承object聲明為新式類
經典類在多繼承關系中,深度優先算法
新式類的super只支持super(子類名,self)
3.x 中只有新式類,默認繼承object
新式類在多繼承中,用C3算法檢索父類,可用mro()方法獲取檢索序列,super()方法獲取序列的相鄰的下一個類對象
C3算法:兩個原則缺一不可,順序(序列)和效率(路徑盡量短)
continue......
