狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動(dòng)力 > 頭條 > python2和3區(qū)別

網(wǎng)站性能檢測(cè)評(píng)分

注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。

python2和3區(qū)別

該學(xué) Python 2 還是 Python 3 行業(yè)視頻課程

img

權(quán)安蕾

關(guān)注

題圖:from Instagram

在 Python 3 出現(xiàn)之前,Python 在我眼里一直是一位穩(wěn)重扎實(shí)的大叔,資歷深厚,語(yǔ)法簡(jiǎn)單,功能強(qiáng)大,兼顧面向?qū)ο蠛秃瘮?shù)式編程,庫(kù)包豐富程度讓其他語(yǔ)言轉(zhuǎn)過(guò)來(lái)的程序員瞠目結(jié)舌并喟嘆:人生苦短,要用 Python 啊……這種情況一直持續(xù)到 Python 3 的出現(xiàn)。

一個(gè)語(yǔ)言的版本升級(jí)是極為普通的事情,不升級(jí)才不正常,但 Python 3 是個(gè)例外,因?yàn)?Python 3 放棄了向下兼容,也就是說(shuō),你在 Python 2 系列版本中寫(xiě)的代碼,一直運(yùn)行的好好的,放到 3 的環(huán)境里,有 99% 的可能性不能正常運(yùn)行。最簡(jiǎn)單的,你在 Python 2 中打印語(yǔ)句print "Hello World",放到 Python 3 里,系統(tǒng)會(huì)告訴你「SyntaxError: Missing parentheses in call to 'print'」。刺激不刺激?

Python 的開(kāi)發(fā)者為什么要這么做呢,或者說(shuō)為什么會(huì)出現(xiàn) Python 3?在很長(zhǎng)一段時(shí)間內(nèi),沒(méi)人解釋這事,Python 的創(chuàng)造者們認(rèn)為,這不是很顯然的嘛。這就像一個(gè)具備超高幽默感的人聽(tīng)到一個(gè)冷笑話樂(lè)得前仰后合哈哈大笑,另一個(gè)人 —— 比如普通開(kāi)發(fā)者 —— 把一顆冰涼的花生米放嘴里邊嚼邊問(wèn),哥們,你特么到底笑啥呢?

為什么會(huì)有 Python 3 的存在?Brett Cannon —— Python 的核心開(kāi)發(fā)者 —— 在一次問(wèn)答活動(dòng)中終于做了一個(gè)合理的解釋。在此之前他一直神奇的認(rèn)為大家都清楚為什么 Python 3 會(huì)出現(xiàn)。他說(shuō):

回想起來(lái)我真是太傻了,竟然認(rèn)為大部分人 —— 不管是剛接觸 Python 或者已經(jīng)有一段時(shí)間 —— 要么應(yīng)該知道,要么有好奇心去獲取一個(gè)解釋或答案。但是并沒(méi)有。所以我會(huì)解釋一下為什么 Python 3 會(huì)存在。為什么要破壞兼容性,改變 unicode/str/bytes,使得老代碼移植到 Python 3 非常困難。

最根本的原因是,在 Python 2 中文本和二進(jìn)制數(shù)據(jù)是一個(gè)爛攤子。比如 'abcd' 這個(gè)表達(dá)式,在 Python 3 中,語(yǔ)義非常明確,就是包含四個(gè)字母的字符串,但是在 Python 2 里,可以是四個(gè)字母的字符串,也可以代表 97、98、99、100 的數(shù)組。你可以使用print ord('a')獲取到這個(gè)字母的 ASCII??傊?,在 Python 2 中,對(duì)于 str 代表的含義有兩種,這改變了語(yǔ)言的唯一性。而在 Python 3 中答案是唯一的。

