Python2和python3的區(qū)別

1.python2的中文編碼問題

python2是用ASCII碼作為默認(rèn)編碼,因此在項(xiàng)目代碼中如果出現(xiàn)中文是會(huì)報(bào)錯(cuò)
需要添加 #-- encoding:utf-8 -- 頭文件來解決中文亂碼問題

2.除法符號(hào)/的區(qū)別

Python3中/表示真除,%表示取余,//表示地板除(結(jié)果取整);
Python2中/表示根據(jù)除數(shù)被除數(shù)小數(shù)點(diǎn)位得到結(jié)果,//同樣表示地板除
統(tǒng)一一下:Python3中/表示真除,%表示取余,//結(jié)果取整;Python2中帶上小數(shù)點(diǎn)/表示真除,%表示取余,//結(jié)果取整

3.python2中range和xrange的異同

python3中的range()函數(shù)是生成一個(gè)數(shù)組
函數(shù)說明:range([start,] stop[, step]),根據(jù)start與stop指定的范圍以及step設(shè)定的步長(zhǎng),生成一個(gè)序列。
range示例:

>>> range(5) 
[0, 1, 2, 3, 4] 
>>> range(1,5) 
[1, 2, 3, 4] 
>>> range(0,6,2)
[0, 2, 4]

python2中的xrange()和python3中的range()用法是完全相同的,所不同的是生成的不是一個(gè)數(shù)組,而是一個(gè)生成器。
xrange示例:

>>> xrange(5)
xrange(5)
>>> list(xrange(5))
[0, 1, 2, 3, 4]
>>> xrange(1,5)
xrange(1, 5)
>>> list(xrange(1,5))
[1, 2, 3, 4]
>>> xrange(0,6,2)
xrange(0, 6, 2)
>>> list(xrange(0,6,2))
[0, 2, 4]

這兩個(gè)輸出的結(jié)果都是一樣的,實(shí)際上有很多不同,range會(huì)直接生成一個(gè)list對(duì)象:

a = range(0,10) 
print type(a) 
print a 
print a[0], a[1] 

輸出結(jié)果:

<type 'list'>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
0 1

而xrange則不會(huì)直接生成一個(gè)list,而是每次調(diào)用返回其中的一個(gè)值:

a = xrange(0,10) 
print type(a) 
print a 
print a[0], a[1] 

輸出結(jié)果:

<type 'xrange'>
xrange(10)
0 1

所以xrange做循環(huán)的性能比range好,尤其是返回很大的時(shí)候,盡量用xrange吧,除非你是要返回一個(gè)列表。

4.print的區(qū)別

print 在Python2中作為語句,在Python3中作為函數(shù)
實(shí)例1:
print(''hello''):在Python2中(''hello'')是語句的一部分,是一個(gè)整體;在Python3中''hello''是作為一個(gè)參數(shù)出入到函數(shù)中。
實(shí)例2:
print(''hello'', ''world''):在Python2中輸出一個(gè)元組,在Python3中輸出兩個(gè)字符串默認(rèn)中間用空格隔開。
注:在Python2.6+中導(dǎo)入future模塊中的print_fuction才能將print當(dāng)做函數(shù)使用。

5.字符串

Python2中字符串有兩個(gè)類型:unicode和str,前者表示文本字符串,后者表示字節(jié)序列,兩者沒有明顯的界限,開發(fā)者也感覺很混亂。
Python3中做了嚴(yán)格的區(qū)分,str表示字符串,byte表示字節(jié)序列,任何需要寫入文本或者網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)都只接收字節(jié)序列。

python編碼解碼問題.png

補(bǔ)充:encode()和decode()
decode 解碼,encode 編碼:字符串在Python內(nèi)部的表示是unicode編碼,在做編碼轉(zhuǎn)換時(shí),通常需要以u(píng)nicode作為中間編碼, 即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。
實(shí)例:s='中文' 如果是在utf8的文件中,該字符串就是utf8編碼,如果是在gb2312的文件中,則其編碼為gb2312。這種情況下,要進(jìn)行編碼轉(zhuǎn)換,都需要先用 decode方法將其轉(zhuǎn)換成unicode編碼,再使用encode方法將其轉(zhuǎn)換成其他編碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容