網(wǎng)站性能檢測(cè)評(píng)分
注:本網(wǎng)站頁(yè)面html檢測(cè)工具掃描網(wǎng)站中存在的基本問(wèn)題,僅供參考。
python2和3學(xué)哪個(gè)
該學(xué) Python 2 還是 Python 3 行業(yè)視頻課程
題圖: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 類(lèi)型,這就讓 Python 3 變得很尷尬。2004年 Python 3 的方案開(kāi)始醞釀,開(kāi)發(fā)者們意識(shí)到,支持 Unicode 和來(lái)自任何語(yǔ)言的的文本是非常重要的。
Python 是一門(mén)面向世界的語(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ì)呢?新特性,比如類(lèi)型注解 Type Annotations;提供了更好的性能;并且社區(qū)的支持重心已經(jīng)完全遷移到 Python 3,有什么理由再去使用 Python 2 呢?
關(guān)于 Instagram 和 Python 的故事,大家可以下載「極客時(shí)間」,找到熱點(diǎn)專(zhuān)題里的「編程語(yǔ)言」,一篇長(zhǎng)文,有詳細(xì)的描述。
Python 相關(guān)文章:
人生苦短,我用 Python
Python 之禪
Python 的進(jìn)擊
點(diǎn)擊閱讀原文,下載極客時(shí)間 iOS 版。
學(xué)習(xí)Python,你選哪個(gè)版本 2 vs 3 ? 營(yíng)銷(xiāo)視頻課程
Python一個(gè)很大的缺陷是版本2 和版本3 不兼容,初學(xué)者也經(jīng)常糾結(jié)是學(xué)2還是學(xué)3。2017年Semaphore 社區(qū)調(diào)查了 Python 在 Semaphore 的托管 CI 服務(wù)中構(gòu)建應(yīng)用程序的使用情況。
1、Python2和Python3 事情情況
2016年調(diào)查顯示有 70% 以上的用戶仍在使用 Python 2.7,Python 3 的使用率較低。2017年,Python 3 的使用出現(xiàn)了上漲,漲幅約 8.2%。如下圖所示:
2、升級(jí)新版本愿望
2016年,Python 3.5 的使用率達(dá)到 60%,Python 3.4 的使用率占 30%。2017年,3.5 版和 3.4 版的使用率分別只占 34% 和 20%,有 35% 的用戶已經(jīng)開(kāi)始使用 Python 3.6。
可見(jiàn),使用 Python 3 的群體更愿意進(jìn)行版本更新。
3、Python 2.7 和 Python 3 各版本的使用率對(duì)比
從圖中,可以看到 Python 3 版的用戶群體正在迅速擴(kuò)展。
現(xiàn)在,新入行的學(xué)習(xí)者,如果不是項(xiàng)目限制必須學(xué) Python 2.7,那還是直接學(xué) Python3 吧。
畢竟 Guido van Rossum 曾于 2014 年宣布 Python 2.7 支持時(shí)間延長(zhǎng)到 2020 年。
Python Web 開(kāi)發(fā)框架 Django 釋出了 2.0 版本。主要變化包括:停止支持 Python 2 系列。
大名鼎鼎的NumPy也宣布,從2019年1月1日開(kāi)始,任何新的功能版本都只支持Python3。
企業(yè)里Python2和3哪個(gè)用的多?為什么? 企業(yè)視頻課程
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)題。可是現(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í)候也能更好的去加深一些形象
該學(xué) Python 2 還是 Python 3 推廣視頻課程
題圖: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 類(lèi)型,這就讓 Python 3 變得很尷尬。2004年 Python 3 的方案開(kāi)始醞釀,開(kāi)發(fā)者們意識(shí)到,支持 Unicode 和來(lái)自任何語(yǔ)言的的文本是非常重要的。
Python 是一門(mén)面向世界的語(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ì)呢?新特性,比如類(lèi)型注解 Type Annotations;提供了更好的性能;并且社區(qū)的支持重心已經(jīng)完全遷移到 Python 3,有什么理由再去使用 Python 2 呢?
關(guān)于 Instagram 和 Python 的故事,大家可以下載「極客時(shí)間」,找到熱點(diǎn)專(zhuān)題里的「編程語(yǔ)言」,一篇長(zhǎng)文,有詳細(xì)的描述。
Python 相關(guān)文章:
人生苦短,我用 Python
Python 之禪
Python 的進(jìn)擊
點(diǎn)擊閱讀原文,下載極客時(shí)間 iOS 版。