「Python之禪」里講過(guò),「找到一種或唯一的一種解決方案去解決問(wèn)題」。文字既能代表文本數(shù)據(jù)又能代表二進(jìn)制數(shù)據(jù)這很麻煩。一旦對(duì)象脫離我們的控制,就會(huì)讓人變得恐慌。有人說(shuō)我們可以用 Unicode,但實(shí)際中人們并不會(huì)那么做,有事還會(huì)引發(fā)不必要的麻煩。比如在 Python 2 中,中文顯示是這樣的:

>>> geektime = “極客時(shí)間”

>>>geektime

'\xe6\x9e\x81\xe5\xae\xa2\xe6\x97\xb6\xe9\x9\xb4'

Python 3 就簡(jiǎn)明很多:

'極客時(shí)間'

簡(jiǎn)化語(yǔ)言,移除 str 的二義性能夠減少代碼的出錯(cuò)率。避免 bug 是一件很重要的事情,但卻經(jīng)常被人遺忘。Python 之禪中的另一句話「清晰勝于晦澀」也表達(dá)了這個(gè)意思,歧義和隱性知識(shí)使得代碼不容易溝通,并容易形成 bug。

正如 Brett Cannon 所言,人們有時(shí)會(huì)忘記 Python 有多久的歷史了

1989年的冬天,Guido 為了度過(guò)一個(gè)有意義的圣誕節(jié)開(kāi)始編寫(xiě) Python 語(yǔ)言的編譯器和解釋器。1991年2月,第一個(gè) Python 版本誕生,編譯器是 C 語(yǔ)言實(shí)現(xiàn)的。這意味著 Python 的出現(xiàn)早于 1991年10月發(fā)布的第一版 Unicode 標(biāo)準(zhǔn)。后面出現(xiàn)的語(yǔ)言,比如 Java,Ruby 等都選擇在支持 Unicode 的標(biāo)準(zhǔn)上實(shí)現(xiàn)自己的 str 類型,這就讓 Python 3 變得很尷尬。2004年 Python 3 的方案開(kāi)始醞釀,開(kāi)發(fā)者們意識(shí)到,支持 Unicode 和來(lái)自任何語(yǔ)言的的文本是非常重要的。

Python 是一門面向世界的語(yǔ)言,而不只是那些支持 ASCII 碼覆蓋的羅馬數(shù)字的語(yǔ)言。這是 Python 3 在處理文本時(shí)選擇使用 Unicode 的原因。

Python 3 的開(kāi)發(fā)過(guò)程大致是這樣的:

在 2004 年我們開(kāi)始開(kāi)始設(shè)計(jì) Python 3。我們清楚 Python 的受歡迎程度在不斷上升,我們也希望能夠延續(xù)這種勢(shì)頭。但這也同時(shí)意味著如果我們想及時(shí)修正所有的設(shè)計(jì)缺陷來(lái)保證它的受歡迎度,最好趁現(xiàn)在而不是以后。我們?cè)O(shè)想 Python 3 相較于 Python 2 會(huì)持續(xù)更長(zhǎng)一段時(shí)間,而 Python 2.7 僅僅是用來(lái)維護(hù)以前遺留的項(xiàng)目,不會(huì)用于新項(xiàng)目中,那用 Python 3 寫(xiě)出的代碼一定會(huì)多于用 Python 2 的。所以我們決定來(lái)承受由 Python 2 向 3 轉(zhuǎn)型之痛。并且在這種設(shè)想下開(kāi)發(fā)了 Python 3。

以后我們?cè)僖膊粫?huì)做這種打破向后兼容性的事情。

