python基础python2和python3有哪些区别?

B站影视 欧美电影 2025-11-12 17:25 1

摘要:Python 2 和 Python 3 是 Python 编程语言的两个主要版本,它们之间存在不兼容的重大差异。Python 2 已于2020 年 1 月 1 日正式停止官方支持,因此新项目应一律使用 Python 3。但对于维护旧系统或阅读历史代码的开发者,

今天主要分享python2和python3有哪些区别?#python#

Python 2 和 Python 3 是 Python 编程语言的两个主要版本,它们之间存在不兼容的重大差异。Python 2 已于 2020 年 1 月 1 日正式停止官方支持,因此新项目应一律使用 Python 3。但对于维护旧系统或阅读历史代码的开发者,理解两者区别仍至关重要。

下面从 核心语法、数据类型、标准库、开发注意事项 四个维度详细对比,并给出实用建议。

特性Python 2Python 3默认编码ASCIIUTF-8(字符串默认 Unicode)print语句:print "hello"函数:print("hello")整数除法/ 返回整数(如 5/2 = 2)/ 返回浮点数(5/2 = 2.5),// 为整除xrange存在(返回迭代器)移除,range 行为同 xrangeinput等价于 eval(raw_input)(危险!)等价于 Python 2 的 raw_input(安全)字典方法.keys, .values 返回列表返回视图对象(dict_keys 等),需 list(d.keys) 转列表异常语法except ValueError, e:except ValueError as e:类定义经典类 & 新式类(需显式继承 object)所有类都是新式类(自动继承 object)__future__可导入 Python 3 特性不需要

1.字符串与编码(最重要!)

Python 2:str = 字节串(bytes)unicode = Unicode 字符串默认编码 ASCII,处理中文极易出错# Python 2s = "你好" # str 类型,实际是字节u = u"你好" # unicode 类型print(s.decode('utf-8')) # 需手动解码

Python 3

str = Unicode 字符串(文本)bytes = 字节序列(二进制数据)默认 UTF-8,中文友好# Python 3s = "你好" # str 类型,直接是 Unicodeb = s.encode('utf-8') # 转 bytesprint(b.decode('utf-8')) # 转回 str影响:文件读写、网络传输、数据库交互时,编码处理逻辑完全不同。

2.print从语句变为函数

# Python 2(合法但 Python 3 报错)print "Hello", "World" # 输出: Hello World# Python 3(必须加括号)print("Hello", "World") # 输出: Hello World# Python 2 兼容写法(推荐过渡期使用)from __future__ import print_functionprint("Hello", "World") # 在 Python 2 中也可运行

3.整数除法行为改变

# Python 2print(5 / 2) # 输出: 2 (整数除法)print(5 // 2) # 输出: 2# Python 3print(5 / 2) # 输出: 2.5 (真除法)print(5 // 2) # 输出: 2 (地板除)

4.range与xrange

# Python 2range(10) # 返回 [0,1,2,...,9](列表,内存大)xrange(10) # 返回 xrange 对象(迭代器,省内存)# Python 3range(10) # 行为同 Python 2 的 xrange(迭代器)# xrange 已移除好处:Python 3 大幅节省内存,尤其在大数据循环中。

5.输入函数input更安全

# Python 2(危险!)name = input("Enter name: ") # 若输入 __import__('os').system('rm -rf /') 会执行!# Python 3(安全)name = input("Enter name: ") # 始终返回字符串安全提示:Python 2 的 input 相当于 eval(raw_input),极易被注入攻击。

6.类与继承(新式类统一)

# Python 2:需显式继承 object 才是新式类class A(object): # 新式类(推荐) passclass B: # 经典类(已淘汰) pass# Python 3:所有类自动是新式类class A: # 等价于 class A(object): pass 影响:方法解析顺序(MRO)、super 行为在经典类中不一致。

✅ 1.新项目必须使用 Python 3

Python 2 已无安全更新、bug 修复、第三方库支持。主流库(Django、NumPy、Pandas 等)均已放弃 Python 2 支持。

✅ 2.迁移旧项目时重点检查

检查项风险点字符串处理中文乱码、编码错误除法运算结果类型变化导致逻辑错误print 语句语法错误字典方法for k in d.keys: 在 Py3 中没问题,但若需索引操作需转 list异常捕获except E, e: 语法失效文件读写open 默认文本模式,需注意 encoding='utf-8'

✅ 3.使用工具辅助迁移

2to3:Python 自带的自动转换工具bash编辑2to3 -W myscript.py # 自动修改并覆盖文件python-modernize:生成兼容 Python 2/3 的代码(过渡期使用)静态检查:用 pylint、mypy 检测潜在问题

✅ 4.避免“兼容写法”陷阱

虽然可用 from __future__ import ... 让 Python 2 支持部分 Py3 特性,但:

无法解决字符串/bytes 根本差异增加代码复杂度长期看不如彻底迁移到 Python 3

✅ 5.依赖库兼容性检查

使用 caniusepython3 工具检查项目依赖是否支持 Python 3:bash编辑pip install caniusepython3 caniusepython3 -r requirements.txt场景建议全新项目直接使用 Python 3.8+(推荐 3.10+)维护旧系统制定迁移计划,优先升级到 Python 3阅读历史代码注意 print、字符串、除法等关键差异面试/笔试明确区分两者的语法和设计哲学差异团队协作统一使用 Python 3,.python-version 或 Dockerfile 锁定版本

来源:互联网AI工程师

相关推荐