【python教程】Python2.x與3​​.x版本區別

來源:互聯網
上載者:User

Python2.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的變化主要在以下幾個方面:

print語句沒有了,取而代之的是print()函數。 Python 2.6與Python 2.7部分地支援這種形式的print文法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:

print "fish"print ("fish") #注意print後面有個空格print("fish") #print()不能帶有任何其它參數

然而,Python 2.6實際已經支援新的print()文法:

from __future__ import print_functionprint("fish", "panda", sep=', ')

新的str類別表示一個Unicode字串,相當於Python 2.x版本的unicode類別。而位元組序列則用類似b"abc"的文法表示,用bytes類表示,相當於Python 2.x的str類別。

現在兩種類別不能再隱式地自動轉換,因此在Python 3.x裡面"fish"+b"panda"是錯誤。正確的寫法是"fish"+b"panda".decode("utf-8")。 Python 2.6可以自動地將位元組序列識別為Unicode字串,方法是:

from __future__ import unicode_literalsprint(repr("fish"))

除法運算子"/"在Python 3.x內總是返回浮點數。而在Python 2.6內會判斷被除數與除數是否是整數。如果是整數會返回整數值,相當於整除;浮點數則返回浮點數值。

為了讓Python 2.6統一返回浮點數值,可以:

from __future__ import divisionprint(3/2)

捕獲異常的文法由except exc, var改為except exc as var。使用文法except (exc1, exc2) as var可以同時捕獲多種類別的異常。 Python 2.6已經支援這兩種文法。

集合(set) 的新寫法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。

字典推導式(Dictionary comprehensions) {expr1: expr2 for k, v in d},這個文法等價於

result={}for k, v in d.items():    result[expr1]=expr2return result

集合推導式(Set Comprehensions) {expr1 for x in stuff}。這個文法等價於:

result = set()for x in stuff:    result.add(expr1)return result

八位元必須寫成0o777,原來的形式0777不能用了;二進位必須寫成0b111。新增了一個bin()函數用於將一個整數轉換成二進位字串。 Python 2.6已經支援這兩種文法。

dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。

如果兩個物件之間沒有定義明確的有意義的順序。使用<, >, <=, >=比較它們會投擲異常。比如1 < ""在Python 2.6裡面會返回True,而在Python 3.0裡面會投擲異常。現在cmp(), instance.__cmp__()函數已經被刪除。

可以注釋函數的參數與傳回值。此特性可方便IDE對原始碼進行更深入的分析。例如給參數增加類別訊息:

def sendMail(from_: str, to: str, title: str, body: str) -> bool:    pass

合并int與long類型。

多個模組被改名(根據PEP8):

舊的名字

新的名字

_winreg winreg

ConfigParser configparser

copy_reg copyreg

Queue queue

SocketServer socketserver

repr reprlib

StringIO模組現在被合并到新的io模組內。 new, md5, gopherlib等模組被刪除。 Python 2.6已經支援新的io模組。

httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包內。

取消了exec語句,只剩下exec()函數。 Python 2.6已經支援exec()函數。

以上就是【python教程】Python2.x與3.x版本區別的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.