当前位置: 首页 > article >正文

Python 3 与 Python 2 的主要区别

在这里插入图片描述

文章目录

    • 1. 语法与关键字
      • `print` 函数
      • 整数除法
    • 2. 字符串处理
      • 默认字符串类型
      • 字符串格式化
    • 3. 输入函数
    • 4. 迭代器和生成器
      • `range` 函数
      • `map`, `filter`, `zip`
    • 5. 标准库变化
      • `urllib` 模块
      • `configparser` 模块
    • 6. 异常处理
    • 7. 移除的功能
    • 8. 其他重要改进
      • 数据库操作
      • 多线程与并发
      • 类型注解
    • 9. 总结

Python 是一门强大且广泛使用的编程语言。从 Python 2 到 Python 3 的过渡引入了许多重要的变化,使得 Python 3 成为现代开发的首选版本。本文将总结 Python 3 与 Python 2 的主要区别,并参考官方文档对关键点进行分析。


1. 语法与关键字

print 函数

在 Python 2 中,print 是一个语句,而在 Python 3 中,它被改为函数。

Python 2:

print "Hello, World!"

Python 3:

print("Hello, World!")

整数除法

在 Python 2 中,整数除法会进行向下取整,而 Python 3 中则返回浮点数。

Python 2:

print 5 / 2  # 输出 2

Python 3:

print(5 / 2)  # 输出 2.5

如果希望在 Python 3 中获得整数除法的结果,可以使用 //

print(5 // 2)  # 输出 2

2. 字符串处理

默认字符串类型

  • Python 2 默认使用 ASCII 编码,字符串为 str 类型。
  • Python 3 默认使用 Unicode 编码,字符串为 str 类型。

Python 2:

s = "你好"  # ASCII 可能导致编码错误

Python 3:

s = "你好"  # 默认支持 Unicode,无需额外处理

如果在 Python 3 中处理二进制数据,可以使用 bytes 类型:

b = b"binary data"

字符串格式化

Python 3 引入了更强大的格式化方法 str.format() 和 f-string。

Python 2:

print("%s is %d years old" % ("Alice", 30))

Python 3:

print("{} is {} years old".format("Alice", 30))
# 或使用 f-string
name, age = "Alice", 30
print(f"{name} is {age} years old")

3. 输入函数

在 Python 2 中,input() 将输入解析为代码,而 raw_input() 返回字符串。

Python 2:

name = raw_input("Enter your name: ")  # 返回字符串

Python 3:

name = input("Enter your name: ")  # 默认返回字符串

4. 迭代器和生成器

range 函数

在 Python 2 中,range() 返回列表;在 Python 3 中,range() 返回一个生成器对象,更节省内存。

Python 2:

print(range(5))  # 输出 [0, 1, 2, 3, 4]

Python 3:

print(range(5))  # 输出 range(0, 5)
print(list(range(5)))  # 转为列表 [0, 1, 2, 3, 4]

map, filter, zip

在 Python 2 中,这些函数返回列表,而在 Python 3 中返回迭代器。

Python 2:

print(map(str, [1, 2, 3]))  # 输出 ['1', '2', '3']

Python 3:

print(list(map(str, [1, 2, 3])))  # 需要显式转换为列表

5. 标准库变化

urllib 模块

  • 在 Python 2 中,urlliburllib2 是分开的模块。
  • 在 Python 3 中,功能被整合到了 urllib.requesturllib.error 中。

Python 2:

import urllib2
response = urllib2.urlopen("http://example.com")

Python 3:

import urllib.request
response = urllib.request.urlopen("http://example.com")

configparser 模块

在 Python 3 中,ConfigParser 被重命名为 configparser,并改进了功能。


6. 异常处理

Python 3 中,异常必须使用 as 关键字绑定到变量。

Python 2:

try:
    x = 1 / 0
except ZeroDivisionError, e:
    print e

Python 3:

try:
    x = 1 / 0
except ZeroDivisionError as e:
    print(e)

7. 移除的功能

  • print 语句:被 print() 函数取代。
  • long 类型:Python 3 将所有整数合并为 int 类型。
  • xrange:被 range 取代。
  • <> 比较运算符:在 Python 3 中必须使用 !=

8. 其他重要改进

数据库操作

Python 3 中的数据库模块如 sqlite3 默认支持 Unicode,更适合现代开发需求。

多线程与并发

Python 3 引入了 concurrent.futures 模块,简化了多线程和多进程编程。

类型注解

Python 3 支持类型注解,使代码更具可读性和可维护性。

示例:

def greet(name: str) -> str:
    return f"Hello, {name}"

9. 总结

从 Python 2 到 Python 3 的变化是显著的,尤其是对语法一致性、性能优化和现代化开发需求的支持。虽然 Python 2 已经在 2020 年停止支持,但了解它与 Python 3 的差异仍有助于维护旧代码或迁移项目。对于新开发,推荐使用 Python 3 的最新版本,以充分利用其特性和改进。

参考资料:

  • Python 官方文档

http://www.kler.cn/a/465426.html

相关文章:

  • java项目之社区医院信息平台源码(springboot+mysql)
  • 软考 高级 架构师 第十 章软件工程3
  • 微软自带日志输出+Serilog
  • BP神经网络的反向传播算法
  • df.set_index(‘name‘).groupby(‘team‘).apply(first_3, ‘Q1‘)
  • Qt|QWidget窗口支持旋转
  • 微服务之服务治理——Eureka
  • python-leetcode-买卖股票的最佳时机 II
  • 基于XGBoost算法的集成学习
  • linux网络管理
  • 特征值描述了系统的固有频率平方,而特征向量描述了系统的振动模式
  • throw与noexcept对比
  • AI赋能跨境电商:魔珐科技3D数字人破解出海痛点
  • Flutter面试题、Dart面试题
  • SQL基础应用
  • javaEE-网络原理-1初识
  • Django 项目中的高效日志管理:从配置到实践
  • Windows平台ROBOT安装
  • Socket套接字
  • Celeborn和HDFS、YARN混合部署
  • 算法 Class 006(二分搜索)
  • SQL 基础教程 - SQL ORDER BY 关键字
  • 华为的数字化转型框架和数字化转型成熟度评估方法
  • 在C语言中使用伪终端与bash交互
  • MATLAB 车牌自动识别系统设计 图像分割与图像增强方法 车牌识别
  • linux网络 | 深度学习http的相关概念