一:使用importerror,python3中將一些python2的模組名稱做了修改,需要我們做一些處理來保證**在不同python版本中能夠正常執行
# -*- coding: utf-8 -*-urllib庫也是不相容python2和python3的try: # python3
from
configparser import configparser
except importerror:
# python2
from
configparser import configparser
config =configparser() #
do something
# -*- coding: utf-8 -*-二:根據版本來判斷try: # python2
from
urllib import urlencode
from
urllib import quote
from
urlparse import urlparse
import urllib2
asrequest
except importerror:
# python3
from
urllib.parse import urlencode
from
urllib.parse import quote
from
urllib.parse import urlparse
import urllib.request
asrequest #
do something
根據sys.version_info.major來判斷python的版本,根據不同的版本匯入不同的庫。
# -*- coding: utf-8 -*-import sys三、使用指令碼將py2**轉為py3if sys.version_info.major == 2
: # python2
from
urllib import urlencode
from
urllib import quote
from
urlparse import urlparse
import urllib2
asrequest
else
: # python3
from
urllib.parse import urlencode
from
urllib.parse import quote
from
urllib.parse import urlparse
import urllib.request
asrequest
# do something
使用命令2to3 -w file.py可以直接在原地修改檔案。其他命令可以使用2to3 --help檢視;2to3 file.py可以看到轉變前後的內容對比
2to3是python自帶的乙個**轉換工具,可以將python2的**自動轉換為python3的**。當然,不幸的是轉換出的**並沒有對python2的相容做任何的處理。所以我們並不真正使用2to3轉換出的**。執行 2to3 file.py 檢視輸出資訊,並修正相關問題。
四、使用python -3執行python程式
2to3 可以檢查出很多python2&3的相容性問題,但也有很多問題是2to3發現不了的。在加上 -3 引數後,程式在執行時會在控制台上將python2和python3不一致,同時2to3無法處理的問題提示出來。比如python3和python2中對除法的處理規則做過改變。使用-3引數執行4/2將提示 deprecationwarning: classic int division 。
python -3 file.py
五、使用__future__匯入
使用python3的print函式,禁用python2的print語句:from __future__ import print_function
像python3一樣,字串字面量的型別為文字(python2中的unicode,python3中的str),而不是位元組(python2中的str,python3中的bytes)像python3一樣,int除以int得float,而不像python2那樣是整除:
from __future__ import division
from __future__ import unicode_literal
python2和python3的print不完全一樣,print在python2中是個關鍵字,是個函式
整除///
python3
python2
unittest.mock.magicmock
mock.magicmock
urllib.request.urlretrieve
urllib.urlretrieve
queue
queue
functools.reduce
reduce
在python2中,列表推導式中的索引變數的是可以洩露到其封閉作用域中的。而python3中則不可以。
下面舉乙個簡單的例子說明這個問題,如我們在乙個for迴圈內部使用列表推導式
for i in range(2):
a = [i for i in range(5)]
print(i)12
3在python3中,上面的**輸出為
>>0
>>112
而在python2中,上面的**輸出為
>>4
>>4
參考:
python3和python2的區別
1.效能 py3.0執行 pystone benchmark的速度比py2.5慢30 guido認為py3.0有極大的優化空間,在字串和整形操作上可 以取得很好的優化結果。py3.1效能比py2.5慢15 還有很大的提公升空間。2.編碼 py3.x原始碼檔案預設使用utf 8編碼,這就使得以下 是合...
Python2和Python3的比較
python2 python3 print fish print fish unicode 是單獨的 unicode utf 8 字串 b b china byte 和 bytearrays type b type bytes s b.decode 轉化成 string 型別b1 s encode ...
python3和python2的區別
這個星期開始學習python了,因為看的書都是基於python2.x,而且我安裝的是python3.1,所以書上寫的地方好多都不適用於python3.1,特意在google上search了一下3.x和2.x的區別。特此在自己的空間中記錄一下,以備以後查詢方便,也可以分享給想學習python的frie...