但是事情顯然沒(méi)有開(kāi)發(fā)者想象的那么簡(jiǎn)單,由于缺乏向下的兼容性,而且 Python 2 的代碼歷史悠久,庫(kù)包豐富,并且大部分程序都是生產(chǎn)環(huán)境的應(yīng)用,遷移成本太高,看不到顯而易見(jiàn)的好處。另外,由于 Python 2 是如此好用以至于開(kāi)發(fā)者們掌握了熟練的技巧避免 str 帶來(lái)的陷阱。發(fā)布完 Python 3 之后,Python 的核心開(kāi)發(fā)者們認(rèn)為社區(qū)會(huì)最終摒棄上一個(gè)版本,痛痛快快的轉(zhuǎn)向新世界。但事與愿違,兩個(gè)版本并存的情況持續(xù)了近十年之久。Python 的開(kāi)發(fā)者們又花費(fèi)了更多的時(shí)間設(shè)計(jì)了一個(gè) Python 2/3 的兼容子集來(lái)實(shí)現(xiàn)這種過(guò)渡。

關(guān)于 Python 2 和 3的主要區(qū)別,可以參考這篇文章:

http://runoob/python/python-2x-3x.html

那么該學(xué) Python 2 還是 Python 3 呢?如果是五年前我推薦學(xué)習(xí) Python 2,兩年前我推薦都要學(xué)都要掌握,事實(shí)上在 Mac 環(huán)境里用 homebrew 安裝和使用兩個(gè)版本的環(huán)境是非常方便的。時(shí)至今日,大量的庫(kù)已經(jīng)開(kāi)始普遍支持 Python 3 了,而且 Python 3 的特性已經(jīng)遠(yuǎn)遠(yuǎn)不是解決 str 問(wèn)題了,所以現(xiàn)在我會(huì)推薦你直接學(xué)習(xí) Python 3。

看看 Instagram 的案例,在相當(dāng)長(zhǎng)的一段時(shí)間,Instagram 都跑在 Python 2.7 + Django 1.3 的組合之上。在經(jīng)過(guò)一系列的討論后,他們最終做出一個(gè)重大的決定:升級(jí)到 Python 3。

Python 3 有什么優(yōu)勢(shì)呢?新特性,比如類型注解 Type Annotations;提供了更好的性能;并且社區(qū)的支持重心已經(jīng)完全遷移到 Python 3,有什么理由再去使用 Python 2 呢?

關(guān)于 Instagram 和 Python 的故事,大家可以下載「極客時(shí)間」,找到熱點(diǎn)專題里的「編程語(yǔ)言」,一篇長(zhǎng)文,有詳細(xì)的描述。

Python 相關(guān)文章:

人生苦短,我用 Python

Python 之禪

Python 的進(jìn)擊

點(diǎn)擊閱讀原文,下載極客時(shí)間 iOS 版。

Python2.x與Python3.x版本區(qū)別 流量視頻課程

img

王涵易

關(guān)注

Python2.x與3.x版本區(qū)別 Python的3.0版本,常被稱為Python 3000,或簡(jiǎn)稱Py3k。相對(duì)于Python的早期版本,這是一個(gè)較大的升級(jí)。 為了不帶入過(guò)多的累贅,Python 3.0在設(shè)計(jì)的時(shí)候沒(méi)有考慮向下相容。 許多針對(duì)早期Python版本設(shè)計(jì)的程式都無(wú)法在Python 3.0上正常執(zhí)行。 為了照顧現(xiàn)有程式,Python 2.6作為一個(gè)過(guò)渡版本,基本使用了Python 2.x的語(yǔ)法和庫(kù),同時(shí)考慮了向Py..

Python2.x與3.x版本區(qū)別

Python的3.0版本,常被稱為Python 3000,或簡(jiǎn)稱Py3k。相對(duì)于Python的早期版本,這是一個(gè)較大的升級(jí)。

為了不帶入過(guò)多的累贅,Python 3.0在設(shè)計(jì)的時(shí)候沒(méi)有考慮向下相容。

許多針對(duì)早期Python版本設(shè)計(jì)的程式都無(wú)法在Python 3.0上正常執(zhí)行。

為了照顧現(xiàn)有程式,Python 2.6作為一個(gè)過(guò)渡版本,基本使用了Python 2.x的語(yǔ)法和庫(kù),同時(shí)考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語(yǔ)法與函數(shù)。

