首頁  >  文章  >  後端開發  >  Python2和Python3之間有什麼區別

Python2和Python3之間有什麼區別

青灯夜游
青灯夜游原創
2018-11-16 17:33:4353949瀏覽

Python2和Python3之間的差異有:1、輸出print的不同;2、整數除法,傳回值的不同;3、列表理解循環變數方面;4、Unicode字串方面;5、錯誤處理方面;6、xrange方面不同等等。

Python2和Python3之間有什麼區別

本文操作環境: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的輸出:

Python2和Python3之間有什麼區別

Python 3.x的輸出:

Python2和Python3之間有什麼區別

因為print 'Hello, Geeks'在Python 3.x 不支持,所以出錯:

Python2和Python3之間有什麼區別

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中输出:

Python2和Python3之間有什麼區別

Python 3.x 中运行,报错:

Python2和Python3之間有什麼區別

try: 
     trying_to_check_error 
except NameError as err:    # 'as' 是 Python 3.x 必需的存在的关键字
     print (err, 'Error Caused')

运行:

Python 2.x中输出:

Python2和Python3之間有什麼區別

Python 3中输出:

Python2和Python3之間有什麼區別

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中输出:

Python2和Python3之間有什麼區別

Python 3中运行,报错:

Python2和Python3之間有什麼區別

选择哪种版本归结为你需要的是什么库

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之間有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn