天天看點

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

今天愛分享給大家帶來Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】,希望能夠幫助到大家。

Python 的3.x 版本相對于 Python 的早期版本,是一次較大的更新。為了不給系統帶入過多的負擔, Python 3.x 在設計時沒有考慮向下相容,即 Python3.x 和 Python2.x 是不相容的。許多針對早期 Python 版本設計的程式都無法在 Python 3.x 上正常執行。為了照顧現有的程式,Python 2.6 作為一個過渡版本, 基本使用了 Python 2.x 的文法和庫,同時也考慮了向 Python 3.x 的遷移,支援部分 Python3.x 的文法與函數。

目前最新的 Python 程式建議使用 Python 3.x 版本的文法。Python 3.x 的變化主要展現在以下幾個方面:

(1) print 函數

在 Python 3.x中,print 語句沒有了,取而代之的是 print 函數。在 Python 2.6 和 Python 2.7裡,以下三種形式是等價的:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】
python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(2) Unicode

Python 2.x 預設使用 ASCII 編碼,是以 Python 2.x 預設是不支援中文的,且變量命名隻能用英文。Python 3.x 預設使用 UTF-8 的編碼,是以 Python 3.x 預設是支援中文的,且變量命名能夠使用中文。如果在 Python 檔案中不指定頭資訊 # -*-coding:utf-8-*-.,那麼在 Python 2.x 中預設使用 ASCII 編碼,在 Python 3.x中預設使用 UTF-8 編碼。由于 Python 3.x源碼檔案預設使用 UTF-8 編碼,這就使得以下代碼是合法的:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

Python 2.x:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

Python 3.x:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(3) 除法運算

Python中的除法與其他語言相比顯得非常高端,它有一套很複雜的規則。Python 中的除法有兩個運算符:/和//。在Python 2.x中,對于/算法,整數相除的結果是一個整數,它會把小數部分完全忽略掉,浮點數除法會保留小數點的部分,得到一個浮點數的結果。在Python 3.x中,/除法不再這麼做了,整數相除的結果也會是浮點數。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

而對于 // 除法,這種除法被稱為 floor 除法,它會對除法的結果自動進行一個 floor 操作,在 Python 2.x 和 Python 3.x 中是一緻的。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

需要注意的是,// 并不是舍棄小數部分,而是執行 floor 操作。如果要截取整數部分,那麼需要使用 math 子產品的 trunc 函數。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(4) 八進制字面量表示

在 Python 3.x 中,表示八進制字面量的方式隻有一種,那就是 0o1000,而 Python 2.x 中的 01000 形式已經不能使用了。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(5) 不等運算符

在 Python 2.x 中,不等于 可以有兩種寫法,分别是 != 和 <> 在 Python 3.x 中去掉了 <> 隻有 != 一種寫法。

(6) 去掉了 repr 表達式 “

在 Python 2.x 中反引号相當于 repr 函數 (傳回一個對象的 string 格式) 的作用。在 Python 3.x 中去掉了 “這種寫法,隻允許使用 repr 函數,這樣做的目的是為了使代碼看上去更清晰。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(7) 打開檔案

在 Python 2.x 中使用 file(…) 或者 open(…) ,而在 Python 3.x 中隻能使用 open(…)

(8) 資料類型

Python 3.x 去除了 long 類型,現在隻有一種整型 int,但它的行為與 2.x 版本的 long 相同。還新增了 bytes 類型,對應于 2.x 版本的八位串,定義一個 bytes 字面量的方法如下:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

str 對象和 bytes 對象可以使用 .encode() 和 .decode() 方法互相轉化。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

(9) input 和 raw_input 函數

在 Python 2.x 中,raw_input 會将所有輸入的資料當作字元串看待,傳回值為字元串類型。而 input 輸入時必須是一個合法的 Python 表達式,格式與 Python 中的代碼一樣,其傳回值與輸入的資料類型相同。如果是 Python 2.x 版本,那麼 input 和 raw_input 都可以使用。如果是 Python 3.x 版本,那麼隻能使用 input。是以,建議都使用 input 函數。

(10) map、filter 和 reduce

在 Python2.x 的互動模式下輸入map和filter,可以看到它們兩者的類型是 built-in function(内置函數)

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

它們輸出的結果類型都是清單:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

但是在 Python3.x 中發生了變化:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

首先它們從函數變成了類,其次,它們的傳回結果也從清單變成了一個可疊代的對象,可以嘗試使用 next 函數來進行手工疊代:

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】

對于比較高端的 reduce 函數,它在 Python3.x中已經不屬于 built-in function,而是被挪到了 functools 子產品當中。

(11) xrange函數

xrange 可以生成序列。在 Python3.x 中取消了 xrange 函數,而使用 range 完全代替了 xrange 函數。在 Python 3.x 中調用 xrange 函數會報錯。

在 Python2.x 中 xrange() 函數用法與 range() 函數完全相同,所不同的是生成的不是一個清單,而是一個生成器。

python2.x和3.x的差別簡述_Python 2.x和Python 3.x版本有哪些差別?【面試題詳解】