很瑣碎,而print
語法的變化可能是最廣為人知的了,但是仍值得一提的是: python 2 的 print 宣告已經被print()
函式取代了,這意味著我們必須包裝我們想列印在小括號中的物件。
python 2 不具有額外的小括號問題。但對比一下,如果我們按照 python 2 的方式不使用小括號呼叫print
函式,python 3 將丟擲乙個語法異常(syntaxerror
)。
如果你正在移植**,這個變化是特別危險的。或者你在 python 2 上執行 python 3 的**。因為這個整除的變化表現在它會被忽視(即它不會丟擲語法異常)。
因此,我還是傾向於使用乙個float(3)/2
或3/2.0
代替在我的 python 3 指令碼儲存在 python 2 中的3/2
的一些麻煩(並且反而過來也一樣,我建議在你的 python 2 指令碼中使用from __future__ import division
)
python 2 有 ascii str() 型別,unicode()
是單獨的,不是byte
型別。
現在, 在 python 3,我們最終有了unicode (utf-8)
字串,以及乙個位元組類:byte
和bytearrays
。
在 python 2 中xrange()
建立迭代物件的用法是非常流行的。比如:for
迴圈或者是列表/集合/字典推導式。
這個表現十分像生成器(比如。「惰性求值」)。但是這個xrange-iterable
是無窮的,意味著你可以無限遍歷。
由於它的惰性求值,如果你不得僅僅不遍歷它一次,xrange()
函式 比range()
更快(比如for
迴圈)。儘管如此,對比迭代一次,不建議你重複迭代多次,因為生成器每次都從頭開始。
在 python 3 中,range()
是像xrange()
那樣實現以至於乙個專門的xrange()
函式都不再存在(在 python 3 中xrange()
會丟擲命名異常)。
因為next() (.next())
是乙個如此普通的使用函式(方法),這裡有另外乙個語法改變(或者是實現上改變了),值得一提的是:在 python 2.7.5 中函式和方法你都可以使用,next()
函式在 python 3 中一直保留著(呼叫.next()
丟擲屬性異常)。
在 python 3 中的另外乙個變化就是當對不可排序型別做比較的時候,會丟擲乙個型別錯誤。
幸運的是,在 python 3 中已經解決了把使用者的輸入儲存為乙個str
物件的問題。為了避免在 python 2 中的讀取非字串型別的危險行為,我們不得不使用raw_input()
代替。
py2和py3之間的區別
1.編碼 py2採用的是ascll編碼 py3採用unicode編碼 2.print py2中print是乙個關鍵字 py3中print是乙個函式,含有括號 3.input py2中raw input 這個函式返回乙個字串,但不會對輸入的字串進行計算 比如將它轉化成int或者float input ...
py2與py3的區別
py2與py3的區別 1 py2 的預設編碼是ascii,py3的預設編碼是utf 8 2 py2print函式可以用引號引起來也可以括起來執行,py3必須括號括起來執行 3 py2互動使用函式raw input 得到了str,input 得到了int資料型別,py3使用input 得到str 4 ...
py2 與 py3 中map的區別
如下 s timestamp,token,nonce s.sort sha1 hashlib.sha1 for i in s sha1.update i.encode utf 8 map sha1.update,s hashcode sha1.hexdigest 在py3環境下時算出來的雜湊值怎麼都...