博客
关于我
python2和python3的不同
阅读量:796 次
发布时间:2023-03-24

本文共 1632 字,大约阅读时间需要 5 分钟。

Python3与Python2.5的主要区别解析

Python3相较于Python2.5,在性能、编码、语法、字符串处理、数据类型等方面都有显著变化。以下是这些差异的详细解析。

1. 性能表现

Py3.0的运行速度比Py2.5慢了30%,但Guido认为Python3有很大的优化空间,尤其是在字符串和整型操作上。Py3.1的速度比Py2.5慢了15%,仍有提升空间。

2. 编码规范

Py3.X源码默认使用utf-8编码,这使得字符串操作更加简便。例如,可以直接使用中国 = 'china'并打印,结果会自动识别为'china'。

3. 语法变化

Python3的语法有许多重要更新:

  • 移除某些标签:所有HTML标签都改用!=表示不等于。
  • 字符串表示方法变化:去除了```,改用repr()
  • 新增关键字:引入了aswithTrueFalseNone等关键字。
  • 整型除法/现在返回浮点数,需使用//获取整数结果。
  • 新的语法结构print()函数取代了print语句,支持多参数打印和文件输出。
  • 函数参数解包:元组参数解包的方式发生了变化,函数定义不能使用(b, c)形式了。
  • 8进制字面量:Py3.X使用0o666表示八进制,而Py2.X使用0666
  • 其他语法改进:如super().__init__()exec()函数等。

4. 字符串与字节串处理

  • 字符串统一:Py3.X中只有str类型,类似于Py2.X的unicode
  • 字节串处理:新增了bytes类型,b'china'表示字节串。strbytes可以互相转换,使用.decode().encode()方法。

5. 数据类型变化

  • 整型统一:Py3.X中只有int类型,行为与Py2.X的long一致。
  • 新增bytes类型:与Py2.X的str类似,但需要重新编码和解码。
  • 字典方法更新keys()items()values()返回迭代器,废弃了iterkeys()等函数。

6. 面向对象改进

  • ABCs引入:容器和迭代器类被ABCs化,数值类型也被标准化。
  • 迭代器改进next()方法改名为__next__(),新增内置next()函数。
  • 抽象方法:引入了@abstractmethod@abstractproperty,简化了抽象方法和属性的定义。

7. 异常处理

  • 异常体系重构:所有异常都从BaseException继承,StandardError被移除。
  • 异常捕获:使用as关键字捕获异常,Py3.X的语法更简洁。
  • 错误信息处理:去除了.message属性,错误信息通过str(error)获取。

8. 模块变动

  • 模块移除:移除了cPickleimageopaudiodev等模块,pickle模块成为主流。
  • 函数迁移os.tmpnam()os.tmpfile()移动到tmpfile模块。
  • ** tokenize 模块**:主要入口点改为tokenize.tokenize(),处理方式更高效。

9. 其他变化

  • xrange()改名xrange()改名为range(), 使用list(range(10))显式生成列表。
  • bytes对象限制bytes对象不能哈希,b.lower()等方法被移除,但可以使用b.strip(b'\n\t\r\f')等方法替代。
  • 函数移除apply()callable()等函数被移除,hasattr()替代callable()
  • 比较操作x < y在类型不匹配时抛出TypeError,Py2.X会返回布尔值。
  • file类移除:Py3.X中file类不存在,需要使用其他方式处理文件操作。

10. 闭包优化

  • closure属性改名:闭包中的__closure__属性表示闭包,旧名__closure__已不再使用。

以上是Python3相较于Python2.5的主要变化,了解这些差异有助于更好地进行代码迁移和开发。

转载地址:http://qhqfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现binary exponentiation二进制幂运算算法(附完整源码)
查看>>
Objective-C实现binomial coefficient二项式系数算法(附完整源码)
查看>>
Objective-C实现check strong password检查密码强度算法(附完整源码)
查看>>
Objective-C实现disjoint set不相交集算法(附完整源码)
查看>>
Objective-C实现DNF排序算法(附完整源码)
查看>>
Objective-C实现double factorial recursive双阶乘递归算法(附完整源码)
查看>>
Objective-C实现double hash双哈希算法(附完整源码)
查看>>
Objective-C实现double linear search recursion双线性搜索递归算法(附完整源码)
查看>>
Objective-C实现DoublyLinkedList双链表的算法(附完整源码)
查看>>
Objective-C实现DPLL(davisb putnamb logemannb loveland)算法(附完整源码)
查看>>
Objective-C实现Edmonds-Karp算法(附完整源码)
查看>>
Objective-C实现EEMD算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现EM算法(附完整源码)
查看>>
Objective-C实现entropy熵算法(附完整源码)
查看>>
Objective-C实现euclidean distance欧式距离算法(附完整源码)
查看>>
Objective-C实现Euclidean GCD欧几里得最大公约数算法(附完整源码)
查看>>
Objective-C实现euclideanDistance欧氏距离算法(附完整源码)
查看>>
Objective-C实现euler method欧拉法算法(附完整源码)
查看>>
Objective-C实现eulerianPath欧拉路径算法(附完整源码)
查看>>