Python2 與 Python3 區(qū)別

一.性能

python3.x的性能低于Python2.x,但是python3.x有極大的優(yōu)化空間精偿,正在追趕.

二.基本語(yǔ)法差異

一).核心語(yǔ)法差異

1.Python3對(duì)Unicode字符的原生支持
Python2中使用 ASCII 碼作為默認(rèn)編碼方式導(dǎo)致string有兩種類型str和unicode,Python3只支持unicode的string锻霎。python2和python3字節(jié)和字符對(duì)應(yīng)關(guān)系為:


img

2.Python3采用的是絕對(duì)路徑的方式進(jìn)行import蹈矮。
Python2中相對(duì)路徑的import會(huì)導(dǎo)致標(biāo)準(zhǔn)庫(kù)導(dǎo)入變得困難(想象一下,同一目錄下有file.py畜眨,如何同時(shí)導(dǎo)入這個(gè)文件和標(biāo)準(zhǔn)庫(kù)file)昼牛。Python3中這一點(diǎn)將被修改,如果還需要導(dǎo)入同一目錄的文件必須使用絕對(duì)路徑康聂,否則只能使用相關(guān)導(dǎo)入的方式來(lái)進(jìn)行導(dǎo)入贰健。
3.Python2中存在老式類和新式類的區(qū)別,Python3統(tǒng)一采用新式類恬汁。新式類聲明要求繼承object伶椿,必須用新式類應(yīng)用多重繼承。
4.Python3使用更加嚴(yán)格的縮進(jìn)氓侧。Python2的縮進(jìn)機(jī)制中脊另,1個(gè)tab和8個(gè)space是等價(jià)的,所以在縮進(jìn)中可以同時(shí)允許tab和space在代碼中共存约巷。
這種等價(jià)機(jī)制會(huì)導(dǎo)致部分IDE使用存在問(wèn)題偎痛。Python3中1個(gè)tab只能找另外一個(gè)tab替代,因此tab和space共存會(huì)導(dǎo)致報(bào)錯(cuò):TabError: inconsistent use of tabs and spaces in indentation.

二).廢棄類差異

1.print語(yǔ)句被python3廢棄独郎,統(tǒng)一使用print函數(shù)
2.exec語(yǔ)句被python3廢棄踩麦,統(tǒng)一使用exec函數(shù)
3.execfile語(yǔ)句被Python3廢棄,推薦使用exec(open("./filename").read())
4.不相等操作符"<>"被Python3廢棄氓癌,統(tǒng)一使用"!="
5.long整數(shù)類型被Python3廢棄谓谦,統(tǒng)一使用int
6.xrange函數(shù)被Python3廢棄,統(tǒng)一使用range顽铸,Python3中range的機(jī)制也進(jìn)行修改并提高了大數(shù)據(jù)集生成效率
7.Python3中這些方法再不再返回list對(duì)象:dictionary關(guān)聯(lián)的keys()茁计、values()、items()谓松,zip()星压,map(),filter()鬼譬,但是可以通過(guò)list強(qiáng)行轉(zhuǎn)換:

mydict={"a":1,"b":2,"c":3}
mydict.keys()  #<built-in method keys of dict object at 0x000000000040B4C8>
list(mydict.keys()) #['a', 'c', 'b']

8.迭代器iterator的next()函數(shù)被Python3廢棄娜膘,統(tǒng)一使用next(iterator)
9.raw_input函數(shù)被Python3廢棄,統(tǒng)一使用input函數(shù)
10.字典變量的has_key函數(shù)被Python廢棄优质,統(tǒng)一使用in關(guān)鍵詞
11.file函數(shù)被Python3廢棄竣贪,統(tǒng)一使用open來(lái)處理文件军洼,可以通過(guò)io.IOBase檢查文件類型
12.apply函數(shù)被Python3廢棄
13.異常StandardError 被Python3廢棄,統(tǒng)一使用Exception

三).修改類差異

