該學 Python 2 還是 Python 3

姓名:姚麗冰 學號:16050120089

原文鏈接 mp.weixin.qq.com

題圖:from Instagram

【嵌牛導讀】:在 Python 3 出現(xiàn)之前怕膛,Python 在我眼里一直是一位穩(wěn)重扎實的大叔,資歷深厚掸茅,語法簡單柠逞,功能強大,兼顧面向?qū)ο蠛秃瘮?shù)式編程陵且,庫包豐富程度讓其他語言轉(zhuǎn)過來的程序員瞠目結(jié)舌并喟嘆:人生苦短个束,要用 Python 啊……這種情況一直持續(xù)到 Python 3 的出現(xiàn)。

【嵌牛鼻子】:python2,python3沪悲,兼容性阱表,轉(zhuǎn)型

【嵌牛提問】:python3為何出現(xiàn),python2涉馁、python3的對比爱致,該學python2還是python3

【嵌牛正文】:一個語言的版本升級是極為普通的事情,不升級才不正常糠悯,但 Python 3 是個例外,因為 Python 3 放棄了向下兼容试和,也就是說,你在 Python 2 系列版本中寫的代碼好渠,一直運行的好好的节视,放到 3 的環(huán)境里,有 99% 的可能性不能正常運行。最簡單的但指,你在 Python 2 中打印語句print "Hello World",放到 Python 3 里拦坠,系統(tǒng)會告訴你「SyntaxError: Missing parentheses in call to 'print'」剩岳。刺激不刺激?

Python 的開發(fā)者為什么要這么做呢晓铆,或者說為什么會出現(xiàn) Python 3绰播?在很長一段時間內(nèi),沒人解釋這事链蕊,Python 的創(chuàng)造者們認為谬泌,這不是很顯然的嘛。這就像一個具備超高幽默感的人聽到一個冷笑話樂得前仰后合哈哈大笑陪蜻,另一個人 —— 比如普通開發(fā)者 —— 把一顆冰涼的花生米放嘴里邊嚼邊問贱鼻,哥們勇婴,你特么到底笑啥呢嘱腥?

為什么會有 Python 3 的存在?Brett Cannon —— Python 的核心開發(fā)者 —— 在一次問答活動中終于做了一個合理的解釋橱脸。在此之前他一直神奇的認為大家都清楚為什么 Python 3 會出現(xiàn)分苇。他說:

回想起來我真是太傻了,竟然認為大部分人 —— 不管是剛接觸 Python 或者已經(jīng)有一段時間 —— 要么應該知道栏赴,要么有好奇心去獲取一個解釋或答案靖秩。但是并沒有。所以我會解釋一下為什么 Python 3 會存在花颗。為什么要破壞兼容性惠拭,改變 unicode/str/bytes,使得老代碼移植到 Python 3 非常困難棒呛。

最根本的原因是域携,在 Python 2 中文本和二進制數(shù)據(jù)是一個爛攤子。比如 'abcd' 這個表達式宰睡,在 Python 3 中气筋,語義非常明確,就是包含四個字母的字符串麸恍,但是在 Python 2 里,可以是四個字母的字符串抹沪,也可以代表 97融欧、98、99噪馏、100 的數(shù)組。你可以使用 print ord('a') 獲取到這個字母的 ASCII瓶颠〈烫遥總之,在 Python 2 中桃移,對于 str 代表的含義有兩種封豪,這改變了語言的唯一性炒瘟。而在 Python 3 中答案是唯一的。

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

>>> geektime = “極客時間”>>> geektime'\xe6\x9e\x81\xe5\xae\xa2\xe6\x97\xb6\xe9\x9\xb4'

Python 3 就簡明很多:

>>> geektime = “極客時間”>>> geektime'極客時間'

簡化語言锌钮,移除 str 的二義性能夠減少代碼的出錯率。避免 bug 是一件很重要的事情策治,但卻經(jīng)常被人遺忘兰吟。Python 之禪中的另一句話「清晰勝于晦澀」也表達了這個意思混蔼,歧義和隱性知識使得代碼不容易溝通,并容易形成 bug惭嚣。

