python2.7和3.6区别有哪些

Python 2.7与3.6是不兼容的重构版本,核心差异包括:print变为函数、字符串与字节严格分离、整数除法默认真除、3.6新增f-string等特性;2.7已于2025年停更,新项目应使用3.6+。

Python 2.7 和 Python 3.6 是两个代际差异明显的版本,核心区别不是“小升级”,而是**不兼容的重构**。Python 3.6 并非在 2.7 基础上简单增强,而是从语法、语义到标准库都做了系统性调整。2.7 已于 2025 年 1 月正式停止维护,而 3.6 是首个支持 f-string 的稳定版(也是较早广泛使用的 3.x 版本之一),实际开发中应优先使用 3.6+。

print 变成函数,不再是语句

这是最直观的变化:Python 2.7 中 print "hello" 是语句;Python 3.6 中必须写成 print("hello"),带括号、可传多个参数、支持关键字参数如 endsep

  • 2.7:print "a", "b" → 输出 a b(自动加空格)
  • 3.6:print("a", "b") → 同样输出 a b;但 print("a", "b", sep="|") → 输出 a|b

字符串与字节严格区分

Python 2.7 中 str 类型既表示文本又表示二进制数据,容易引发编码混乱(比如中文乱码);Python 3.6 明确分离:

  • str → Unicode 文本(默认 UTF-8 编码,直接支持中文)
  • bytes → 二进制数据(需显式编码/解码,如 "你好".encode('utf-8')
  • 打开文件时,默认文本模式返回 str,二进制模式(rb)返回 bytes

整数除法行为改变

Python 2.7 中 / 对两个整数执行“地板除”(结果取整),易导致隐式精度丢失;Python 3.6 统一为真除法:

  • 2.7:5 / 22;要得 2.5 得写 5.0 / 2 或导入 from __future__ import division
  • 3.6:5 / 22.5;整除用 //5 // 22

语法糖和新特性(3.6 独有)

Python 3.6 引入了若干提升可读性和效率的特性,2.7 完全不支持:

  • f-stringname = "Alice"; print(f"Hello, {name}") —— 最快、最简洁的字符串格式化方式
  • 变量注解(Variable Annotations):支持类型提示,如 age: int = 25(运行时不强制,但利于 IDE 和静态检查工具)
  • 字典保持插入顺序(CPython 3.6 实现细节,3.7 起成为正式语言规范)

迁移建议:旧项目若仍在用 2.7,应尽快升级;可用 2to3 工具辅助转换,但需人工核验编码、异常处理、第三方库兼容性等细节。新项目请直接使用 Python 3.6 或更高版本(推荐 3.8+ 或当前稳定版)。