Python 3.x 版本相對於Python的早期版本,是一個較大的升級;許多針對早期Python版本設計的程式都沒法在Python 3.0上正常執行。python
1. print()函數函數
Python 2 中的print語句沒有了,取而代之的是print()函數編碼
在Python2.6和Python2.7中,這三種形式是等價的 print "fish"
print ("fish") # print後面有個空格
print("fish") # print()不能帶任何其餘參數
2. Unicodespa
python 2 默認支持ASCII編碼,是不支持中文的;而Python 3 中默認是utf-8編碼,能夠識別中文;命令行
Python 2.x中:設計
>>> str = "我愛北京天安門"
>>> str '\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
>>> str = u"我愛北京天安門"
>>> str u'\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8'
Python 3.x中:code
>>> str = "啊哈哈哈"
>>> str '啊哈哈哈'
3. 異常對象
python 3 中捕獲異常的語法由 except Exception,e 改爲 except Exception as eblog
在2.x時代,全部類型的對象均可以直接被拋出;但在3.x時代,只有繼承自BaseException的對象才能夠被拋出,並且會讓異常變得更爲專注,只有在錯誤發生的狀況才能用異常捕獲語句來處理。繼承
4. xrange
在Python 2 中 xrange() 是列表,它建立迭代對象的用法是很是流行的。好比:for 循環或者是列表/集合/字典推導式。這個表現十分像生成器。但這個 xrange-iterable 是無窮的,意味着能夠無限遍歷。因爲它的惰性求值,xrange() 函數 比 range() 更快。儘管如此,對比迭代一次,不建議重複迭代屢次,由於生成器每次都從頭開始。
在Python 3 中,range是可迭代對象;range()是像 xrange() 那樣實現,在 Python 3 中 xrange() 會拋出命名異常。
5. 不等運算符
Python 2.x 中的不等於有兩種寫法: != 和 <>
Python 3.x 中去掉了 <>,只有一種 != 寫法
6. 數據類型
Python 3.x 去除了long類型,只有一個int類型,但它的行爲就像是 2.x 版本的long;並且新增了bytes類型
str對象和bytes對象能夠用 .encode(str -> bytes) 或 .decode(bytes -> str)方法實現相互轉化
7. raw_input() 和 input()
Python 2 有兩個全局函數,用在命令行請求用戶輸入
第一個是:input(),等待用戶輸入python表達式,而後返回結果;
第二個是:raw_input(),用戶輸入什麼內容就返回什麼
8. 全局函數CALLABLE()
Python 2 中可使用全局函數callable()來檢查一個對象是否可調用;而在Python 3 中,這個全局函數被取消了,爲了檢查一個對象是否可調用,能夠檢查特殊方法__call__()的存在性