公司新聞,軟件行業(yè)資訊,通知公告
Python2將停止維護(hù),進(jìn)入Python3時(shí)代
來(lái)源:未知 時(shí)間:2019-55-10 瀏覽次數(shù):580次
Python2將停止維護(hù),進(jìn)入Python3時(shí)代,作為目前最為流行的編程語(yǔ)言,Python 的出現(xiàn)讓計(jì)算機(jī)編程不再是生僻的專業(yè)技能,而是常人都能學(xué)習(xí)和使用的萬(wàn)金油,它也是人工智能領(lǐng)域里最為常用的語(yǔ)言之一。不過(guò)在三個(gè)月內(nèi),Python 或許要經(jīng)歷史上最大的一次變化。
昨天,Python 官方網(wǎng)站的一紙聲明《Python 2 的落幕》引發(fā)了人們的廣泛討論:該開(kāi)發(fā)社區(qū)表示,官方對(duì)于 Python 2 的支持將會(huì)在 2020 年 1 月 1 日結(jié)束,在這之后即使是出現(xiàn)安全問(wèn)題,舊版本的語(yǔ)言也不會(huì)得到任何改進(jìn)。人們現(xiàn)在必須立即轉(zhuǎn)移到 3.0 以上版本了。
目前,仍有一些開(kāi)發(fā)者以志愿者的身份維護(hù) Python2 語(yǔ)言。不過(guò)他們已共同決定,2020 年 1 月 1 日將是 Python2「生命終結(jié)」的那一天。該日之后,所有 Python2 相關(guān)的維護(hù)都將終止。
為什么 Python2 更新到 Python3 這么慢
不太了解編程的讀者可能會(huì)有個(gè)疑問(wèn):總是提 Python3 比 Python2 好太多,為什么還是有人不更新呢?
主要有以下幾個(gè)原因:
1. 工程穩(wěn)定性相比軟件的更新速度更為重要。
編程語(yǔ)言是構(gòu)成軟件的基石,編程語(yǔ)言如果發(fā)生了更新?lián)Q代,軟件的更新不是一件小事,需要全面地對(duì)所有代碼進(jìn)行更新。在這一過(guò)程中,如果出現(xiàn)新舊版本不兼容、代碼穩(wěn)定性變差等情況,可能會(huì)影響到用戶的持續(xù)使用。因此,對(duì)于一些版本迭代,很多軟件開(kāi)發(fā)者選擇不更新。寧可保證用戶使用的穩(wěn)定性,也不能急于更新到最新版本。
2. Python 官方「允許」Python2 持續(xù)存在。
Python 官方在文檔中也提到,大版本的更新有可能會(huì)「?jìng)Α归_(kāi)發(fā)者。具體而言,如果在 2006 年就迅速要求開(kāi)發(fā)者放棄 Python2,則很多開(kāi)發(fā)者可能因?yàn)殚_(kāi)發(fā)成本問(wèn)題,直接放棄 Python。繁榮的開(kāi)發(fā)者社區(qū)是維持 Python 編程語(yǔ)言地位的重要條件,因此官方一直在更新維護(hù) Python2,讓更多的開(kāi)發(fā)者留存在社區(qū)中。
3. Python2 確實(shí)也好用。
雖然相比 Python3,Python2 存在很多大的問(wèn)題,但是 Python2 依然也是一個(gè)開(kāi)發(fā)者友好的 Python 版本,在 Python2 時(shí)期就有很多開(kāi)源庫(kù)支持了。因此,一些開(kāi)發(fā)者希望繼續(xù)使用 Python2。
這些原因下來(lái),Python3 取代 Python2 的進(jìn)程就拖了十來(lái)年。不過(guò),隨著機(jī)器學(xué)習(xí)的發(fā)展,機(jī)器學(xué)習(xí)領(lǐng)域?qū)幊陶Z(yǔ)言的性能有很高的要求,且大部分新的工具都支持 Python3。因此,使用性能更好,有更多工具支持的 Python3 成為了開(kāi)發(fā)者的必然選擇。
官方答疑
Python2 是 2000 年發(fā)布的。一些年之后,我們意識(shí)到需要對(duì) Python 進(jìn)行一次大的更新升級(jí)。因此在 2006 年,我們開(kāi)始了 Python3 的開(kāi)發(fā)工作。因?yàn)楹芏嗳嗽诋?dāng)時(shí)沒(méi)有更新,而我們也不希望這次更新給他們?cè)斐蓳p害,因此多年來(lái)我們一直在維護(hù)并公開(kāi)新的 Python2 和 Python3 版本。
但是這樣一來(lái),維護(hù) Python 的工作變得非常困難。Python2 中有一些改進(jìn)和維護(hù)是很難進(jìn)行下去的。這會(huì)擠占我們提升 Python3 速度和性能的精力。
而且,如果還有很多人繼續(xù)使用 Python2,那些用 Python 開(kāi)發(fā)程序的開(kāi)源工作者工作起來(lái)會(huì)更困難。他們不能使用 Python3 中的新特性讓開(kāi)源工具變得更好用。
我們不想傷害使用 Python2 的開(kāi)發(fā)者,因此在 2008 年,我們宣布 Python2 將在 2015 年終止,并希望大家能夠更新。當(dāng)時(shí),一些人更新了,但是還有一些人留在了 Python2 上,因此我們將終止時(shí)間推后到了 2020 年。
Python3的特點(diǎn)
Python3的特點(diǎn)
1. 明確區(qū)分字符和字節(jié)類型
沒(méi)遇到過(guò)Python編碼問(wèn)題都不能稱之為真正的Python程序員,但凡是在中文環(huán)境下使用Python或多或少都遇到過(guò)字符編碼的問(wèn)題,最常見(jiàn)的錯(cuò)誤就是UnicodeEncodeError,UnicodeDecodeError 這樣的錯(cuò)誤。出現(xiàn)這種錯(cuò)誤的根本原因在于Python2積攢下來(lái)的歷史包袱,默認(rèn)使用ASCII作為編碼格式,字符串和字節(jié)類型界限模糊,字符串又分為str和unicode類型,有時(shí)一個(gè)字符串既是str類型,又可以是byte類型,混亂至極。所以在Python3徹底解決的這種情況,首先Python3使用utf-8作為默認(rèn)編碼,這樣就兼容了所有字符,無(wú)論是中文、日文、韓文還是火星文都可以表示了,此外,str和byte兩種類型做了明確的區(qū)分,因此,使用Python3可解決99%的編碼錯(cuò)誤問(wèn)題。
2. 取消老式類
Python2 為了兼容之前的版本,Python中的類還分為新式類和舊式類,舊式類由于早期的設(shè)計(jì)缺陷導(dǎo)致功能不完善,于是推出了新式類,這樣一來(lái),在python2中就一直存在新舊兩種形式的類,而在Python3就徹底把舊式類拋棄掉了。這也很多程度上減少了開(kāi)發(fā)者每次創(chuàng)建一個(gè)對(duì)象還是顯式的指定object作為父類的情景。
3. 類型聲明
我們都知道Python是一門(mén)動(dòng)態(tài)語(yǔ)言,動(dòng)態(tài)語(yǔ)言的一大特點(diǎn)就是定義變量的時(shí)候不需要指定數(shù)據(jù)類型,變量本省是沒(méi)有類型整個(gè)說(shuō)法的,真正的類型是由對(duì)象才有,正因?yàn)槿绱?,這個(gè)特性給開(kāi)發(fā)者帶來(lái)靈活和便利性,與此同時(shí),有利也有弊,任何變量在運(yùn)行期你是無(wú)法確定變量的類型的,程序不得不在運(yùn)行時(shí)才能確定類型,這樣就會(huì)造成一個(gè)問(wèn)題,如果你是API的調(diào)用者,當(dāng)API的提供方?jīng)]有提供詳細(xì)的文檔說(shuō)明或者代碼注釋的時(shí)候,你根本就無(wú)法利用他們給你提供的服務(wù),而且,項(xiàng)目規(guī)模變大之后,沒(méi)有類型聲明的代碼對(duì)維護(hù)也是一大挑戰(zhàn),因?yàn)?,Python3考慮到這種情況,新增了類型聲明,在方法定義或者數(shù)據(jù)的返回值,都可以指定一個(gè)數(shù)據(jù)類型,明確要求調(diào)用者必須使用指定的類型才能調(diào)用該方法。
4. 異步
Python雖然提高的開(kāi)發(fā)的效率,但是帶來(lái)的代價(jià)就是程序性能上的損耗,因?yàn)樗且环N解釋型語(yǔ)言,速度上自然比不上靜態(tài)語(yǔ)言,與此同時(shí),Python天生的GIL語(yǔ)言,并不能充分利用多核CPU,使得程序可以并行執(zhí)行。所以,多線程面對(duì)計(jì)算密集型場(chǎng)景成了雞肋。為了解決這一問(wèn)題,Python引入了 ascync ,開(kāi)始原生支持異步操作,這使得在單線程情況下,也能充分利用系統(tǒng)資源,提高程序性能。