Python3.x和Python2.x的區別1。性能?
Py3.0運行pystone benchmark比Py2.5慢30%,Guido認為Py3.0有很大的優化空間,它可以用於字符串和整形操作。
以便獲得良好的優化結果。?
Py3.1的性能比Py2.5慢15%,還有很大的提升空間。?
2.編碼?
默認情況下,Py3。x源文件使用utf-8編碼,這使得下面的代碼合法:?
& gt& gt& gt中國= '中國'?
& gt& gt& gt打印?
中國?
3 .語法?
1)刪除了
2)刪除``並用repr()替換all?
3)關鍵字包括as和with,以及True、False、None none?
4)整數除法返回浮點數。要獲得整數結果,請使用//?
5)添加非本地語句。可以用noclocal x直接賦值外圍(非全局)變量嗎?
6)刪除print語句,添加print()函數,實現同樣的功能。exec語句也是如此,已經改成了exec()函數?
比如:?
2.x:打印“答案是”,2*2?
3.x:打印(“答案是”,2*2)?
2.x:打印x,?#逗號結尾不換行?
3.X: print(x,end=" ") #用空格代替換行符?
2.X: print #輸出新的壹行?
3.X: print()?#輸出壹個新行?
2.x:print & gt;& gtsys.stderr,“致命錯誤”?
3.X: print("致命錯誤",file=sys.stderr)?
2.X: print (x,y)?# output repr((x,y))?
3.X: print((x,y)) #不同於print(x,y)!?
7)改變了順序操作符的行為,例如x
8)輸入功能發生了變化。raw_input已被刪除,已使用input代替:?
2.x: guess = int (raw _ input('輸入壹個整數:')#如何讀取鍵盤輸入?
3.X:guess = int(input('輸入壹個整數: '))
9)移除元組參數並解包。不能def(a,(b,c)):pass這樣定義函數?
10)是壹個新的八進制字變量,oct()函數做了相應的修改。?
2.x的方式如下:?
& gt& gt& gt0666?
438?
& gt& gt& gt十月(438)?
'0666'?
3.x這樣:?
& gt& gt& gt0666?
語法錯誤:無效標記(& ltpyshell # 63 & gt,行1)?
& gt& gt& gt0o666?
438?
& gt& gt& gt十月(438)?
0o666 '?
11)加二進制文字和bin()函數?
& gt& gt& gt斌(438)?
0b 110110110 '?
& gt& gt& gt_ 438 = ' 0b 110110110 '?
& gt& gt& gt_438?
0b 110110110 '?
12)擴展叠代解包。在Py3。x,a,b,*rest = seq和*rest,a = seq都是合法的,只需要兩點:rest是列表嗎?
對象和序列是叠代的。?
13)新的super()不能再向super()傳遞參數。
& gt& gt& gtC類(對象):?
def __init__(self,a):?
打印(' C ',a)?
& gt& gt& gtD類(C類):?
def __init(self,a):?
超級()。__init__(a) #不帶參數調用super()?
& gt& gt& gtD(8)?
C 8?
& lt__main__。d對象位於0x 00d 7 ed 90 & gt;?
新的元類語法:
Foo類(* bases,**kwds):?
通過?
15)支持類裝飾器。用法和函數裝飾器壹樣:?
& gt& gt& gtdef foo(cls_a):?
def print_func(self):?
打印(“妳好,世界!”)?
cls_a.print = print_func?
返回cls_a?
& gt& gt& gt@foo?
C類(對象):?
通過?
& gt& gt& gtc()。print()?
妳好,世界!?
Class decorator可以用來玩貍貓換太子的大招。詳見PEP 3129?
4.字符串和字節串?
1)現在只有壹種類型的字符串,但是和unicode版本2差不多。x..
2)字節字符串請參考數據類型的第2項?
5.數據類型?
1)Py3。x去掉了long類型,現在只有壹個integer-int,但是它的行為像2。x版龍?
2)增加了字節類型,對應於版本2的八位字節字符串。十、定義壹個字節文字量的方法如下:?
& gt& gt& gt中國?
& gt& gt& gt(b)型?
& lt類型“字節”& gt?
字符串對象和字節對象可以使用。encode()(str-> >;字節)或。decode()(字節-& gt;Str)方法相互轉換。?
& gt& gt& gts = b.decode()?
& gt& gt& gts?
中國?
& gt& gt& gtb1 = s.encode()?
& gt& gt& gtb1?
“中國”?
3)字典的。keys(),。項目和。values()方法返回叠代器,而之前的iterkeys()等函數被放棄。也撤了?
Dict.has_key(),替換為in?
6.面向對象?
1)引入了Abstraact基類(ABCs)。?
2)容器類和叠代器類都是ABCs,所以cellections模塊中的類型比Py2.5多很多?
& gt& gt& gt導入收藏?
& gt& gt& gt打印(' \n '。join(dir(collections)))?
可贖回?
集裝箱?
哈沙布爾?
ItemsView?
可叠代?
叠代器?
KeysView?
映射?
MappingView?
可變映射?
可變序列?
MutableSet?
NamedTuple?
序列?
設置?
大小合適?
ValuesView?
__all__?
__內置_ _?
__doc__?
__file__?
__name__?
_abcoll?
_itemgetter?
_sys?
defaultdict?
德雀?
此外,數值類型也是ABC化的。這兩點請參考人教版3119和人教版3141。?
3)叠代器的next()方法重命名為__next__(),增加壹個內置函數next()調用叠代器的__next__()方法?
4)增加了兩個decorator,@abstractmethod和@abstractproperty,使得編寫抽象方法(屬性)更加方便。?
7.不正常?
1)所以所有異常都是從BaseException繼承的,StardardError被刪除?
2)刪除序列行為和。異常類的消息屬性。
3)用raise Exception(args)代替raise Exception,args語法?
4)捕捉異常的語法變化,引入as關鍵字來識別異常實例。在Py2.5:?
& gt& gt& gt試試:?
...引發notimplementererror(' Error ')?
...NotImplementedError除外,錯誤:
...打印錯誤。消息?
...?
錯誤?
在Py3.0中:?
& gt& gt& gt試試:?
引發notimplementererror(' Error ')?
except not implemented error as error:#註意這個as?
print(str(error))?
錯誤?
5)異常鏈,因為__context__在3.0a1版本中沒有實現?
8.模塊變化?
1)刪除了cPickle模塊,可以用Pickle模塊代替。最終我們將擁有壹個透明而高效的模塊。?
2)移除了imageop模塊?
3)音頻dev,bastion,BSD db 185,異常,Linux音頻dev,MD5,mime writer,Mimi fy,popen 2,?
Rexec,sets,sha,Stringold,Strop,Sun Audio Dev,Timing和xmllib模塊?
bsddb模塊(單獨發布,可從http://www.jcea.es/programacion/pybsddb.htm購買)已被移除?
5)移除新模塊?
6)6)OS . tmpnam()和os.tmpfile()的函數移到tmpfile模塊中?
7)tokenize模塊現在可以處理字節。主入口點不再是generate_tokens,而是tokenize.tokenize()?
9.其他?
1)xrange()被重命名為range()。要使用range()獲取列表,必須顯式調用:?
& gt& gt& gtlist(範圍(10))?
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]?
2)bytes對象不能hash,不支持b.lower()、b.strip()和b.split()的方法,但是可以使用b.strip(b '?
\n\t\r \f ')和b.split (b ' ')來達到相同的目的?
3)zip()、map()和filter()都返回叠代器。以及apply()、callable()、constent()、execfile()、reduce()和reload?
()函數已被刪除。
現在hasattr()可以用來代替callable()的語法。hasattr(),比如hasattr (string,' _ _ name _ ')。
4)字符串.字母及相關。小寫和。大寫字母被刪除。請改用string.ascii_letters?
5)如果X
6)__getslice__系列成員被放棄。A[i:j]轉換成壹個. _ _ getitem _ (slice (I,j))或__setitem__和?
_ _ delivery _ _ call?
7)7)file類被放棄,在Py2.5中:?
& gt& gt& gt文件?
& lt鍵入“文件”& gt?
在Py3。x:?
& gt& gt& gt文件?
回溯(最近壹次呼叫):?
文件" & ltpy shell # 120 >;",行1,在& lt模塊& gt?
文件?
名稱錯誤:未定義名稱“文件”