python2和python3的差別
概述#
幾乎所有的Python 2程式都需要一些修改才能正常地執行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3
的實用指令碼(Utility Script),這個指令碼會將你的Python 2程式原始檔作為輸入,然後自動將其轉換到Python 3的形式。案例研究:將chardet
移植到Python 3(porting chardet to Python 3)描述瞭如何執行這個指令碼,然後展示了一些它不能自動修復的情況。這篇附錄描述了它能夠自動修復的內容。
print
語句#
在Python 2裡,print
是一個語句。無論你想輸出什麼,只要將它們放在print
print()
是一個函式。就像其他的函式一樣,print()
需要你將想要輸出的東西作為引數傳給它。
Notes | Python 2 | Python 3 |
---|---|---|
① | print | print() |
② | print1 | print(1) |
③ | print1,2 | print(1,2) |
④ | print1,2, | print(1,2,end=' ') |
⑤ | print>>sys.stderr,1,2,3 | print(1,2,3, file=sys.stderr) |
- 為輸出一個空白行,需要呼叫不帶引數的
print()
。 - 為輸出一個單獨的值,需要將這這個值作為
print()
的一個引數就可以了。 - 為輸出使用一個空格分隔的兩個值,用兩個引數呼叫
print()
- 這個例子有一些技巧。在Python 2裡,如果你使用一個逗號(,)作為
print
語句的結尾,它將會用空格分隔輸出的結果,然後在輸出一個尾隨的空格(trailing space),而不輸出回車(carriage return)。在Python 3裡,通過把end=' '
作為一個關鍵字引數傳給print()
可以實現同樣的效果。引數end
的預設值為'\n'
,所以通過重新指定end
引數的值,可以取消在末尾輸出回車符。 - 在Python 2裡,你可以通過使用
>>pipe_name
語法,把輸出重定向到一個管道,比如sys.stderr
。在Python 3裡,你可以通過將管道作為關鍵字引數file
print()
來完成同樣的功能。引數file
的預設值為std.stdout
,所以重新指定它的值將會使print()
輸出到一個另外一個管道。
Unicode字串#
Python 2有兩種字串型別:Unicode字串和非Unicode字串。Python 3只有一種型別:Unicode字串(Unicode strings)。
Notes | Python 2 | Python 3 |
---|---|---|
① | u'PapayaWhip' | 'PapayaWhip' |
② | ur'PapayaWhip\foo' | r'PapayaWhip\foo' |
- Python 2裡的Unicode字串在Python 3裡即普通字串,因為在Python 3裡字串總是Unicode形式的。
- Unicode原始字串(raw string)(使用這種字串,Python不會自動轉義反斜線"\")也被替換為普通的字串,因為在Python 3裡,所有原始字串都是以Unicode編碼的。
全域性函式unicode()
#
Python 2有兩個全域性函式可以把物件強制轉換成字串:unicode()
把物件轉換成Unicode字串,還有str()
把物件轉換為非Unicode字串。Python 3只有一種字串型別,Unicode字串,所以str()
函式即可完成所有的功能。(unicode()
函式在Python 3裡不再存在了。)
Notes | Python 2 | Python 3 |
---|---|---|
unicode(anything) | str(anything) |
long
長整型#
Python 2有為非浮點數準備的int
和long
型別。int
型別的最大值不能超過sys.maxint
,而且這個最大值是平臺相關的。可以通過在數字的末尾附上一個L
來定義長整型,顯然,它比int
型別表示的數字範圍更大。在Python 3裡,只有一種整數型別int
,大多數情況下,它很像Python 2裡的長整型。由於已經不存在兩種型別的整數,所以就沒有必要使用特殊的語法去區別他們。
Notes | Python 2 | Python 3 |
---|---|---|
① | x =1000000000000L | x =1000000000000 |
② | x =0xFFFFFFFFFFFFL | x =0xFFFFFFFFFFFF |
③ | long(x) | int(x) |
④ | type(x)islong | type(x)isint |
⑤ | isinstance(x,long) | isinstance(x,int) |
- 在Python 2裡的十進位制長整型在Python 3裡被替換為十進位制的普通整數。
- 在Python 2裡的十六進位制長整型在Python 3裡被替換為十六進位制的普通整數。
- 在Python 3裡,由於長整型已經不存在了,自然原來的
long()
函式也沒有了。為了強制轉換一個變數到整型,可以使用int()
函式。 - 檢查一個變數是否是整型,獲得它的資料型別,並與一個
int
型別(不是long
)的作比較。 - 你也可以使用
isinstance()
函式來檢查資料型別;再強調一次,使用int
,而不是long
,來檢查整數型別。
<> 比較運算子#
Python 2支援<>
作為!=
的同義詞。Python 3只支援!=
,不再支援<>了。
Notes | Python 2 | Python 3 |
---|---|---|
① | if x <> y: | if x != y: |
② | if x <> y<> z: | if x != y!= z: |
- 簡單地比較。
- 相對複雜的三個值之間的比較。
字典類方法has_key()
#
在Python 2裡,字典物件的has_key()
方法用來測試字典是否包含特定的鍵(key)。Python 3不再支援這個方法了。你需要使用in
運算子。
Notes | Python 2 | Python 3 |
---|---|---|
① | a_dictionary.has_key('PapayaWhip') | 'PapayaWhip'in a_dictionary |
② | a_dictionary.has_key(x)or a_dictionary.has_key(y) | x in a_dictionaryor y in a_dictionary |
③ | a_dictionary.has_key(xor y) | (x or y)in a_dictionary |
④ | a_dictionary.has_key(x+ y) | (x + y)in a_dictionary |
⑤ | x + a_dictionary.has_key(y) | x +(y in a_dictionary) |
- 最簡單的形式。
- 運算子
or
的優先順序高於運算子in
,所以這裡不需要新增括號。 - 另一方面,出於同樣的原因 —
or
的優先順序大於in
,這裡需要新增括號。(注意:這裡的程式碼與前面那行完全不同。Python會先解釋x or y
,得到結果x(如果x在布林上下文裡的值是真)或者y。然後Python檢查這個結果是不是a_dictionary的一個鍵。) - 運算子
in
的優先順序大於運算子+
,所以程式碼裡的這種形式從技術上說不需要括號,但是2to3
還是添加了。 - 這種形式一定需要括號,因為
in
的優先順序大於+
。
返回列表的字典類方法#
在Python 2裡,許多字典類方法的返回值是列表。其中最常用方法的有keys
,items
和values
。在Python 3裡,所有以上方法的返回值改為動態檢視(dynamic view)。在一些上下文環境裡,這種改變並不會產生影響。如果這些方法的返回值被立即傳遞給另外一個函式,並且那個函式會遍歷整個序列,那麼以上方法的返回值是列表或者檢視並不會產生什麼不同。在另外一些情況下,Python 3的這些改變干係重大。如果你期待一個能被獨立定址元素的列表,那麼Python 3的這些改變將會使你的程式碼卡住(choke),因為檢視(view)不支援索引(indexing)。
Notes | Python 2 | Python 3 |
---|---|---|
① | a_dictionary.keys() | list(a_dictionary.keys()) |
② | a_dictionary.items() | list(a_dictionary.items()) |
③ | a_dictionary.iterkeys() | iter(a_dictionary.keys()) |
④ | [i for iin a_dictionary.iterkeys()] | [i for iin a_dictionary.keys()] |
⑤ | min(a_dictionary.keys()) | no change |
- 使用
list()
函式將keys()
的返回值轉換為一個靜態列表,出於安全方面的考量,2to3
可能會報錯。這樣的程式碼是有效的,但是對於使用檢視來說,它的效率低一些。你應該檢查轉換後的程式碼,看看是否一定需要列表,也許檢視也能完成同樣的工作。 - 這是另外一種檢視(關於
items()
方法的)到列表的轉換。2to3
對values()
方法返回值的轉換也是一樣的。 - Python 3裡不再支援
iterkeys()
了。如果必要,使用iter()
將keys()
的返回值轉換成為一個迭代器。 2to3
能夠識別出iterkeys()
方法在列表解析裡被使用,然後將它轉換為Python 3裡的keys()
方法(不需要使用額外的iter()
去包裝其返回值)。這樣是可行的,因為檢視是可迭代的。2to3
也能識別出keys()
方法的返回值被立即傳給另外一個會遍歷整個序列的函式,所以也就沒有必要先把keys()
的返回值轉換到一個列表。相反的,min()
函式會很樂意遍歷檢視。這個過程對min()
,max()
,sum()
,list()
,tuple()
,set()
,sorted()
,any()
和all()
同樣有效。
被重新命名或者重新組織的模組#
從Python 2到Python 3,標準庫裡的一些模組已經被重新命名了。還有一些相互關聯的模組也被組合或者重新組織,以使得這種關聯更有邏輯性。
http
#
在Python 3裡,幾個相關的HTTP模組被組合成一個單獨的包,即http
。
Notes | Python 2 | Python 3 |
---|---|---|
① | importhttplib | import http.client |
② | importCookie | import http.cookies |
③ | importcookielib | import http.cookiejar |
④ |
| import http.server |
http.client
模組實現了一個底層的庫,可以用來請求HTTP資源,解析HTTP響應。http.cookies
模組提供一個蟒樣的(Pythonic)介面來獲取通過HTTP頭部(HTTP header)Set-Cookie傳送的cookies- 常用的流行的瀏覽器會把cookies以檔案形式存放在磁碟上,
http.cookiejar
模組可以操作這些檔案。 http.server
模組實現了一個基本的HTTP伺服器
urllib
#
Python 2有一些用來分析,編碼和獲取URL的模組,但是這些模組就像老鼠窩一樣相互重疊。在Python 3裡,這些模組被重構、組合成了一個單獨的包,即urllib
。
Notes | Python 2 | Python 3 |
---|---|---|
① | importurllib | import urllib.request, urllib.parse, urllib.error |
② | importurllib2 | import urllib.request, urllib.error |
③ | importurlparse | import urllib.parse |
④ | importrobotparser | import urllib.robotparser |
⑤ |
|
|
⑥ |
|
|
- 以前,Python 2裡的
urllib
模組有各種各樣的函式,包括用來獲取資料的urlopen()
,還有用來將URL分割成其組成部分的splittype()
,splithost()
和splituser()
函式。在新的urllib
包裡,這些函式被組織得更有邏輯性。2to3將會修改這些函式的呼叫以適應新的命名方案。 - 在Python 3裡,以前的
urllib2
模組被併入了urllib
包。同時,以urllib2
裡各種你最喜愛的東西將會一個不缺地出現在Python 3的urllib
模組裡,比如build_opener()
方法,Request
物件,HTTPBasicAuthHandler
和friends。 - Python 3裡的
urllib.parse
模組包含了原來Python 2裡urlparse
模組所有的解析函式。 urllib.robotparse
模組解析robots.txt
檔案。- 處理HTTP重定向和其他狀態碼的
FancyURLopener
類在Python 3裡的urllib.request
模組裡依然有效。urlencode()
函式已經被轉移到了urllib.parse
裡。 Request
物件在urllib.request
裡依然有效,但是像HTTPError
這樣的常量已經被轉移到了urllib.error
裡。
我是否有提到2to3
也會重寫你的函式呼叫?比如,如果你的Python 2程式碼裡匯入了urllib
模組,呼叫了urllib.urlopen()
函式獲取資料,2to3
會同時修改import
語句和函式呼叫。
Notes | Python 2 | Python 3 |
---|---|---|
|
|
相關推薦
python2和python3的差別
概述#幾乎所有的Python 2程式都需要一些修改才能正常地執行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3的實用指令碼(Utility Script),這個指令碼會將你的Python 2程式原始檔作為輸入,然後自動將其轉換到Pyt
Python2和Python3之間關於字串編碼處理的差別
0x00 字元的編碼
計算機畢竟是西方國家的發明,最開始並沒有想到會普及到全世界,只用一個位元組中的7位(ASCII)來表示字元對於現在龐大的文字數量來說顯然不夠,所以先後經歷了好幾套編碼方案,不同國家和地區又有自己的方案,造成了現在諸多的歷史遺留問題。具體講
Mac系統下安裝ipython分別支持python2和python3
python cnblogs rip fff tro -c 我們 usr sta
操作系統:Mac10.11.5
python2.7.13
python3.6.1
安裝python2:
brew install python
安裝python3:
brew in
創建Python2和Python3的虛擬環境virtualenv
get python版本 pan ear ubunt 虛擬環境 區分 切換 https 首先要先在電腦上安裝了Python2和Python3(可以參考一下我這篇文章:http://www.cnblogs.com/tk2049jq/p/7043480.html)
依次安
win10系統同時安裝python2和python3
2.4 pen 管理 enc pack 顯示 sta port bsp 1、官網下載python2和python3版本
2、安裝python3,勾上Add Python3.5 to PATH,自定義選擇安裝目錄,安裝,驗證:WIN+R--->cmd,輸入python看
Python2和Python3的一些語法區別
pythonPython2和Python3的一些語法區別pythonPython2和Python3的一些語法區別1.print2.input3. python3版本相對2版本的部分其他區別問題:為何會出現亂碼的情況問題:如何獲取編碼方式的信息?問題:在控制臺上看到的到底是什麽?1.print在版本2的使用方法
Windows下python2和python3共存時pip失效的解決辦法
python ins win style color python3安裝 解決 pan python3 同時有python2和python3的時候,使用pip install命令系統不能檢測出對應的python,所有不能再用pip install安裝包.改用以下命令:
為p
pycharm下同存Python2和Python3的運行方式問題
image set unit 運行方式 右鍵 16px ima span .cn
遇到問題:Python2和3同存的環境下,pycharm修改配置的路徑後,以“run unittest in xx”還是以Python2的環境執行。
原修改配置:file-settings
windows下python2和python3共存
python3 安裝目錄 script 3.5 .py https 默認 操作系統 真的 從github下載的python項目有時需要python2,有時需要python3,這個真的很惡心
配置步驟如下:
操作系統:win10
安裝步驟省略,相信都能安裝
(1)改名稱給電腦
Python2和Python3中print的不同點
換行 避免 不換行 現在 lap 信息 內置 引號 輸出字符串 在Python2和Python3中都提供print()方法來打印信息,但兩個版本間的print稍微有差異
主要體現在以下幾個方面:
1.python3中print是一個內置函數,有多個參數,而python2中p
python2和python3的區別?
ima tps python3 cnblogs .cn alt mage log http python2和python3的區別?
同時裝了python2和python3,pip沒法使用
clas 命令 csharp 解決方案 har 令行 highlight python3 怎麽辦 問題:windows系統,先裝了Python2,又裝了Python3,pip命令沒法使用,怎麽辦?
解決方案:打開命令行窗口,輸入以下命令
python3 -m pip in
urllib庫python2和python3具體區別
ble log redirect proxy dmgr python3 button ner net
Python 2 name
Python 3 name
urllib.urlretrieve()
urllib.request.urlretrieve(
python2和python3編碼
spa cal str -s span utf8編碼 odin post bytes python2編碼
unicode:unicode 你好 u‘\u4f60\u597d‘ | |
win 安裝python2和python3
gpo upload tps 分享 brush amd64 ima nbsp amd
1. 下載安裝包
https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi
windows下安裝Python2和Python3共存
scripts python3.6 令行 class for gpo 環境 分享圖片 python 一、Python安裝
1.下載安裝包
1 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64
python2和python3比較好的共存方法
python3 col 很多 和數 由於 log 多人 naconda packages 文章根據網絡資料編寫,只為個人學習使用。青山。。。
----------------------------------------------------
由於工作學習的需求,大家都
windows下同時安裝python2和python3
htm 正常 post 麻煩 ima 分享圖片 pos 一位 mage
之前學習的時候使用2.7比較多。
想練習3.7的時候,兩個版本兼容的問題,苦惱了幾天。
查了一下資料,發現了一個很好的方法。記錄一下,也做一個分享。
本篇內容主要講一下,在同一臺電腦上如何同時安裝P
Python2和Python3的區別
rexec args ring 獲得 mapping decorator 整型 import true 17年入手Python語言,直接學的是Python3的語法,後來出去面試發現幾乎所有招Python後端開發的都會問到Python2和Python3的區別,而且說得越詳細則
在同一臺電腦上同時安裝Python2和Python3
出現 有時 支持 無需 截圖 install path 文件 str 親測可行!!
目前Python的兩個版本Python2和Python3同時存在,且這兩個版本同時在更新與維護。
到底是選擇Python2還是選擇Python3,取決於當前要使用的庫、框架支持哪個版本。
python2和python3的差別
概述#幾乎所有的Python 2程式都需要一些修改才能正常地執行在Python 3的環境下。為了簡化這個轉換過程,Python 3自帶了一個叫做2to3的實用指令碼(Utility Script),這個指令碼會將你的Python 2程式原始檔作為輸入,然後自動將其轉換到Pyt
Python2和Python3之間關於字串編碼處理的差別
0x00 字元的編碼 計算機畢竟是西方國家的發明,最開始並沒有想到會普及到全世界,只用一個位元組中的7位(ASCII)來表示字元對於現在龐大的文字數量來說顯然不夠,所以先後經歷了好幾套編碼方案,不同國家和地區又有自己的方案,造成了現在諸多的歷史遺留問題。具體講
Mac系統下安裝ipython分別支持python2和python3
python cnblogs rip fff tro -c 我們 usr sta 操作系統:Mac10.11.5 python2.7.13 python3.6.1 安裝python2: brew install python 安裝python3: brew in
創建Python2和Python3的虛擬環境virtualenv
get python版本 pan ear ubunt 虛擬環境 區分 切換 https 首先要先在電腦上安裝了Python2和Python3(可以參考一下我這篇文章:http://www.cnblogs.com/tk2049jq/p/7043480.html) 依次安
win10系統同時安裝python2和python3
2.4 pen 管理 enc pack 顯示 sta port bsp 1、官網下載python2和python3版本 2、安裝python3,勾上Add Python3.5 to PATH,自定義選擇安裝目錄,安裝,驗證:WIN+R--->cmd,輸入python看
Python2和Python3的一些語法區別
pythonPython2和Python3的一些語法區別pythonPython2和Python3的一些語法區別1.print2.input3. python3版本相對2版本的部分其他區別問題:為何會出現亂碼的情況問題:如何獲取編碼方式的信息?問題:在控制臺上看到的到底是什麽?1.print在版本2的使用方法
Windows下python2和python3共存時pip失效的解決辦法
python ins win style color python3安裝 解決 pan python3 同時有python2和python3的時候,使用pip install命令系統不能檢測出對應的python,所有不能再用pip install安裝包.改用以下命令: 為p
pycharm下同存Python2和Python3的運行方式問題
image set unit 運行方式 右鍵 16px ima span .cn 遇到問題:Python2和3同存的環境下,pycharm修改配置的路徑後,以“run unittest in xx”還是以Python2的環境執行。 原修改配置:file-settings
windows下python2和python3共存
python3 安裝目錄 script 3.5 .py https 默認 操作系統 真的 從github下載的python項目有時需要python2,有時需要python3,這個真的很惡心 配置步驟如下: 操作系統:win10 安裝步驟省略,相信都能安裝 (1)改名稱給電腦
Python2和Python3中print的不同點
換行 避免 不換行 現在 lap 信息 內置 引號 輸出字符串 在Python2和Python3中都提供print()方法來打印信息,但兩個版本間的print稍微有差異 主要體現在以下幾個方面: 1.python3中print是一個內置函數,有多個參數,而python2中p
python2和python3的區別?
ima tps python3 cnblogs .cn alt mage log http python2和python3的區別?
同時裝了python2和python3,pip沒法使用
clas 命令 csharp 解決方案 har 令行 highlight python3 怎麽辦 問題:windows系統,先裝了Python2,又裝了Python3,pip命令沒法使用,怎麽辦? 解決方案:打開命令行窗口,輸入以下命令 python3 -m pip in
urllib庫python2和python3具體區別
ble log redirect proxy dmgr python3 button ner net Python 2 name Python 3 name urllib.urlretrieve() urllib.request.urlretrieve(
python2和python3編碼
spa cal str -s span utf8編碼 odin post bytes python2編碼 unicode:unicode 你好 u‘\u4f60\u597d‘ | |
win 安裝python2和python3
gpo upload tps 分享 brush amd64 ima nbsp amd 1. 下載安裝包 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64.msi
windows下安裝Python2和Python3共存
scripts python3.6 令行 class for gpo 環境 分享圖片 python 一、Python安裝 1.下載安裝包 1 https://www.python.org/ftp/python/2.7.14/python-2.7.14.amd64
python2和python3比較好的共存方法
python3 col 很多 和數 由於 log 多人 naconda packages 文章根據網絡資料編寫,只為個人學習使用。青山。。。 ---------------------------------------------------- 由於工作學習的需求,大家都
windows下同時安裝python2和python3
htm 正常 post 麻煩 ima 分享圖片 pos 一位 mage 之前學習的時候使用2.7比較多。 想練習3.7的時候,兩個版本兼容的問題,苦惱了幾天。 查了一下資料,發現了一個很好的方法。記錄一下,也做一個分享。 本篇內容主要講一下,在同一臺電腦上如何同時安裝P
Python2和Python3的區別
rexec args ring 獲得 mapping decorator 整型 import true 17年入手Python語言,直接學的是Python3的語法,後來出去面試發現幾乎所有招Python後端開發的都會問到Python2和Python3的區別,而且說得越詳細則
在同一臺電腦上同時安裝Python2和Python3
出現 有時 支持 無需 截圖 install path 文件 str 親測可行!! 目前Python的兩個版本Python2和Python3同時存在,且這兩個版本同時在更新與維護。 到底是選擇Python2還是選擇Python3,取決於當前要使用的庫、框架支持哪個版本。