在2.x中:打印html,在3.x中必須改為:打印(html)。
導入urllib2
ImportError:沒有名為“urllib2”的模塊
在python3.x中,使用urllib.request而不是urllib2。
導入線程
ImportError:沒有名為“thread”的模塊
在python3.x中,用_thread(前面加下劃線)代替thread。
在2.x中,Exception異常,e: 3.x中,except(異常):
=================================
打印功能
雖然print語法是Python 3中的壹個小變化,應該廣為人知,但還是值得壹提的是,Python 2中的print語句在Python 3中被print()函數取代,這意味著需要輸出的對象在Python 3中必須用括號括起來。
在Python 2中也可以使用額外的括號。另壹方面,如果想在Python2中不帶括號調用Python 3中的print函數,就會觸發SyntaxError。
Python 2.7.6
打印“Python”,python_version()
打印“妳好,世界!”
打印(“妳好,世界!”)
打印“文本”,;打印“在同壹行打印更多文本”
輸出:
妳好,世界!
妳好,世界!
文本在同壹行打印更多文本
-
Python 3.4.1
print('Python ',python_version())
打印(“妳好,世界!”)
print("some text,",end= " ")
打印(“在同壹行打印更多文本”)
輸出:
妳好,世界!
壹些文本,在同壹行打印更多的文本
打印“妳好,世界!”
文件" & ltipython-input-3-139 a7c 5835 BD >,行1
打印“妳好,世界!”
^
語法錯誤:無效語法
註意:在Python中,不管有沒有括號,輸出“Hello World”都是正常的。
但是如果多個對象同時輸出在括號裏,就會創建壹個tuple,因為在Python 2中,print是壹個語句,而不是壹個函數調用。
打印“Python”,python_version()
打印(' a ',' b ')
打印' a ',' b '
Python 2.7.7
('甲','乙')
壹個b
-
整數除法
因為人們往往會忽略Python 3在整數除法上的變化(寫錯了不會觸發語法錯誤),所以在Python 2中移植代碼或者執行Python 3的代碼時,我們需要特別註意這種變化。
所以我還是會盡量使用float(3)/2或者3/2.0,而不是Python 3腳本中的3/2,以避開Python中的代碼。
2環境可能會導致錯誤(或者相反,使用Python 2腳本中的from __future__ import division來使用Python。
3)的除法。
Python 2.7.6
3 / 2 = 1
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
Python 3.4.1
3 / 2 = 1.5
3 // 2 = 1
3 / 2.0 = 1.5
3 // 2.0 = 1.0
-
統壹碼
Python 2有壹個基於ascii的str()類型,可以通過單獨的unicode()函數轉換成unicode類型,但是沒有byte類型。
在Python 3中,終於有了Unicode(utf-8)字符串和兩個字節類:bytes和bytearrays。
Python 2.7.6
打印類型(unicode('這類似於python3字符串類型'))
& lt鍵入“unicode”& gt;
打印類型(b '字節類型不存在')
& lt“字符串”類型& gt
打印“它們真的是壹樣的”
他們真的是壹樣的
打印類型(bytearray(雖然b'bytearray奇怪地存在'))
& lt鍵入“bytearray”& gt;
Python 3.4.1有& ltclass ' bytes ' & gt
print('and Python ',python_version(),end= " ")
print(' also has ',type(bytearray(b'bytearrays '))
而Python 3.4.1也有& lt類“bytearray”& gt;
1
請註意,我們不能為數據添加字符串'+ b '字節'
-
類型錯誤回溯(最近壹次調用)
& ltipython-input-13-d3e 8942 CCF 81 & gt;在& lt模塊& gt()
-& gt;1 '註意,我們不能為數據添加字符串'+ b '字節'
TypeError:無法將“bytes”對象隱式轉換為str
=================================
python 2.4和python 3.0的比較
1.打印語句到函數的變化。
原文:打印1,2+3
更改為:打印(1,2+3)
第二,range和xrange
Original: range( 0,4)結果是list [0,1,2,3]。
更改為:列表(範圍(0,4))
原文:xrange( 0,4)適用於for循環的變量控制。
更改為:範圍(0,4)
第三,字符串
Original:字符串存儲為8位字符串。
更改為:字符串存儲為16位Unicode字符串。
第四,try except語句的變化
在2.x中,Exception異常,e: 3.x中,except(異常):
五、打開文件
原件:文件(...)
或者打開(...)
替換為:
您只能使用open(...)
6.從鍵盤輸入字符串。
Original: raw_input(“提示信息”)
更改為:輸入(“提示信息”)
七、字節數據類型
bytes對象是壹個不可變的數組。這些項目是8位字節,用0 & lt= x & lt256.
Bytes可以看作壹個“字節數組”對象,每個元素是壹個8位字節,取值範圍為0~255。
因為在python 3.0中字符串是以unicode存儲的,所以在編寫二進制文件時,字符串不能直接寫入(或讀取),必須以某種方式編碼成字節序列後才能寫入。
(a)字符串編碼(encode)是字節。
例如:s = "張三abc12 "
B = s.encode(編碼方法)
# b是字節類型的數據。
#常用的編碼方式有:“UFT-16”、“UTF-8”、“GBK”、“GB 2312”、“ASCII”、“拉丁1”等。
#註意:當字符串不能按照指定的編碼方法進行編碼時,將會引發異常。
(2)字節被解碼成字符串。
S = "張三abc12 "
B = s.encode( "gbk") # String s編碼為gbk格式的字節序列。
S1 = b.decode("gbk") #將字節序列B解碼為gbk格式的字符串。
# Description,當字節序列無法以指定的編碼格式解碼時,將引發異常。
(3)使用方法示例
#編碼=gbk
f =打開(" c:\\1234.txt "," wb ")
S = "張司abcd1234 "
# -
#在python2.4中,我們可以這樣寫:
# f .寫
#但是python 3.0中拋出了壹個異常。
# -
b = s . encode(“gbk”)
f .寫(b)
f.close()
輸入("?)
讀取該文件的示例:
#編碼=gbk
f = open("c:\\1234.txt "," rb ")
F.seek(0,2) #導航到文件的末尾。
N = f.tell() #讀取文件中的字節數。
重新定位到文件的開頭。
b = f.read( n)
# -
# B是python 2.4中的字符串類型。
#希望python 3.0中的B是字節。
#因此,需要根據指定的編碼方法確認編碼。
# -
s = b.decode("gbk ")
印刷品
# -
#您可以在python 2.4中編寫print s或print s。
#您必須用python 3.0編寫打印件。
# -
f.close()
輸入("?)
運行後,它應該顯示:
張李三司abcd1234
(4)字節序列壹旦形成,其內容是不可改變的,例如:
s="ABCD "
b = s . encode(“gbk”)
打印b[0] #顯示65
b[0] = 66
#執行此語句時出現異常:“bytes”對象不支持項賦值。
八、chr( K)和order(c)
python 2.4.2之前
Chr( K)將代碼K轉換成字符,K的範圍是0 ~ 255。
Ord( c)取單個字符的代碼,返回值範圍從0到255。
python 3.0
Chr( K)將代碼K轉換成字符,K的範圍是0 ~ 65535。
Ord( c)取單個字符的代碼,返回值範圍從0到65535。
九、除法運算符
python 2.4.2之前
10/3結果是3。
python 3.0
10/3的結果是3.30000000005
10 // 3結果是3
X.字節數組對象-新
(1)初始化
a =字節數組(10)
# a是壹個由十個字節組成的數組,數組的每個元素為壹個字節,類型借用了int。
#此時,每個元素的初始值都是0。
(2)字節數組是變量。
a =字節數組(10)
a[0] = 25
#可以用賦值語句更改其元素,但賦值必須在0到255之間。
(3)字節數組的切片仍然是字節數組。
(4)將字符串轉換成字節數組。
#編碼=gbk
S = "妳好"
B = s.encode( "GBK") #首先,字符串按照某種" GBK "編碼方式轉換成字節。
C = bytearray( b) #然後將字節轉換成字節數組。
妳也可以寫
C = bytearray ("Hello "," gbk ")
(5)將字節數組轉換成字符串。
c = bytearray( 4)
c[0]= 65;c[1]= 66;c[2]= 67;c[3]= 68
s = c.decode( "gbk ")
印刷品
#應顯示:ABCD
(6)字節數組可以用來寫文本文件。
#編碼=gbk
f =打開(" c:\\1234.txt "," wb ")
S = "張司abcd1234 "
# -
#在python2.4中,我們可以這樣寫:
# f .寫
#但是python 3.0中拋出了壹個異常。
# -
b = s . encode(“gbk”)
f .寫(b)
C=bytearray("王五"," gbk ")
f .寫(c)
f.close()
輸入("?)