Python2和Python3之间有什么区别(nimble22的博客)
本文操作環境:Windows7系統、Dell G3電腦、python3.6.4版。
本篇文章給大家介紹Python2和Python3之間有什么區別,讓大家可以對Python版本有所了解。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有所幫助。
我們如果不熟悉Python,可能會對Python可用的不同版本感到困惑。對于應該使用哪個版本的Python的這個問題目前是沒有明確答案的,這決定取決于你想要達到的目標。
雖然Python 3是該語言的最新一代,是該語言的未來,但還是有許多程序員仍然使用Python 2.7,這個2010年發布的Python 2的最終更新版本。這是因為一些較舊的庫和軟件包僅適用于Python 2。
為什么有不同版本的Python?
隨著開發人員擴展語言的功能,并消除給開發人員帶來問題的怪癖,編程語言不斷演進。Python 3是在2008年引入的,其目的是使Python更易于使用,并改變它處理字符串的方式,以符合當今對語言的要求。剛學會用Python 2編程的程序員有時發現很難適應新的變化,但是新手經常發現新版本的語言更有意義。
Python 3.0與以前的Python版本有著本質的不同,因為它是第一個與舊版本不兼容的Python版本。程序員通常不需要擔心小的更新(例如,從2.6到2.7),因為他們通常只改變Python的內部工作,而不需要程序員改變他們的語法。Python 2.7(Python 2的最終版本)和Python 3.0之間的變化要重大得多了,這使得在Python 2.7中工作的代碼可能需要以不同的方式編寫才能在Python 3.0中工作。
Python 2和Python 3之間的主要區別是什么?
1、輸出--print
在Python 2中,“print”被視為語句而不是函數。盡管你可以,但你無需將要輸出的文本包裝在括號中。這可能令人困惑,因為Python中的大多數其他操作都使用需要將參數放在括號內的函數。如果將括號放在要輸出的以逗號分隔的項目列表周圍,也會導致意外結果。
在Python 3中,就明確的將“print”視為一個函數,這意味著你必須以標準方式將需要輸出的項目傳遞給括號中的函數,否則你將收到語法錯誤。一些Python 2程序員發現這種變化很煩人,但它可以幫助防止錯誤的發生。
例:
print 'Hello, Geeks' # Python 3.x 不支持
print('Hope You like these facts')
登錄后復制
輸出:
Python 2.x的輸出:
Python 3.x的輸出:
因為print 'Hello, Geeks'在Python 3.x 不支持,所以出錯:
2、整數除法:
Python 2將小數點后面沒有任何數字的數字視為整數,這可能會導致在除法期間出現意外結果。例如,如果在Python 2代碼中輸入表達式:3/2,則評估結果將為1,而不是你所期望的1.5。
這是因為Python 2會假設你希望除法的結果為整數,因此它將計算向下舍入到最接近的整數。為了獲得結果1.5,你必須編寫3.0 / 2.0來告訴Python,你希望它返回一個浮點數,即在結果中包含小數點后面的數字。
Python 3則會默認將3/2評估為1.5,這對于新程序員來說有更直觀的感受。
3、列表理解循環變量:
在以前的Python 2.x版本中,給出在列表推導中迭代的變量與全局變量相同的名稱可能導致全局變量的值被更改, 這通常不是你想要的。
在Python 3中已經修復了這個煩人的錯誤。因此,你可以使用在列表理解中已經用于控制變量的變量名,而不必擔心它泄露并擾亂其余代碼中變量的值。
4、Unicode字符串:
默認情況下,Python 3是將字符串存儲為Unicode,而如果Python 2要將字符串存儲為Unicode,則要求使用“u”標記字符串。Unicode字符串比ASCII字符串更通用,它們都是Python 2的默認字符串,因為它們可以存儲來自外語的字母以及表情符號和標準的羅馬字母和數字。如果要確保Python 3代碼與Python 2兼容,你仍然可以使用“u”來標記Unicode字符串。
5、錯誤處理:
Python 2和Python 3兩個版本的錯誤處理有一個小的變化。
在python 3.x中,'as'關鍵字是必需的。例:
try:
trying_to_check_error
except NameError, err:
print err, 'Error Caused' # 不能在Python 3中工作
登錄后復制
運行:
Python 2.x中輸出:
Python 3.x 中運行,報錯:
try:
trying_to_check_error
except NameError as err: # 'as' 是 Python 3.x 必需的存在的關鍵字
print (err, 'Error Caused')
登錄后復制
運行:
Python 2.x中輸出:
Python 3中輸出:
6、xrange:
Python 3.x中不存在Python 2.x的xrange()。在Python 2.x中,range返回一個列表,即range(3)返回[0,1,2],而xrange返回一個xrange對象,即xrange(3)返回iterator對象,它與Java迭代器類似,并在需要時生成數字。
如果我們需要多次迭代相同的序列,我們更喜歡range(),因為range提供了一個靜態列表。xrange()每次重建序列。xrange()不支持切片和其他列表方法。xrange()的優點是,當任務迭代大范圍時,它可以節省內存。
在Python 3.x中,范圍函數現在執行xrange在Python 2.x中的功能,因此為了保持代碼的可移植性,我們可能希望堅持使用范圍。所以Python 3.x的范圍函數是來自Python 2.x的xrange。
例:
for x in xrange(1, 5):
print(x),
for x in range(1, 5):
print(x),
登錄后復制
運行:
Python 2.x中輸出:
Python 3中運行,報錯:
選擇哪種版本歸結為你需要的是什么庫
Python 2已經存在更長時間,這可能是一個優勢,并不是所有可用于Python 2的庫都已移植到Python 3.另一方面,一些開發人員正在為Python 3創建可能與Python 2不兼容的庫。對于很多人來說,決定使用Python 2還是Python 3取決于他們想要使用哪些庫。當然,如果你正在學習Python來處理現有的Python應用程序,那么學會使用編寫軟件的Python版本是有意義的。
許多人認為Python 3是Python 2的改進版本,因為一些更新消除了程序員常見的錯誤(參見上面的打印示例)。如上所述,一些更改使Python 3更易于初學者理解。因此,不需要使用任何特定庫的新程序員可能會考慮學習Python 3,因為在未來幾年可能會逐漸轉向新語言,因為Python 2的更新停止并支持舊版本該語言版本減少。用法統計顯示使用Python 3的程序員數量已逐漸增加。
除非有明確的理由選擇一個版本的Python而不是另一個版本,例如需要處理用Python 2編寫的現有代碼,否則不值得擔心這個決定。大多數語法在每種語言版本中都是相同的。如果你需要從Python 2切換到Python 3,反之亦然,那么熟悉打印語句/函數的更改以及Python處理整數除法的方式之間的差異不應花費太長時間。
總結:以上就是本篇文章的全部內容,希望能對大家的學習有所幫助。
以上就是Python2和Python3之間有什么區別的詳細內容,更多請關注風君子博客其它相關文章!
總結
以上是生活随笔為你收集整理的Python2和Python3之间有什么区别(nimble22的博客)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 康巴丝钟表怎么调时间
- 下一篇: SAP Spartacus默认的base