官术网_书友最值得收藏!

1.1.4 Python 3與Python 2的區別

1.1.4 Python 3與Python 2的區別

Python 3與Python 2的主要區別如下。

1.Python 3中的文本使用Unicode編碼

Python 3中的字符默認使用Unicode編碼(UTF-8),其可以很好地支持中文或其他非英文字符,示例代碼如下。

>>> 長度=100         #漢字作為變量名

>>> print(長度)

100

在Python 3中,不需要使用“u”或“U”前綴表示Unicode字符,但二進制字符串必須使用“b”或“B”前綴。Python 2中不能使用漢字作為變量名,否則會出錯,示例代碼如下。

>>> 速度=100

File "<stdin>", line 1

速度=100

^

SyntaxError: invalid syntax

2.print()函數代替了print語句

Python 3使用print()函數來輸出數據,示例代碼如下。

>>> x=100

>>> print(10,'abc',x)

10 abc 100

Python 2使用print語句輸出數據,示例代碼如下。

>>> x=100

>>> print 10,'abc',x

10 abc 100

>>> print(10,'abc',x)       #print語句將(10,'abc',x)作為一個元組輸出

(10, 'abc', 100)

3.完全的面向對象

Python 2中的各種數據類型,在Python 3中全面升級為類(class)。例如,在Python 2中測試數據類型結果如下。

>>> int,float,str

(<type 'int'>, <type 'float'>, <type 'str'>)

在Python 3中測試數據類型結果如下。

>>> int,float,str

(<class 'int'>, <class 'float'>, <class 'str'>)

4.部分方法和函數用視圖和迭代器代替了列表

下面的方法或函數在Python 2中返回列表,在Python 3中則返回視圖或迭代器。

● 字典的keys()、items()和values()方法用返回視圖代替了列表。不再支持Python 2中的iterkeys()、iteritems()和itervalues()。

● map()、filter()和zip()函數用返回迭代器代替了列表。

5.比較運算中的改變

比較運算的主要改變如下。

● 用“!=”代替了“<>”。

● 比較運算“<”“<=”“>=”和“>”在無法比較兩個數據大小時,會產生TypeError異常。

● 在Python 2中,“1 < ''”“0 > None”“len <= len”等運算返回True,而在Python 3中則會產生TypeError異常。

● 在判斷運算“==”和“!=”中,類型不兼容的數據視為不相等。

6.整數類型的改變

整數類型的主要改變如下。

● 不再有長整數(long)的概念,整數類型只有int一種。

● 在Python 3中,除法運算“/”返回浮點數(float),除法運算“//”只保留整數部分。Python 2在兩個整數的除法運算“/”中返回整數(截斷了小數部分)。

● 整數不再限制大小,刪除了sys模塊中的maxint(最大整數)常量。

● 不再支持以數字0開頭的八進制常量(如012),而改為用前綴“0o”表示(如0o12)。

7.字符串的改變

在Python 2中,字符串中的字符默認為單字節,字符串的類型有str和unicode兩種。帶前綴“u”或“U”的Unicode字符串的類型為unicode(注意首字母小寫),其他字符串(包含帶前綴“b”“B”“r”或“R”的字符串)為str類型。

在Python 3中,字符默認為Unicode字符,即雙字節字符。字符串的數據類型分為str和bytes兩種。仍可使用字符串前綴“u”或“U”,但會被忽略。字符串前綴“b”或“B”表示二進制字符串,其類型為bytes。

8.取消了file數據類型

Python3取消了Python2中的file數據類型。使用open()函數打開文件時,返回的是_io.TextIOWrapper類的實例對象,示例代碼如下。

>>> f=open('d:/test.txt','w')

>>> type(f)

<class '_io.TextIOWrapper'>

Python 2的open()函數返回的是file類型的對象,示例代碼如下。

>>> f=open('d:/test.txt','w')

>>> type(f)

<type 'file'>

9.異常處理的改變

在Python 3中,異常處理的改變主要如下。

● BaseException是所有異常類的基類,刪除了StardardError異常。

● 取消了異常類的序列行為和message屬性。

● 用raise Exception(args)代替raise Exception,args語法。

● 在捕獲異常的except語句中引入了as關鍵字。

在Python 2中,用下面的代碼捕捉和處理異常。

>>> try:

...  raise TypeError,’類型錯誤’

...except TypeError,err:

...  print err.message

...

類型錯誤

在Python 3中,用下面的代碼捕捉和處理異常。

>>> try:

...   raise TypeError(’類型錯誤’)

...except TypeError as err:

...  print(err)

...

類型錯誤

10.其他主要的語法改變

其他主要的語法改變如下。

● 增加了關鍵字as和with。

● 增加了常量True、False、None。

● 加入nonlocal語句。使用noclocal x聲明x為函數外部的變量。

● 刪除了raw_input(),代之以input()。

● 刪除了元組參數解包。不能用類似def(a, (b, c)):pass的語句定義函數。

● 增加了二進制字面量,如“b'0110110110'”。bin()函數可返回整數的二進制字符串。

● 擴展的可迭代解包。在Python 3中,“a, b, *x = '1234'”和“*x, a = '1234'”都是合法的。

● 對象和序列是可迭代的。

● 面向對象引入了抽象基類。

● 類的迭代器方法next()改名為__next__(),并增加內置函數next(),用以調用迭代器的__next__()方法。

主站蜘蛛池模板: 湛江市| 洛川县| 晴隆县| 高雄市| 株洲市| 双辽市| 伽师县| 黑龙江省| 镇康县| 东乡族自治县| 松原市| 太湖县| 林周县| 临湘市| 四会市| 新安县| 会东县| 乌拉特中旗| 揭西县| 冷水江市| 习水县| 波密县| 同心县| 贺兰县| 陵水| 巧家县| 尉犁县| 太谷县| 新昌县| 定日县| 吉水县| 柳林县| 西平县| 砀山县| 尉犁县| 北安市| 西城区| 日土县| 锡林浩特市| 京山县| 浦江县|