以下是Python2.x版本2.x和3.x之間區別:
Python的3.0版本通常被稱為Python 3000,簡稱Py3k。與早期版本的Python相比,這是壹個很大的升級。
為了不帶來太多負擔,Python 3.0在設計時沒有考慮向後兼容性。
許多為早期Python版本設計的程序無法在Python 3.0上正常運行。
為了照顧現有程序,Python 2.6作為過渡版本,基本上使用了Python 2.x的語法和庫,同時考慮到向Python 3.0的遷移,允許使用Python 3.0的壹些語法和功能。
新的Python程序建議使用Python 3.0版的語法。
除非執行環境無法安裝Python 3.0或程序本身使用不支持Python 3.0的第三方庫。目前不支持Python 3.0的第三方庫包括Twisted、py2exe、PIL等。
大多數第三方庫都在努力與Python 3.0兼容。即使不能立即使用Python 3.0,也建議編寫壹個與Python 3.0兼容的程序,然後使用Python 2.6、Python 2.7來執行它。
Python 3.0的變化主要體現在以下幾個方面:
1 .打印功能
print語句不見了,取而代之的是print()函數。Python 2.6和Python 2.7部分支持這種形式的打印語法。在Python 2.6和Python 2.7中,以下三種形式是等效的:
打印?“魚”
打印?(“魚”)?#註意打印後有壹個空格。
印(“魚”)?#print()不能接受任何其他參數。然而,Python 2.6實際上支持新的print()語法:
從哪裏?__未來_ _?進口?打印功能
print(“魚”,?“熊貓”,?sep =‘,?‘) 2.Unicode(這是壹個很好的改進)
Python 2有ASCII str()類型,unicode()是單獨的類型,不是字節類型。
現在,在Python 3中,我們終於有了Unicode(utf-8)字符串和壹個字節類:byte和bytearrays。
從Python3開始。x源文件默認使用utf-8編碼,這使得以下代碼合法:
& gt& gt& gt?中國?=?中國?
& gt& gt& gt打印?
中國Python 2.x
& gt& gt& gt?str?=?“我愛北京天安門廣場”
& gt& gt& gt?潛艇用熱中子反應堆(submarine thermal reactor的縮寫)
‘xe6 \ x88 \ x 91 \ xe7 \ x88 \ XB 1 \ xe5 \ x8c \ x97 \ xe4 \ xba \ xac \ xe5 \ xa4 \ xa9 \ xe5 \ xae \ x89 \ x97 \ xa8‘
& gt& gt& gt?str?=?u“我愛北京天安門廣場”
& gt& gt& gt?潛艇用熱中子反應堆(submarine thermal reactor的縮寫)
u‘\ u 6211 \ u 7231 \ u 5317 \ u 4 EAC \ u 5929 \ u5b 89 \ u95e 8‘Python 3 . x
& gt& gt& gt?str?=?“我愛北京”
& gt& gt& gt?潛艇用熱中子反應堆(submarine thermal reactor的縮寫)
我愛北京。除法運算
Python中的除法比其他語言更高級,它有壹套復雜的規則。Python中有兩個除法運算符,/和//
首先,說/分:
python 2.x中的/division類似於大多數熟悉的語言,如Java、C等。整數除法的結果是整數,小數部分完全忽略。浮點除法將保留小數部分以獲得浮點結果。
/除法不再在python 3.x中進行,整數之間除法的結果也將是浮點數。
Python 2.x:
& gt& gt& gt?1?/?2
& gt& gt& gt?1.0?/?2.0
0.5Python 3.x:
& gt& gt& gt?1/2
0.5請註意,小數部分不會被丟棄,但會執行取整運算。如果要截取小數部分,需要使用math模塊的trunc函數。
python 3.x:
& gt& gt& gt?進口?數學
& gt& gt& gt?math . trunc(1?/?2)
& gt& gt& gt?math . trunc(-1?/?2)
不正常
在Python 3中處理異常也略有變化,我們現在使用as作為關鍵字。
捕捉異常的語法是什麽?除了exc,var?改成?除了作為變量的exc。
將語法except(exc 1,exc2)用作var可以同時捕獲多種類型的異常。Python 2.6已經支持這兩種語法。
1.在2.x時代,所有類型的物體都可以直接投擲。在3.x時代,只能拋出從BaseException繼承的對象。
2.2.x raise語句使用逗號分隔拋出的對象類型和參數,3.x取消了這段精彩的編寫,直接調用構造函數拋出對象。
在2.x時代,除了表達程序錯誤之外,異常還經常做普通控制結構應該做的事情。在3.x中可以看到,設計人員將異常變得更加具體,只有當錯誤發生時,才能通過異常捕獲語句進行處理。
5.xrange
使用xrange()創建叠代對象在Python 2中非常流行。例如,For循環或列表/集合/字典派生。
這種性能非常像發電機(例如。“懶評”)。但是這個xrange-iterable是無限的,這意味著您可以無限地遍歷它。
由於xrange()函數的計算速度較慢,如果只需遍歷壹次,則xrange()函數比range()函數更快(例如for循環)。盡管如此,與壹次叠代相比,不建議您多次叠代,因為生成器每次都是從頭開始的。
在Python 3中,range()的實現類似於xrange(),因此不再存在特殊的xrange()函數(在Python 3中,xrange()會引發壹個命名異常)。
進口?時間
n?=?10000
def?測試範圍(n):
回歸?為了什麽?我?在?範圍(n):
及格
def?test _ xrange(n):
為了什麽?我?在?xrange(n):
passPython 2
打印?Python,?python_version()
打印?\ n定時?range()‘?
%timeit?測試範圍(n)
打印?\ n \定時?xrange()‘?
%timeit?test _ xrange(n)
Python?2.7.6
時機?範圍()
1000?循環?最好的?的?3:?433s?per?環
時機?xrange()
1000?循環?最好的?的?3:?350s?per?loopPython 3
print(‘Python‘,?python_version()
打印(‘n時間?range()‘)
%timeit?測試範圍(n)
Python?3.4.1
時機?範圍()
1000?循環?最好的?的?3:?520s?per?loop print(xrange(10))
-
NameError?追溯?(大多數?最近的?打電話?最後)
& ltipython-input-5-5d8f9b79ea70》?在?& lt模塊& gt()
-& gt;?1?打印(xrange(10))
名稱錯誤:?名字?xrange?是嗎?不是嗎?已定義6。八進制文字表示
八進制數必須寫成0o777,不能用原始形式0777;二進制必須寫成0b111。
添加了壹個bin()函數來將整數轉換為二進制字符串。Python 2.6已經支持這兩種語法。
在Python 3.x中,八進制文字量只有壹種表示方式,即0o1000。
python 2.x
& gt& gt& gt?0o1000
512
& gt& gt& gt?01000
512python 3.x
& gt& gt& gt?01000
文件?“& lt標準輸入》,?線?1
01000
^
語法錯誤:?無效?代幣
& gt& gt& gt?0o1000
5127.不等式算子
Python 2.x並不是說有兩種寫法!=和
在Python 3.x中,
8.刪除了repr表達式` `。
Python 2.x中的後引號``相當於repr的功能。
在Python 3.x中,已經刪除了書寫``,並且只允許使用repr函數。這樣做的目的是讓代碼看起來更清晰嗎?但是,我感覺使用repr的機會很少。壹般只在調試時使用。大多數情況下,str函數用於描述帶有字符串的對象。
def?sendMail(from _:?str,?to:?str,?標題:?str,?身體:?str)?-& gt;?布爾:
通行證9。多個模塊被重命名(根據PEP8)。
Stringio模塊現在合並到新的io模塊中。新增、md5、gopherlib等模塊已刪除。Python 2.6已經支持新的io模塊。
Httplib、basehttpserver、CGI httpserver、simple httpserver、cookie和cookie lib被合並到http包中。
exec語句被取消,只剩下exec()函數。Python 2.6已經支持exec()函數。
10.數據類型
1)Py3。x刪除了long類型,現在只有壹個integer-int,但它的行為類似於2。x版的龍。
2)增加了壹個字節類型,它對應於版本2的八位字節字符串。十、定義字節字面量的方法如下:
& gt& gt& gt?b?=?中國嗎?
& gt& gt& gt?(b)型?
& lt類型?字節‘& gt;Str對象和bytes對象可以使用。encode()(str-》);字節)或。decode()(字節-& gt;方法之間是相互轉換的。
& gt& gt& gt?s?=?b.decode()?
& gt& gt& gt?s?
中國?
& gt& gt& gt?b1?=?s.encode()?
& gt& gt& gt?b1?
中國的字典。keys()、。項目和。values()方法返回叠代器,而iterkeys()等以前的函數被丟棄。同時,dict.has_key()被刪除,因此將其替換為in。