1.浮點(diǎn)數(shù)除法操作符/和//區(qū)別

  • Python2:/是整數(shù)除法演怎,//是小數(shù)除法
    運(yùn)行 "5/3"得出結(jié)果為1, 如果想得出小數(shù)部分, 則需要把代碼改成:"float(5)/float(3)", 即加上類型.
  • Python3:/是小數(shù)除法匕争,//是整數(shù)除法。
    運(yùn)行"5/3"得出結(jié)果為1.666666, 如果只得到整數(shù)部分,則需要修改代碼為:"5//3", 即使用整除.

2.異常拋出和捕捉機(jī)制區(qū)別
所有異常都從BaseException繼承, 并且刪除了StandardError

  • Python2
    try:
      ...
    except Exception, e:
raise IOError, "file error" #拋出異常
except NameError, err:  #捕捉異常
  • Python3
    try:
        ...
    except Exception as e:
raise IOError("file error") #拋出異常
except NameError as err: #捕捉異常

3.for循環(huán)中變量值區(qū)別

  • Python2爷耀,for循環(huán)會(huì)修改外部相同名稱變量的值
     i = 1
     print ('comprehension: ', [i for i in      range(5)])
     print ('after: i =', i  ) #i=4
  • Python3甘桑,for循環(huán)不會(huì)修改外部相同名稱變量的值
    i = 1
    print ('comprehension: ', [i for i in range(5)])
    print ('after: i =', i  ) #i=1

4.round函數(shù)返回值區(qū)別

  • Python2,round函數(shù)返回float類型值
     isinstance(round(15.5),int) #True
  • Python3中只有同一數(shù)據(jù)類型的對(duì)象可以比較
     isinstance(round(15.5),float) #True

5.比較操作符區(qū)別

  • Python2中任意兩個(gè)對(duì)象都可以比較
    11 < 'test' #True
  • Python3中只有同一數(shù)據(jù)類型的對(duì)象可以比較
   11 < 'test' # TypeError: unorderable types: int() < str()

6.map歹叮、filter 和 reduce的差異

  • 這三個(gè)函數(shù)號(hào)稱是函數(shù)式編程的代表跑杭。在 Python3.x 和 Python2.x 中也有了很大的差異。
    首先我們先簡(jiǎn)單的在 Python2.x 的交互下輸入 map 和 filter,看到它們兩者的類型是 built-in function(內(nèi)置函數(shù)):
>>> map
<built-in function map>
>>> filter
<built-in function filter>
>>>

它們輸出的結(jié)果類型都是列表:

>>> map(lambda x:x *2, [1,2,3])
[2, 4, 6]
>>> filter(lambda x:x %2 ==0,range(10))
[0, 2, 4, 6, 8]
>>>

但是在Python 3.x中它們卻不是這個(gè)樣子了:

>>> map
<class 'map'>
>>> map(print,[1,2,3])
<map object at 0x10d8bd400>
>>> filter
<class 'filter'>
>>> filter(lambda x:x % 2 == 0, range(10))
<filter object at 0x10d8bd3c8>
>>>

首先它們從函數(shù)變成了類咆耿,其次德谅,它們的返回結(jié)果也從當(dāng)初的列表成了一個(gè)可迭代的對(duì)象, 我們嘗試用 next 函數(shù)來(lái)進(jìn)行手工迭代:

>>> f =filter(lambda x:x %2 ==0, range(10))
>>> next(f)
0
>>> next(f)
2
>>> next(f)
4
>>> next(f)
6
>>>

對(duì)于比較高端的 reduce 函數(shù),它在 Python 3.x 中已經(jīng)不屬于 built-in 了萨螺,被挪到 functools 模塊當(dāng)中窄做。
7.打開(kāi)文件

  • python2中
file( ..... )
或 
open(.....)
  • Python3中
    加入了"as"和"with"關(guān)鍵字, 用于打開(kāi)文件
open with(.....) as :

8.chr( K ) 與 ord( c )

  • python 2
    chr( K ) 將編碼K 轉(zhuǎn)為字符,K的范圍是 0 ~ 255
    ord( c ) 取單個(gè)字符的編碼, 返回值的范圍: 0 ~ 255
  • python 3
    chr( K ) 將編碼K 轉(zhuǎn)為字符屑迂,K的范圍是 0 ~ 65535
    ord( c ) 取單個(gè)字符的編碼, 返回值的范圍: 0 ~ 65535

