- Python 3 基础教程(第2版)(慕课版)
- 刘凡馨 夏帮贵
- 979字
- 2020-08-27 11:35:58
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__()方法。