學Python用哪個版本?Python2與Python3有何區別?
為了能夠擁有更好的職業發展,不少人都會轉行學習程式設計,而python語言在程式設計中是非常受歡迎的語言之一,其就業前景好、工資待遇高,深受大家的喜歡和追捧。當我們學習python前,很多人都會考慮版本選擇問題,Python目前有兩個版本Python2和Python3,這兩個版本學習哪個好?它們之間有何區別呢?
python3 和 python2 是不相容的,而且差異比較大,python3是不向下相容的,但是絕大多陣列件和擴充套件都是基於python2的。目前實際應用中大部分暫不考慮 Python3,有的時候注意寫相容 2/3 的程式碼。用 Python2 為主的寫新程式碼時要考慮以後遷移到 Python3 的可能性。據資料統計顯示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。
其實python是linux上最常用的軟體之一,但是linux目前的版本大部分還是使用python2的,而且,在linux上依賴python2的程式更多一些,所以 Python3 要代替 python2 成為主流還需要幾年的時間。如果為了找工作還是學Python 2,學會了Python 2,由Python 2轉到python3也不難。
Python2與Python3到底有何區別呢?
1.效能
Py3.0執行 pystone benchmark的速度比Py2.5慢30%。Guido認為Py3.0有極大的最佳化空間,在字串和整形操作上可以取得很好的最佳化結果。
Py3.1效能比Py2.5慢15%,還有很大的提升空間。
2.編碼
Py3.X原始碼檔案預設使用utf-8編碼,這就使得以下程式碼是合法的:
>>> 中國 = 'china'
>>>print(中國)
china
3. 語法
1)去除了<>,全部改用!=
2)去除``,全部改用repr()
3)關鍵詞加入as 和with,還有True,False,None
4)整型除法返回浮點數,要得到整型結果,請使用//
5)加入nonlocal語句。使用noclocal x可以直接指派外圍(非全域性)變數
6)去除print語句,加入print()函式實現相同的功能。同樣的還有 exec語句,已經改為exec()函式
4. 字串和位元組串
1)現在字串只有str一種型別,但它跟2.x版本的unicode幾乎一樣。
2)關於位元組串,請參閱“資料型別”的第2條目
5.資料型別
1)Py3.X去除了long型別,現在只有一種整型——int,但它的行為就像2.X版本的long
2)新增了bytes型別,對應於2.X版本的八位串,定義一個bytes字面量的方法如下:
>>> b = b'china'
>>> type(b)
str物件和bytes物件可以使用.encode() (str -> bytes) or .decode() (bytes -> str)方法相互轉化。
>>> s = b.decode()
>>> s
'china'
>>> b1 = s.encode()
>>> b1
b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函式都被廢棄。同時去掉的還有
dict.has_key(),用 in替代它吧
6.物件導向
1)引入抽象基類(Abstraact Base Classes,ABCs)。
2)容器類和迭代器類被ABCs化,所以cellections模組裡的型別比Py2.5多了很多。
3)迭代器的next()方法改名為__next__(),並增加內建函式next(),用以呼叫迭代器的__next__()方法
4)增加了@abstractmethod和 @abstractproperty兩個 decorator,編寫抽象方法(屬性)更加方便。
7.異常
1)所以異常都從 BaseException繼承,並刪除了StardardError
2)去除了異常類的序列行為和.message屬性
3)用 raise Exception(args)代替 raise Exception, args語法
4)捕獲異常的語法改變,引入了as關鍵字來標識異常例項,在Py2.5中:
>>> try:
... raise NotImplementedError('Error')
... except NotImplementedError, error:
... print error.message
...
Error
在Py3.0中:
>>> try:
raise NotImplementedError('Error')
except NotImplementedError as error: #注意這個 as
print(str(error))
Error
5)異常鏈,因為__context__在3.0a1版本中沒有實現
8.模組變動
1)移除了cPickle模組,可以使用pickle模組代替。最終我們將會有一個透明高效的模組。
2)移除了imageop模組
3)移除了 audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2,
rexec, sets, sha, stringold, strop, sunaudiodev, timing和xmllib模組
4)移除了bsddb模組(單獨釋出,可以從Python "bindings" for Oracle Berkeley DB獲取)
5)移除了new模組
6)os.tmpnam()和os.tmpfile()函式被移動到tmpfile模組下
7)tokenize模組現在使用bytes工作。主要的入口點不再是generate_tokens,而是 tokenize.tokenize()
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2759611/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學Python用哪個版本?Python3和Python2有何區別?Python
- 新手學python哪個版本好?Python2與Python3有何區別?Python
- Python2與Python3有何區別?選擇哪個合適?Python
- Python2和Python3有何區別?小白入門必看!Python
- Python2與Python3的區別Python
- Python和Matlab有何區別?哪個更難?PythonMatlab
- Python2和Python3的區別Python
- round四捨五入詳解--python2與python3版本間區別Python
- Python2和Python3的區別?Python入門學習Python
- python3和python2中的filter區別PythonFilter
- Python2和Python3的10大區別Python
- 詳解python2 和 python3的區別Python
- Python2 和 Python3 的區別及相容技巧Python
- 新手學習python2還是python3?詳細區別講解Python
- Linux哪個版本好?各個版本之間有什麼區別?Linux
- python和C++語言有何區別?哪個適合人工智慧?PythonC++人工智慧
- 除法運算子/在Python2和Python3中的區別Python
- Linux和Windows作業系統之間有何區別?學哪個好?LinuxWindows作業系統
- Python爬蟲與Java爬蟲有何區別?Python爬蟲Java
- win10有幾個版本?哪個版本最好_windows10各版本區別對比Win10Windows
- Python入門:Python 2與Python3有什麼區別?Python
- Python中列表、元組、字典有何區別?Python學習!Python
- urllib庫在python2和python3環境下的使用區別Python
- SQL JOIN 中 on 與 where 有何區別SQL
- UNIX與Linux有什麼區別?學習linux哪個書好Linux
- 在資料科學方面,python和R有何區別?資料科學Python
- 初學者學習python2還是python3?Python
- Linux系統常用的版本有哪些?有何區別呢?Linux
- CentOS和Ubuntu有什麼區別?選擇Linux哪個版本好?CentOSUbuntuLinux
- 什麼是OA,與Office 有何區別
- startup mount與startup restrict mount有何區別REST
- 同時有 python2和 python3,怎麼讓 ipython 選擇不同的版本啟動?Python
- 學習Python選擇Python2還是Python3呢?Python
- Python2轉Python3比較Python
- python2和python3的不同Python
- maya和3dmax有什麼區別 maya與3dmax學哪個好3D
- 當下應該學習Python哪個版本?哪個方向好?Python
- Python3 urllib 與 Python2 urllib的變化Python