從python2.7和python3.0的語法差異總結
一、基本語法
1、python3預設編碼
Python2 的預設編碼是 asscii,這也是導致 Python2 中經常遇到編碼問題的原因之一,至於是為什麼會使用 asscii 作為預設編碼,原因在於 Python這門語言誕生的時候還沒出現 Unicode。Python 3 預設採用了 UTF-8 作為預設編碼,因此你不再需要在檔案頂部寫 # coding=utf-8 了。
2、迭代器
在 Python2 中很多返回列表物件的內建函式和方法在 Python 3 都改成了返回類似於迭代器的物件,因為迭代器的惰性載入特性使得操作大資料更有效率。Python2 中的 range 和 xrange 函式合併成了 range,如果同時相容2和3,可以這樣:
另外,字典物件的 dict.keys()、dict.values() 方法都不再返回列表,而是以一個類似迭代器的 "view" 物件返回。高階函式 map、filter、zip 返回的也都不是列表物件了。Python2的迭代器必須實現 next 方法,而 Python3 改成了 next
3、print不再是語句,而是函式
比如原來是 print 'abc' 現在是 print('abc')
但是 python2.6+ 可以使用 from future import print_function 來實現相同功能。
4、原來1/2(兩個整數相除)結果是0,現在是0.5了
$ /opt/python3.6/bin/python3
Python 3.6.2 (default, Aug 4 2017, 10:27:08)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1/2
0.5
>>> 1/3
0.3333333333333333
5、新的字串格式化方法format取代%
6、python3 徹底廢棄了 long+int
統一為 int , 支援高精度整數運算
7、Python2中用raw_input ,Python3中用input
二、資料型別
1、字串
字串是最大的變化之一,這個變化使得編碼問題降到了最低可能。在 Python2 中,字串有兩個型別,一個是 unicode,一個是 str,前者表示文字字串,後者表示位元組序列,不過兩者並沒有明顯的界限,開發者也感覺很混亂,不明白編碼錯誤的原因,不過在 Python3 中兩者做了嚴格區分,分別用 str 表示字串,byte 表示位元組序列,任何需要寫入文字或者網路傳輸的資料都只接收位元組序列,這就從源頭上阻止了編碼錯誤的問題。
三、模組化程式設計
1、增加了一些新模組
concurrent.futures、venv、unittest.mock、asyncio、selectors、typing
2、去掉了一些模組或者函式
gopherlib、md5、contextlib.nested、inspect.getmoduleinfo等。
去掉的內容的原因主要是2點:
(1). 過時的技術產物,已經沒什麼人在用了;
(2). 出現了新的替代產物後者被證明存在意義不大。理論上對於開發者影響很小。
3、模組名稱修改
把一些相關的模組合併到同一個包裡面,如:
如httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放進了http裡面。
urllib, urllib2, urlparse, robotparse放進了urllib裡面。
SocketServer模組名改成了socketserver,Queue模組名改成queue
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2644248/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python與其它程式語言的差異化總結Python
- Python 與 JavaScript 語法差異點PythonJavaScript
- 不同資料庫SQL語法差異資料庫SQL
- ES6 export && export default 差異總結Export
- vue2與vue3的差異(總結)?Vue
- HTML 語法總結HTML
- UDP和TCP的差異UDPTCP
- 關於shell上面語法和windows編輯器差異造成問題解決Windows
- python 語法總結:Python語法快速入門Python
- 賓語從句總結
- 08【matplotlib】06matplotlib繪製多次圖形和不同圖形的差異介紹和總結
- Go語言基礎語法總結Go
- PHP高階語法總結PHP
- es6語法總結
- HTML5語法總結HTML
- selenium之xpath語法總結
- go 奇葩語法總結篇Go
- open policy agent 語法總結
- 通過 PHP 與 Python 程式碼對比淺析語法差異PHPPython
- 通過PHP與Python程式碼對比淺析語法差異PHPPython
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 從“中英文思維回譯法”看中英思維差異
- Akka 和 Storm 的設計差異ORM
- Oracle中exists和in的效能差異Oracle
- 【Python】Python 對比 C語言的差異PythonC語言
- ES6常用語法總結
- 05-ES6語法總結
- Emmet外掛常用語法總結
- css基本語法總結及使用CSS
- Python筆記_1語法總結Python筆記
- 2000年,2010年和2019年美國總人口的種族差異
- 從《戰神》到《哪吒》,看東西方神話的特點和差異
- 聊聊t-io和netty的差異Netty
- Bootstrap和Tailwind CSS之間的差異?bootAICSS
- ES6 語法學習總結
- 初學Solidity(一):語法大致總結Solid
- Vue3.2 setup語法糖總結Vue
- Creator 2.x 升級 3.x 基礎 API 差異總結API