新的Python程式建議使用Python 3.0版本的語(yǔ)法。

除非執(zhí)行環(huán)境無(wú)法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方庫(kù)。目前不支援Python 3.0的第三方庫(kù)有Twisted, py2exe, PIL等。

大多數(shù)第三方庫(kù)都正在努力地相容Python 3.0版本。即使無(wú)法立即使用Python 3.0,也建議編寫(xiě)相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7來(lái)執(zhí)行。

主要變化

Python 3.0的變化主要在以下幾個(gè)方面:

print語(yǔ)句沒(méi)有了,取而代之的是print()函數(shù)。 Python 2.6與Python 2.7部分地支持這種形式的print語(yǔ)法。在Python 2.6與Python 2.7里面,以下三種形式是等價(jià)的:

print "fish"print ("fish") #注意print后面有個(gè)空格print("fish") #print()不能帶有任何其它參數(shù)然而,Python 2.6實(shí)際已經(jīng)支持新的print()語(yǔ)法:

from __future__ import print_functionprint("fish", "panda", sep=', ')新的str類別表示一個(gè)Unicode字串,相當(dāng)于Python 2.x版本的unicode類別。而位元組序列則用類似b"abc"的語(yǔ)法表示,用bytes類表示,相當(dāng)于Python 2.x的str類別。

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

from __future__ import unicode_literalsprint(repr("fish"))除法運(yùn)算符"/"在Python 3.x內(nèi)總是返回浮點(diǎn)數(shù)。而在Python 2.6內(nèi)會(huì)判斷被除數(shù)與除數(shù)是否是整數(shù)。如果是整數(shù)會(huì)返回整數(shù)值,相當(dāng)于整除;浮點(diǎn)數(shù)則返回浮點(diǎn)數(shù)值。

為了讓Python 2.6統(tǒng)一返回浮點(diǎn)數(shù)值,可以:

from __future__ import pisionprint(3/2)捕獲異常的語(yǔ)法由except exc, var改為except exc as var。使用語(yǔ)法except (exc1, exc2) as var可以同時(shí)捕獲多種類別的異常。 Python 2.6已經(jīng)支援這兩種語(yǔ)法。集合(set) 的新寫(xiě)法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。字典推導(dǎo)式(Dictionary comprehensions) {expr1: expr2 for k, v in d},這個(gè)語(yǔ)法等價(jià)于result={}for k, v in d.items(): result[expr1]=expr2return result集合推導(dǎo)式(Set Comprehensions) {expr1 for x in stuff}。這個(gè)語(yǔ)法等價(jià)于:

result = set()for x in stuff: result.add(expr1)return result八進(jìn)制數(shù)必須寫(xiě)成0o777,原來(lái)的形式0777不能用了;二進(jìn)制必須寫(xiě)成0b111。新增了一個(gè)bin()函數(shù)用于將一個(gè)整數(shù)轉(zhuǎn)換成二進(jìn)制字串。 Python 2.6已經(jīng)支援這兩種語(yǔ)法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。如果兩個(gè)物件之間沒(méi)有定義明確的有意義的順序。使用<, >,<=, >=比較它們會(huì)投擲異常。比如1< ""在Python 2.6里面會(huì)返回True,而在Python 3.0里面會(huì)投擲異?!,F(xiàn)在cmp(), instance.__cmp__()函數(shù)已經(jīng)被刪除??梢宰⑨尯瘮?shù)的參數(shù)與返回值。此特性可方便IDE對(duì)原始碼進(jìn)行更深入的分析。例如給參數(shù)增加類別訊息:def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass合并int與long類型。多個(gè)模塊被改名(根據(jù)PEP8):舊的名字新的名字_winregwinregConfigParserconfigparsercopy_regcopyregQueuequeueSocketServersocketserverreprreprlibStringIO模塊現(xiàn)在被合并到新的io模組內(nèi)。 new, md5, gopherlib等模塊被刪除。 Python 2.6已經(jīng)支援新的io模組。httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib被合并到http包內(nèi)。取消了exec語(yǔ)句,只剩下exec()函數(shù)。 Python 2.6已經(jīng)支援exec()函數(shù)。

