網(wǎng)站性能檢測評分
注:本網(wǎng)站頁面html檢測工具掃描網(wǎng)站中存在的基本問題,僅供參考。
python3區(qū)別
Python 2將退出,Python3 現(xiàn)在到你登場了! 行業(yè)視頻課程
Python的創(chuàng)始人——Guido,荷蘭人,從阿姆斯特丹大學(xué)獲得了數(shù)學(xué)和計算機碩士學(xué)位。然而,盡管他算得上是一位數(shù)學(xué)家,但他更加享受計算機帶來的樂趣。Guido希望有一種語言,這種語言能夠像C語言那樣,能夠全面調(diào)用計算機的功能接口,又可以像shell那樣,可以輕松的編程。于是python就產(chǎn)生了。我最看重Python的效率高:Python 語言因為有了豐富強大的類庫,所以,Python 的開發(fā)效率能夠顯著提高。實現(xiàn)相同的功能,Python 代碼的文件往往只有 C、C++ 和 Java 代碼的 1/5~1/3。這也是為什么各大互聯(lián)網(wǎng)公司廣泛使用 Python 語言的原因。
可以看到 Python 2.7 預(yù)計將于兩年后退休。
該開發(fā)者表示,由于官方尚未放出準(zhǔn)確的日期,所以預(yù)計 Python 2.7 于 2020 年 4 月 12 日退休,這是到時 PyCon 的舉辦時間。
Python 2,感謝您多年以來的忠誠服務(wù)。
Python 3,現(xiàn)在到你登場了。
Python 2.7 是 2.x 系列的最后一個版本,它的繼承者 Python 3.0 在 2008 年 12 月發(fā)布,但不兼容 2.x 系列,3.0 的許多特性和語法向后移植到了 2.6 和 2.7。2.7 的支持時間將最少為 10 年,2020 年前會一直提供 bug 修正。
如何轉(zhuǎn)換到 Python 3?
如果你主要的代碼仍然基于 Python 2,這是完全可以理解的。PyPI 的大部分流行軟件包現(xiàn)在都可以在 Python 2 和 Python 3 上運行,而且每天都會增加更多。為了簡化轉(zhuǎn)換, 官方移植指南提供了在 Python 3 中運行 Python 2 代碼的建議。
Python 2.7
在 2008 年 Python 3.0 的發(fā)布之后,Python 2.7 于 2010 年 7 月 3 日發(fā)布,并計劃作為 2.x 版本的最后一版。發(fā)布 Python 2.7 的目的在于,通過提供一些測量兩者之間兼容性的措施,使 Python 2.x 的用戶更容易將功能移植到 Python 3 上。這種兼容性支持包括了 2.7 版本的增強模塊,如支持測試自動化的 unittest,用于解析命令行選項的 argparse,以及更方便的集合類。
Python 3
Python 3 被視為 Python 的未來,是目前正在開發(fā)中的語言版本。作為一項重大改革,Python 3 于 2008 年年末發(fā)布,以解決和修正以前語言版本的內(nèi)在設(shè)計缺陷。Python 3 開發(fā)的重點是清理代碼庫并刪除冗余,清晰地表明只能用一種方式來執(zhí)行給定的任務(wù)。
Python 2.7 具有 Python 2 和 Python 3.0 之間的早期迭代版本的獨特位置,它因為對許多具有魯棒性的庫具有兼容性,對于程序員而言一直是非常流行的選擇。當(dāng)我們今天討論 Python 2 時,我們通常指的是 Python 2.7 版本,因為它是最常用的版本。然而,Python 2.7 被認(rèn)為是一種遺留語言,且它的后續(xù)開發(fā),包括現(xiàn)在最主要的 bug 修復(fù),將在 2020 年完全停止。
對 Python 3.0 的主要修改包括將 print 語句更改為內(nèi)置函數(shù),改進整數(shù)分割的方式,并對 Unicode 提供更多的支持。起初,Python 3的采用很緩慢,因為該語言不能向后兼容 Python 2,這就需要人們決定該使用哪個版本的語言。此外,許多封裝庫庫只適用于 Python 2,但是由于 Python 3 背后的開發(fā)團隊重申了終止對 Python 2 的支持,促使更多的庫被移植到 Python 3 上來。從對 Python 3 提供支持的 Python 包的數(shù)量可以看出,Python 3 已得到越來越多的采用,在撰寫本文時,支持它的包就已包括了 339 個最受歡迎的 Python 包。
好了,今天的知識就分享到這里,如果在學(xué)習(xí)Python的路上遇到學(xué)習(xí)的問題,歡迎和小編交流學(xué)習(xí),你有好的學(xué)習(xí)Python方法,歡迎在下面評論區(qū)留言,一起討論。你現(xiàn)在用的Python2.7版本還是Python3x?
初學(xué)者可以直接學(xué)Python3嗎? 公司視頻課程
我是個喜歡嘗鮮的人,所以機器上的JDK、GoLang都是最新的,反正PC也不是生產(chǎn)環(huán)境。最近重裝機器,又正好看到Python 3.7的Alpha版本出來了,就下載了個最新的版本裝上,結(jié)果悲劇了,pip安裝TensorFlow死活不行。折騰小半天,還是乖乖地?fù)Q回3.6.x,這是TensorFlow Python API所支持的最新版本。
Python 3.6.2
前些日子,跟兩個兄弟聊天,突然奇想,打算做個MUD游戲來懷下舊。有個很不錯的MUD的框架叫Evennia,是Python寫的,而且是基于2.7的。我對機器的軟件環(huán)境有一種近乎變態(tài)的要求,混亂的版本搞在一起當(dāng)然不能接受,于是就用另一臺筆記本安裝了Python 2.7,用不同的電腦做不同的事。
大家都曉得,Python 2和3的差異很大,所以官方也還在同時維護2.7和3.x兩套東西。這么多年過去了,Python社區(qū)做了很多2to3的兼容性工作,按理說不存在選擇2還是3的問題了。但是有一些老頑固的人和老頑固的庫還在堅守2.x,這就給初學(xué)者帶來了困惑,到底該學(xué)哪一個。
對于初學(xué)者,我的建議當(dāng)然是直接學(xué)Python 3,除非有明確的指征要求你必須用Python 2(比如我想做MUD的例子)。
Python 3和2在語法層面改進很大,所以源代碼是不兼容的。Python 3是2008年發(fā)布的,至今10年了;Python 2的最后一個分支2.7是2010年中期發(fā)布的,此后就沒有大的改動了。從性價比的角度,也應(yīng)該選擇學(xué)習(xí)Python 3,而不是花時間去鼓搗2.x。
從Python 3.3(2012年Release的)開始,所有對標(biāo)準(zhǔn)庫的改進,都只在3.x版本中體現(xiàn)。這也表明了Python社區(qū)從2.x遷移到3.x的決心。Python官方網(wǎng)站上有一篇名叫《Should I use Python 2 or Python 3 in my development activity》的文章,有一句開宗明義的話:
Python 2.x is legacy, Python 3.x is the present and future of the language
作為初學(xué)者,是愿意跟一個前朝遺老玩呢,還是愿意跟進Python的現(xiàn)狀及未來?
最讓人擔(dān)心的,其實是第三方庫和框架,有的還在繼續(xù)用Python 2.x。我翻了一下github上的一些項目,發(fā)現(xiàn)但凡還停留在2.x的,基本處于沒人維護的狀態(tài)。大多數(shù)廣泛使用的庫,都已經(jīng)兼容Python 3了。Python官網(wǎng)上列出了一些,包括機器學(xué)習(xí)中最常用的數(shù)值計算庫Numpy和SciPy,機器視覺常用的OpenCV 3, HTTP庫Request,XML PARSER庫lxml,WEB框架Django.....關(guān)于3和2的兼容性,pythonhosted上有篇文章《Six: Python 2 and 3 Compatibility Library》講得非常詳細(xì),大家可以參考。
最新的Release::Python 3.6.4
可能也會有高手告訴新手,語法層面的差別不算事兒,Py2和Py3沒有區(qū)別,編程思想數(shù)據(jù)結(jié)構(gòu)算法才是核心吧啦吧啦,但是我覺得手鋸和電鋸還是有區(qū)別的。Python作為一門如日中天的動態(tài)語言,在不斷進化,語法改進的背后,也就是“編程思想”的改進。PL作為一個艱深的計算機科學(xué)分支,語法演化的背后是有深刻的思想性的東西的,輕視語法及其語義是不對的。
我的一個朋友遵循最新的C# Spec寫了一個軟件,然后告訴我說:這代表了我2017年的編程水準(zhǔn)(他從1988年開始編程)。我看了看,好多我沒見過的東西。雖然前幾年我也用C#寫過一款賴以謀生的軟件產(chǎn)品,但編程方式還比較古老一點,沒有深入了解C#語言的最新發(fā)展,換言之,也沒有了解C#的最新的編程思想。
新的一年里,如果想學(xué)一門新的手藝,就學(xué)Python 3吧。
Python2.x與Python3.x版本區(qū)別 企業(yè)視頻課程
Python2.x與3.x版本區(qū)別 Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對于Python的早期版本,這是一個較大的升級。 為了不帶入過多的累贅,Python 3.0在設(shè)計的時候沒有考慮向下相容。 許多針對早期Python版本設(shè)計的程式都無法在Python 3.0上正常執(zhí)行。 為了照顧現(xiàn)有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Py..
Python2.x與3.x版本區(qū)別
Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對于Python的早期版本,這是一個較大的升級。
為了不帶入過多的累贅,Python 3.0在設(shè)計的時候沒有考慮向下相容。
許多針對早期Python版本設(shè)計的程式都無法在Python 3.0上正常執(zhí)行。
為了照顧現(xiàn)有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數(shù)。
新的Python程式建議使用Python 3.0版本的語法。
除非執(zhí)行環(huán)境無法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方庫。目前不支援Python 3.0的第三方庫有Twisted, py2exe, PIL等。
大多數(shù)第三方庫都正在努力地相容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫相容Python 3.0版本的程式,然后使用Python 2.6, Python 2.7來執(zhí)行。
主要變化
Python 3.0的變化主要在以下幾個方面:
print語句沒有了,取而代之的是print()函數(shù)。 Python 2.6與Python 2.7部分地支持這種形式的print語法。在Python 2.6與Python 2.7里面,以下三種形式是等價的:
print "fish"print ("fish") #注意print后面有個空格print("fish") #print()不能帶有任何其它參數(shù)然而,Python 2.6實際已經(jīng)支持新的print()語法:
from __future__ import print_functionprint("fish", "panda", sep=', ')新的str類別表示一個Unicode字串,相當(dāng)于Python 2.x版本的unicode類別。而位元組序列則用類似b"abc"的語法表示,用bytes類表示,相當(dāng)于Python 2.x的str類別。
現(xiàn)在兩種類別不能再隱式地自動轉(zhuǎn)換,因此在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內(nèi)總是返回浮點數(shù)。而在Python 2.6內(nèi)會判斷被除數(shù)與除數(shù)是否是整數(shù)。如果是整數(shù)會返回整數(shù)值,相當(dāng)于整除;浮點數(shù)則返回浮點數(shù)值。
為了讓Python 2.6統(tǒng)一返回浮點數(shù)值,可以:
from __future__ import pisionprint(3/2)捕獲異常的語法由except exc, var改為except exc as var。使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。 Python 2.6已經(jīng)支援這兩種語法。集合(set) 的新寫法:{1,2,3,4}。注意{}仍然表示空的字典(dict) 。字典推導(dǎo)式(Dictionary comprehensions) {expr1: expr2 for k, v in d},這個語法等價于result={}for k, v in d.items(): result[expr1]=expr2return result集合推導(dǎo)式(Set Comprehensions) {expr1 for x in stuff}。這個語法等價于:
result = set()for x in stuff: result.add(expr1)return result八進制數(shù)必須寫成0o777,原來的形式0777不能用了;二進制必須寫成0b111。新增了一個bin()函數(shù)用于將一個整數(shù)轉(zhuǎn)換成二進制字串。 Python 2.6已經(jīng)支援這兩種語法。dict.keys(), dict.values(), dict.items(), map(), filter(), range(), zip()不再返回列表,而是迭代器。如果兩個物件之間沒有定義明確的有意義的順序。使用<, >,<=, >=比較它們會投擲異常。比如1< ""在Python 2.6里面會返回True,而在Python 3.0里面會投擲異常?,F(xiàn)在cmp(), instance.__cmp__()函數(shù)已經(jīng)被刪除??梢宰⑨尯瘮?shù)的參數(shù)與返回值。此特性可方便IDE對原始碼進行更深入的分析。例如給參數(shù)增加類別訊息:def sendMail(from_: str, to: str, title: str, body: str) -> bool: pass合并int與long類型。多個模塊被改名(根據(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語句,只剩下exec()函數(shù)。 Python 2.6已經(jīng)支援exec()函數(shù)。