正如 Brett Cannon 所言,人們有時會忘記 Python 有多久的歷史了

1989年的冬天延旧,Guido 為了度過一個有意義的圣誕節(jié)開始編寫 Python 語言的編譯器和解釋器槽地。1991年2月,第一個 Python 版本誕生集畅,編譯器是 C 語言實現(xiàn)的缅糟。這意味著 Python 的出現(xiàn)早于 1991年10月發(fā)布的第一版 Unicode 標準窗宦。后面出現(xiàn)的語言,比如 Java赴涵,Ruby 等都選擇在支持 Unicode 的標準上實現(xiàn)自己的 str 類型句占,這就讓 Python 3 變得很尷尬。2004年 Python 3 的方案開始醞釀,開發(fā)者們意識到祈餐,支持 Unicode 和來自任何語言的的文本是非常重要的。

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

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

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

以后我們再也不會做這種打破向后兼容性的事情圾结。

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

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

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

那么該學 Python 2 還是 Python 3 呢茸习?如果是五年前我推薦學習 Python 2畜隶,兩年前我推薦都要學都要掌握,事實上在 Mac 環(huán)境里用 homebrew 安裝和使用兩個版本的環(huán)境是非常方便的。時至今日籽慢,大量的庫已經(jīng)開始普遍支持 Python 3 了浸遗,而且 Python 3 的特性已經(jīng)遠遠不是解決 str 問題了,所以現(xiàn)在我會推薦你直接學習 Python 3箱亿。

看看 Instagram 的案例跛锌,在相當長的一段時間,Instagram 都跑在 Python 2.7 + Django 1.3 的組合之上届惋。在經(jīng)過一系列的討論后髓帽,他們最終做出一個重大的決定:升級到 Python 3。

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

關(guān)于 Instagram 和 Python 的故事击碗,大家可以下載「極客時間」筑悴,找到熱點專題里的「編程語言」,一篇長文稍途,有詳細的描述阁吝。

Python 相關(guān)文章:

人生苦短,我用 PythonPython 之禪Python 的進擊

點擊 閱讀原文械拍,下載極客時間 iOS 版突勇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坷虑,隨后出現(xiàn)的幾起案子甲馋,更是在濱河造成了極大的恐慌,老刑警劉巖迄损,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件定躏,死亡現(xiàn)場離奇詭異,居然都是意外死亡芹敌,警方通過查閱死者的電腦和手機痊远,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氏捞,“玉大人碧聪,你說我怎么就攤上這事∫壕ィ” “怎么了逞姿?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵辞嗡,是天一觀的道長。 經(jīng)常有香客問我滞造,道長欲间,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任断部,我火速辦了婚禮猎贴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蝴光。我一直安慰自己她渴,他們只是感情好,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布蔑祟。 她就那樣靜靜地躺著趁耗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疆虚。 梳的紋絲不亂的頭發(fā)上苛败,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音径簿,去河邊找鬼罢屈。 笑死,一個胖子當著我的面吹牛篇亭,可吹牛的內(nèi)容都是我干的缠捌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼译蒂,長吁一口氣:“原來是場噩夢啊……” “哼曼月!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起柔昼,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤哑芹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捕透,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聪姿,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年激率,在試婚紗的時候發(fā)現(xiàn)自己被綠了咳燕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勿决。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乒躺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出低缩,到底是詐尸還是另有隱情嘉冒,我是刑警寧澤曹货,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站讳推,受9級特大地震影響顶籽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜银觅,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一礼饱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧究驴,春花似錦镊绪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至熙侍,卻和暖如春榄鉴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蛉抓。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工庆尘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巷送。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓减余,卻偏偏與公主長得像,于是被迫代替她去往敵國和親惩系。 傳聞我的和親對象是個殘疾皇子位岔,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容