企業(yè)里Python2和3哪個(gè)用的多?為什么? 企業(yè)視頻課程

img

宛白

關(guān)注

python2和python3的差異

如果你是一個(gè)初學(xué)者,或許你曾經(jīng)觸摸過(guò)其他的編程言語(yǔ),你可能不知道,在開(kāi)端學(xué)習(xí)python的時(shí)分都會(huì)遇到一個(gè)比較讓人很頭疼的問(wèn)題:版別問(wèn)題??!是學(xué)習(xí)python2 仍是學(xué)習(xí) python3 ?這是十分讓人糾結(jié)的!

查找一下便會(huì)發(fā)現(xiàn)python3 和 python2 是不兼容的,并且差異比較大,究竟學(xué)習(xí)哪個(gè)版別呢?

所以先學(xué) Python2 仍是 Python3 都不是問(wèn)題,或許說(shuō)都是問(wèn)題??墒乾F(xiàn)在總算不必糾結(jié)這個(gè)問(wèn)題了!哈哈,好開(kāi)心

因?yàn)橐粋€(gè)開(kāi)發(fā)者已經(jīng)發(fā)布了一個(gè)網(wǎng)站來(lái)倒計(jì)時(shí)Python 2.7的“退休”。

能夠看出,Python 2.7有望在兩年后退休。

開(kāi)發(fā)商表明,因?yàn)楣俜降娜掌跊](méi)有發(fā)布,估計(jì)Python 2.7會(huì)在2020年4月12日退休,這是時(shí)刻的時(shí)分,pycon將舉辦。

Python 2,感謝您多年的忠誠(chéng)服務(wù)。

巨蟒3,現(xiàn)在你在舞臺(tái)上。

Python 2.7是2 x系列的最終一個(gè)版別。它的繼任者Python 3在2008年12月發(fā)布,但它與2。X系列不兼容。3的3的特征和語(yǔ)法被移植回2.6和2.7。2.7的支撐時(shí)刻至少為10年,并將在2020之前供給過(guò)錯(cuò)批改。

怎么轉(zhuǎn)換為Python 3?

如果您的主代碼仍然根據(jù)Python 2,這是完全能夠了解的。最流行的包PyPI上現(xiàn)在能夠運(yùn)轉(zhuǎn)在Python 2和Python 3,添加更多的日常。為了簡(jiǎn)化轉(zhuǎn)換,官方搬遷指南供給了在Python 3中運(yùn)轉(zhuǎn)Python 2代碼的主張。

所以我主張:

1. 如果是你在企業(yè)中,需求用到python而學(xué)習(xí)python的話,那就要看企業(yè)的使用python的版別進(jìn)行學(xué)習(xí);

2. 如果想要更多的老練解決方案,最少的bug,最安穩(wěn)的使用那就用python2 ;

3. 如果你是在讀大學(xué)的學(xué)生,那我主張你學(xué)習(xí)python3,比及結(jié)業(yè)的時(shí)分或許python已經(jīng)成為了干流。

另外,選2仍是3一般都是編程小白才會(huì)考慮。考慮的起點(diǎn)是作為一個(gè)初學(xué)者,有時(shí)候在學(xué)習(xí)的過(guò)程中會(huì)出現(xiàn)一些問(wèn)題或者會(huì)參考一些項(xiàng)目去學(xué)習(xí),這個(gè)時(shí)候會(huì)想一下,2是干流或者是3。已然剛學(xué)何不找個(gè)干流的。其實(shí)不管是2仍是3,只需照這一個(gè)學(xué),就可以了。中心的差異在學(xué)習(xí)的時(shí)候也能更好的去加深一些形象

img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動(dòng)力姐姐微信

img
img

TOP