四).新增類差異

  1. python3.x中加入了nonlocal語(yǔ)句
    python引用變量的順序
    • 1.當(dāng)前作用域局部變量
    • 2.外層作用域變量
    • 3.當(dāng)前模塊中的全局變量
      1. python內(nèi)置變量
        與global相似

nonlocal關(guān)鍵字用來(lái)在函數(shù)或其他作用域中使用外層(非全局)變量

示例1
        def sub():
            n = 100  # 局部變量
            print(n)

            def sub2():
            nonlocal n  # 非本地的(非全局的)外部變量
            n -= 10
            print(n)
            return sub2
        s = sub()
        s()
        s()
        輸出:
            100
            90
            80
示例2
        def main():
            def local_n():
            n = 200

            def nonlocal_n():
            nonlocal n
            n = 300

            def global_n():
            global n  # 聲明為全局變量
            n = 400

            n = 10
            local_n()
            print(n)

            nonlocal_n()
            print(n)

            global_n()
            print('global_n() After:{0}'.format(n))  # 顯示的局部變量

        main()
        print('n = {0}'.format(n))

            --------------------------------------------------------
         
              10
              300
              global_n() After:300
              n = 400

2.dict字典變動(dòng)

python3.x 去除了dict.iterkeys(),dict.itervalues(),dict.iteritems(), dict.has_key()方法
新增: dict.keys(),dict.values(),dict.items()
3.面向?qū)ο?br> 引入抽象基類(Abstraact Base Classes浸策,ABCs)
 import abc
 @abc.abstractmethod
4.模塊變動(dòng)

舊的名字 新的名字
_winreg winreg
COngigParser configpaeser
copy_reg copyreg
Queue queue
SocketServer sockerserver
repr reprlib
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市惹盼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌惫确,老刑警劉巖手报,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異改化,居然都是意外死亡掩蛤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門陈肛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揍鸟,“玉大人,你說(shuō)我怎么就攤上這事句旱⊙粼澹” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵谈撒,是天一觀的道長(zhǎng)腥泥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)啃匿,這世上最難降的妖魔是什么蛔外? 我笑而不...
    開(kāi)封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上澡绩,老公的妹妹穿的比我還像新娘责蝠。我一直安慰自己,他們只是感情好矛纹,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布帅戒。 她就那樣靜靜地躺著,像睡著了一般崖技。 火紅的嫁衣襯著肌膚如雪逻住。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天迎献,我揣著相機(jī)與錄音瞎访,去河邊找鬼。 笑死吁恍,一個(gè)胖子當(dāng)著我的面吹牛扒秸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冀瓦,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伴奥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了翼闽?” 一聲冷哼從身側(cè)響起拾徙,我...
    開(kāi)封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎感局,沒(méi)想到半個(gè)月后尼啡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡询微,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年崖瞭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撑毛。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡书聚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藻雌,到底是詐尸還是另有隱情雌续,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布蹦疑,位于F島的核電站西雀,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏歉摧。R本人自食惡果不足惜艇肴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一腔呜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧再悼,春花似錦核畴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至莺奸,卻和暖如春丑孩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背灭贷。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工温学, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甚疟。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓仗岖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親览妖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子轧拄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Python2.x與3??.x版本區(qū)別 Python的3??.0版本,常被稱為Python 3000讽膏,或簡(jiǎn)稱Py3...
    Einbahn_2018閱讀 975評(píng)論 1 0
  • 一檩电、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,750評(píng)論 0 10
  • 之前做Spark大數(shù)據(jù)分析的時(shí)候,考慮要做Python的版本升級(jí)桅打,對(duì)于Python2和Python3的差異做了一個(gè)...
    何柯君閱讀 4,457評(píng)論 1 13
  • 時(shí)間是嗜,它悄悄帶走了年少輕狂;又慢慢沉淀了冷暖自知挺尾。 ——2017.9.16
    大流芒閱讀 177評(píng)論 0 1
  • 剛剛看了現(xiàn)在就告白,一個(gè)24歲的大男孩喜歡上一位比自己大20歲的女士站绪,告白的時(shí)候遭铺,女士說(shuō):“我知道你是一個(gè)善良正直...
    別失戀當(dāng)笑話閱讀 354評(píng)論 0 0