商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > python2和python3关系_python3和python2区别有什么

python2和python3关系_python3和python2区别有什么

  发布于2026-07-12 阅读(0)

扫一扫,手机访问

聊到Python版本迁移,Python 2和Python 3的区别堪称一场“割裂式进化”。虽然市面上已经有不少总结,但真正从开发实践中梳理出来,还是有些门道值得深挖。下面这份差异清单,会从底层机制到语法细节,逐一拆解两者的不同。

核心类差异

先来看看底层架构上的不同,这部分往往是迁移中最容易踩坑的地方。

1. Unicode 的“原生”支持

Python 2 默认用 ASCII 编码,字符串有 str 和 unicode 两种类型,处理中文时一不小心就报编码错误。Python 3 则全面拥抱 Unicode,字符串只有一种类型,统一用 unicode 表示。简单来说,Python 2 的字符和字节关系需要开发者手动管理,Python 3 则直接替开发者解决了这个麻烦。

2. import 路径机制

Python 2 支持相对路径导入,这在高版本中反而成了隐患——想象一下,同一目录下有个 file.py,想同时导入它和标准库的 file 模块,就很容易产生冲突。Python 3 采用绝对路径导入,如果还想要导入同目录下的文件,必须用点号相对导入的方式,否则就只能用绝对路径。

3. 新式类的统一

Python 2 中老式类和新式类并存,新式类需要显式继承 object。而 Python 3 只保留新式类,多重继承场景下也变得清晰明确。这意味着,如果你的代码还在用老式类的写法,那在 Python 3 中需要全面升级。

4. 更严格的缩进规则

Python 2 里,一个 tab 和 8 个 space 是等价的,这导致某些 IDE 处理混合缩进时可能不会报错。Python 3 则一刀切:一个 tab 只能被另一个 tab 替代,tab 和 space 混用直接报错(TabError)。这也算是提升了代码的规范性。

废弃类差异

Python 3 对很多古老功能做了“大扫除”,不少老开发者一开始可能不太适应。

  • print 语句:Python 2 里的 `print` 是关键词,Python 3 被统一为 `print()` 函数。
  • exec 语句:同样被废弃,统一使用 `exec()` 函数。
  • execfile 语句:Python 3 中不再单独存在,推荐用 `exec(open("./filename").read())` 实现。
  • 不相等操作符 "<>":Python 3 统一用 "!=",不再保留 "<>"。
  • long 整型:Python 3 中 int 类型已经足够支持长整型,无需单独区分。
  • xrange 函数:Python 2 的 xrange 在 Python 3 中被 range 替代,而且 range 实现机制也做了优化,大数据集的生产效率有所提升。
  • 字典相关方法:keys()、values()、items() 这些方法不再返回 list 对象,如果需要列表,可以用 list() 显式转换。例如:
    mydict={"a":1,"b":2,"c":3}
    mydict.keys()  # 返回 dict_keys 对象
    list(mydict.keys())  # ['a', 'c', 'b']
  • 迭代器 next():Python 2 中迭代器用 `next()` 方法,Python 3 统一用 `next(iterator)` 函数。
  • raw_input 函数:Python 3 中统一使用 input() 函数。
  • 字典 has_key 方法:Python 3 中直接用 `in` 关键词进行判断,更简洁。
  • file 函数:Python 3 中统一使用 open() 来处理文件,并可通过 io.IOBase 检查文件类型。
  • apply 函数:直接被废弃。
  • 异常 StandardError:Python 3 统一使用 Exception。

修改类差异

这部分改动不算大,但每个都值得留意。

1. 除法操作符 "/" 和 "//"

在 Python 2 中,如果两个整数用 "/" 运算,结果仍然是整数,相当于向下取整。Python 3 则不同—— - "/" 是真除法,不论操作数类型,都返回浮点数。 - "//" 在 Python 2 和 Python 3 中作用相同,返回小于除法结果的最大整数。

2. 异常捕获与抛出的语法

Python 2 的写法:

raise IOError, "file error"  
except NameError, err:
Python 3 改为:
raise IOError("file error")  
except NameError as err:
关键字后面加 as 更符合直觉,也更简洁。

3. for 循环对变量值的影响

Python 2 中,for 循环会修改外部同名的变量。举个栗子:

i = 1
print('comprehension: ', [i for i in range(5)])
print('after: i =', i)  # i=4
Python 3 中,for 循环不会影响外部变量,输出结果:i 依然是 1。这个变化能避免很多无意中覆盖变量的 bug。

4. round 函数返回值类型

Python 2 中 `round()` 返回 float 类型,而 Python 3 返回 int 类型。不妨检查一下代码里对这个函数的依赖。

5. 比较操作符的兼容性

Python 2 允许任意两个对象进行比较,比如 `11 < 'test'` 会返回 True,虽然看起来有点反直觉。Python 3 则严格限定:只有同一数据类型的对象才能比较,否则抛出 TypeError。

本文转载于:https://blog.csdn.net/weixin_39639286/article/details/111419499 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注