當前位置:成語大全網 - 書法字典 - Python 2和Python 3的主要區別是什麽?

Python 2和Python 3的主要區別是什麽?

妳應該是Python的新手。建議妳直接學Python3.x。

以下是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。