教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

Python教程5:Python 2.x和Python 3.x的區(qū)別有哪些?

更新時(shí)間:2020年07月16日16時(shí)14分 來源:傳智播客 瀏覽次數(shù):

Python 3.x不兼容Python 2.x,但這兩個(gè)系列在語法層面的差別不大,Python 3.x移除了部分混淆的表達(dá)方式,在語句輸出、編碼、運(yùn)算和異常等方面做出了一些調(diào)整,但大體語法與Python 2.x相似,Python 3.x的使用者可以輕松閱讀Python 2.x編寫的代碼。

1. print函數(shù)替代了print語句

? 在Python 2.x中,輸出數(shù)據(jù)使用的是print語句。但是在Python 3.x中, print語句沒有了,取而代之的是print()函數(shù),示例代碼如下:

Python 2.x

>>> print(3,4)
(3, 4)

Python 3.x

>>> print(3,4)
3 4

2. Python 3.x默認(rèn)使用UTF-8編碼

Python 2.x中有ASCII Str()類型,unicode()是單獨(dú)的,不是byte類型。在Python 3.x版本的源代碼中,默認(rèn)使用的是UTF-8編碼,從而可以很好地支持中文或其它非英文字符。例如,輸出一句中文,Python 2.x和Python 3.x的結(jié)果如下所示:

Python 2.x

>>> str = "我愛北京天安門"
>>> str
'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'

Python 3.x

>>> str = "我愛北京天安門"
>>> str
'我愛北京天安門'

3.除法運(yùn)算

和其他語言相比,Python語言的除法非常高端,它的除法運(yùn)算包含兩個(gè)運(yùn)算符,分別是/和//,這兩個(gè)運(yùn)算符在Python 2.x和Python 3.x的使用如下所示:

● 運(yùn)算符 /

在Python 2.x中,使用運(yùn)算符/進(jìn)行除法運(yùn)算的方式和Java、C語言相似,整數(shù)相除的結(jié)果是一個(gè)整數(shù),浮點(diǎn)數(shù)除法會(huì)保留小數(shù)點(diǎn)的部分得到一個(gè)浮點(diǎn)數(shù)的結(jié)果。但是,在Python 3.x中使用運(yùn)算符/進(jìn)行除法,整數(shù)之間的相除,結(jié)果也會(huì)是浮點(diǎn)數(shù)。具體示例如下:

Python 2.x:

>>> 1 / 2
0
>>> 1.0 / 2.0
0.5

Python 3.x:

>>> 1/2
0.5

● 運(yùn)算符 //

使用運(yùn)算符//進(jìn)行的除法叫做floor除法,該種除法會(huì)對(duì)除法的結(jié)果自動(dòng)進(jìn)行一個(gè)floor操作。使用這種運(yùn)算符進(jìn)行的除法運(yùn)算,在Python 2.x和Python 3.x中是一致的。具體示例如下:

Python 2.x:

>>> -1 // 2
-1

Python 3.x:

>>> -1 // 2
-1

需要注意的是,使用運(yùn)算符//進(jìn)行的除法運(yùn)算并不是舍棄小數(shù)部分,而是執(zhí)行floor操作,即對(duì)小數(shù)部分進(jìn)行四舍五入操作。

4.異常

在Python 3.x版本中,異常處理改變的地方主要如下:

● 在Python 2.x版本,所有類型的對(duì)象都是直接被拋出的,但是在Python 3.x版本中,只有繼承自BaseException的對(duì)象才可以被拋出。

● 在Python 2.x中,捕獲異常的語法是“except exc, var”。在Python 3.x版本中,引入了as關(guān)鍵字,捕獲異常的語法變更為“except exc as var”。

● 在Python 2.x版本中,處理異常使用“raise Exception(args)”;在Python 3.x版本中,處理異常使用“raiseException, args”。

● Python 3.x取消了異常類的序列行為和.message屬性。

關(guān)于Python 2.x和Python 3.x處理異常的示例代碼如下所示:

python2.x

>>> try:
...  raise TypeError,"類型錯(cuò)誤"
... except TypeError,err:
...  print err.message
...
類型錯(cuò)誤

python3.x

>>> try:
...  raise TypeError,"類型錯(cuò)誤"
... except TypeError as err:
...  print(err)
...
類型錯(cuò)誤

5.八進(jìn)制字面量表示

在Python 3.x中,表示八進(jìn)制字面量的方式只有一種,并且必須寫成“0o1000”這樣的方式,原來“01000”的方式不能使用了,示例代碼如下:

Python 2.x

>>> 0o1000
512
>>> 01000
512

Python 3.x

>>> 01000
 File "<stdin>", line 1
  01000
     ^
SyntaxError: invalid token
>>> 0o1000
512

6.不等運(yùn)算符

Python 2.x的不等于運(yùn)算符有兩種寫法:!= 和 <>,但是,Python 3.x中去掉了<>, 只有!=一種寫法。示例代碼如下:

Python 2.x

>>> 1!=2
True
>>> 1<>2
True

Python 3.x

>>> 1!=2
True
>>> 1<>2
 File "<stdin>", line 1
  1<>2
   ^
SyntaxError: invalid syntax 
>>> 

7.數(shù)據(jù)類型

Python中數(shù)據(jù)類型的改變?nèi)缦拢?/p>

(1)Python 3.x去除了long類型,現(xiàn)在只有一種整型int,但它的行為就像是Python 2.x版本的long。

(2)Python 2.x新增了bytes類型,對(duì)應(yīng)于Python 2.x版本的八位串,定義一個(gè)bytes字面量的方法如下所示:

>>> b = b'china' 
>>> type(b) 
<type 'bytes'> 

字符串對(duì)象和bytes對(duì)象可以使用.encode() (str -> bytes) 或者 .decode() (bytes -> str)方法相互轉(zhuǎn)化,示例代碼如下:

>>> s = b.decode() 
>>> s 
'china' 
>>> b1 = s.encode()
>>> b1 
b'china' 

(3)Python 3.x中,字典的keys()、items()和values()方法用返回視圖代替了列表,而2.x中的iterkeys()等函數(shù)都被廢棄。同時(shí)去掉的還有has_key()方法,用in替代。

猜你喜歡


0 分享到:
和我們?cè)诰€交談!