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

深入解析 Python 2 与 Python 3 的差异与演进

Python 2 和 Python 3 是 Python 编程语言的两个主要版本。Python 3 于 2008 年发布,旨在解决 Python 2 中的一些设计缺陷,并引入了许多新特性。虽然 Python 2 在很长一段时间内仍然被广泛使用,但自 2020 年 1 月 1 日起,Python 2 的官方支持已结束,所有新的项目都应当采用 Python 3。本文将详细对比 Python 2 和 Python 3 的主要区别,帮助开发者更好地理解 Python 语言的演变。

1. 打印语句与打印函数

Python 2

在 Python 2 中,print 是一个语句,不需要使用括号:

print "Hello, World!" 

Python 3

在 Python 3 中,print 成为了一个函数,必须使用括号:

print("Hello, World!")

这种变化促使代码变得更加一致和清晰,也为其他语言特性(如函数式编程)提供了更好的支持。

2. 整数除法

Python 2

在 Python 2 中,整数除法会返回整数,舍去小数部分:

result = 5 / 2  # result is 2 

Python 3

Python 3 中,整数除法会返回浮点数,保留小数部分。如果需要进行整数除法,可以使用 // 操作符:

result = 5 / 2  # result is 2.5
result_int = 5 // 2  # result_int is 2

这种变化消除了由于整数除法引起的潜在错误,使得 Python 更符合数学的标准。

3. 字符串和 Unicode 支持

Python 2

在 Python 2 中,字符串默认是 ASCII 编码。如果需要使用 Unicode 字符串,必须使用 u 前缀:

s = "Hello"   # ASCII string
u = u"Hello"  # Unicode string

Python 3

Python 3 默认使用 Unicode 编码,字节串使用 b 前缀来区分:

s = "Hello"  # Unicode string
b = b"Hello"  # Byte string

这一变化简化了文本处理,解决了 Python 2 中字符编码混乱的问题。

4. 字符串格式化

Python 2

Python 2 中,字符串格式化使用 % 运算符:

name = "Alice"
greeting = "Hello, %s!" % name

Python 3

Python 3 引入了更灵活和强大的字符串格式化方式,包括 str.format() 和 f-strings(在 Python 3.6 及更高版本中):

greeting = "Hello, {}!".format(name)  # 使用 str.format()
greeting = f"Hello, {name}!"          # 使用 f-string

f-string 的引入,使得字符串格式化变得更加直观和高效。

5. 字节和字符串的明确区分

Python 2

在 Python 2 中,str 类型本身就是字节串,缺少明确区分:

b = "Hello"  # 字节串和字符串没有明确区分 

Python 3

Python 3 引入了 bytes 类型,明确区分字节和字符串:

b = b"Hello"  # 字节串
s = "Hello"   # 字符串

这种改进有助于避免由于编码和解码引起的错误。

6. xrange() 和 range()

Python 2

Python 2 中,range() 返回一个列表,而 xrange() 返回一个迭代器,节省内存:

for i in xrange(5):print(i)  # Prints 0 to 4 

Python 3

在 Python 3 中,range() 返回一个迭代器,xrange() 被移除:

for i in range(5):print(i)  # Prints 0 to 4 

这种变化使得 Python 3 更加一致,避免了冗余的 xrange() 函数。

7. 异常处理

Python 2

在 Python 2 中,异常捕获使用逗号:

try:# some code
except IOError, e:print e 

Python 3

在 Python 3 中,使用 as 关键字来捕获异常:

try:# some code
except IOError as e:print(e)

这种改动使得异常捕获语法更加清晰且符合现代编程规范。

8. 迭代器和生成器

Python 2

Python 2 中,许多内置函数(如 map() 和 filter())返回的是列表:

result = map(int, ['1', '2', '3'])  # 返回一个列表 

Python 3

Python 3 中,map() 和 filter() 返回的是迭代器,节省内存并提高性能:

result = map(int, ['1', '2', '3'])  # 返回一个迭代器 

通过返回迭代器,Python 3 使得内存利用更加高效,尤其是在处理大数据集时。

9. input() 函数

Python 2

在 Python 2 中,input() 会评估输入并返回结果,而 raw_input() 用于获取字符串输入:

name = raw_input("Enter your name: ") 

Python 3

Python 3 中,input() 总是返回字符串,raw_input() 被移除:

name = input("Enter your name: ") 

这种变化避免了由于 input() 自动评估输入带来的潜在安全风险。

10. 异步编程支持:async 和 await

Python 2

Python 2 不支持异步编程。

Python 3

Python 3 引入了 async 和 await 关键字,支持异步编程:

async def main():await asyncio.sleep(1) 

这一变化大大简化了异步编程的实现,特别是在处理 I/O 密集型任务时。

11. 生命周期与支持

Python 2

Python 2 的最后一个版本为 2.7,官方支持已于 2020 年 1 月 1 日结束。

Python 3

Python 3 仍在积极开发和维护,持续引入新的特性和性能改进。Python 3 是当前和未来的主流版本,推荐所有新项目使用 Python 3。

结论

随着 Python 2 的生命周期结束,Python 3 已成为 Python 开发的标准。它解决了 Python 2 中的一些设计问题,并引入了许多新特性,使得代码更加简洁、高效和安全。对于正在迁移到 Python 3 的开发者来说,理解这两者之间的差异是至关重要的。随着 Python 3 的不断进化,开发者可以更好地利用其强大的功能,打造现代化的应用和系统。

相关文章:

深入解析 Python 2 与 Python 3 的差异与演进

Python 2 和 Python 3 是 Python 编程语言的两个主要版本。Python 3 于 2008 年发布,旨在解决 Python 2 中的一些设计缺陷,并引入了许多新特性。虽然 Python 2 在很长一段时间内仍然被广泛使用,但自 2020 年 1 月 1 日起,Python 2…...

后端:Spring(IOC、AOP)

文章目录 1. Spring2. IOC 控制反转2-1. 通过配置文件定义Bean2-1-1. 通过set方法来注入Bean2-1-2. 通过构造方法来注入Bean2-1-3. 自动装配2-1-4. 集合注入2-1-5. 数据源对象管理(第三方Bean)2-1-6. 在xml配置文件中加载properties文件的数据(context命名空间)2-1-7. 加载容器…...

排序:插入、选择、交换、归并排序

排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,…...

认识+安装ElasticSearch

1. 为什么要学习ElasticSearch? 一般的来说,项目中的搜索功能尤其是电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,存在很多问题。 1.1 数据库搜索所存在的问题 1.1.1 查询效率较低 由于数据库模糊查询不走索引&…...

一个模块实现期货分钟 K 线计算、主连行情合成

由于不同期货品种的交易时间存在差异,且不同期货合约的活跃度各不相同,因此基于期货快照行情数据合成分钟K线的计算方法在时间对齐上需要进行不同的处理。 本教程旨在提升 DolphinDB 在具体业务场景中的应用效率,并降低其在实际业务中的开发…...

PyTorch:.max(1)和.max(0)的使用

目录 1).max(1)的使用: 2).max(0)的使用: 1).max(1)的使用: 假设有一个形状为 ( m , n ) 的 Tensor x ,其中m表示行数,n表示列数。 x.max(1) ,相当于x.max(dim1) 。作…...

ASP.NET Core 中使用 Cookie 身份验证

在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...

Ollama私有化部署大语言模型LLM

目录 一、Ollama介绍 二、安装Ollama 1、标准安装 2、国内加速 三、升级Ollama版本 四、使用Ollama 1、启动ollama服务 systemctl start ollama.service ollama serve 2、使用ollama命令 ollama run 运行模型 ollama ps 查看正在运行的模型 ollama list 查看(本地)…...

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …...

Three.js 性能优化:打造流畅高效的3D应用

文章目录 前言一、减少几何体复杂度(Reduce Geometry Complexity)二、合并几何体(Merge Geometries)三、使用缓冲区几何体(Use BufferGeometries)四、纹理压缩与管理(Texture Compression and M…...

PHP 在 2025 年的现状与展望

PHP 在 2025 年依然强劲,继续为超过 77% 使用已知服务器端编程语言的网站提供动力。这并非仅仅依靠遗留代码,像 WordPress、Shopify 和 Laravel 这样的主流平台持续推动 PHP 的发展,使其保持着 актуальность 并不断进化。 为什么…...

力扣经典二分题:4. 寻找两个正序数组的中位数

题目链接:4. 寻找两个正序数组的中位数 - 力扣(LeetCode) 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是:int m nums1.size(),n nums2.size();中位数性质1:中位数左侧元素 …...

解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题

错误背景 WordPress版本:wordpress-6.6.2-zh_CN WooCommerce版本:woocommerce.9.5.1 WordPress在安装了WooCommerce插件后,安装的过程中没有问题,在安装完成后提示: 此站点遇到了致命错误,请查看您站点管理…...

Excel 技巧07 - 如何计算到两个日期之间的工作日数?(★)如何排除节假日计算两个日期之间的工作日数?

本文讲了如何在Excel中计算两个日期之间的工作日数,以及如何排除节假日计算两个日期之间的工作日数。 1,如何计算到两个日期之间的工作日数? 其实就是利用 NETWORKDAYS.INTL 函数 - weekend: 1 - 星期六,星期日 2,如…...

快速实现一个快递物流管理系统:实时更新与状态追踪

物流管理是电商、仓储和配送等行业的重要组成部分。随着电子商务的快速发展,快递物流的高效管理和实时状态更新变得尤为关键。本文将演示如何使用Node.js、Express、MongoDB等技术快速构建一个简单的快递物流管理系统,该系统支持快递订单的实时更新和追踪…...

kvm 解决 安装windows 虚拟机cpu 核数问题

通过lscpu命令查到我本机的cpu信息如下 CPU(s): 12 —— 系统的总逻辑处理单元数量(包括所有核心和逻辑处理器)。Thread(s) per core: 2 —— 每个物理核心支持 2 个线程(表示启用了超线程技术)。Core(s) per socket: 6 —— 每个…...

Ansys Fluent Aeroacoustics 应用

探索 Ansys Fluent 在气动声学领域的前沿功能,彻底改变各行各业解决降噪和提高音质的方式。 了解气动声学 气动声学是声学的一个分支,它处理湍流流体运动产生的噪声以及这些声音通过流体介质(如空气)的传播。这个领域在工程中至…...

119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR

目录 1.Jenkins Build时的错误 2.百度文心快码AI智能体帮我解决 提问1:jenkins中如何配置npm的源 提问2:jenkins pipeline 类型为pipeline script from SCM时,如何配置npm源 3.最终解决方法-Jenkinsfile的修改 4.感触 1.Jenkins Build时…...

istio-proxy内存指标

在 Istio 环境中,istio-proxy 是 Envoy 的边车代理容器。通过运行命令 curl localhost:15000/memory,或者curl localhost:15000/stats 可以查询 Envoy 的内存统计信息。以下是典型返回结果的结构和意义: 返回结果单位是bytes,需/…...

List详解 - 双向链表的操作

在C中,std::list是标准模板库(STL)中的一个容器,它实现了双向链表的数据结构。与数组或向量(std::vector)不同,std::list允许在常数时间内进行插入和删除操作,尤其是在链表的任意位置…...

多目标优化算法之一:基于分解的方法

在多目标优化算法中,“基于分解的方法”通常指的是将多目标优化问题(MOP)分解为多个单目标优化子问题,并同时优化这些子问题。这种方法的核心思想是通过引入权重向量或参考点,将多目标问题转化为多个标量优化问题,每个子问题都关注于原始问题的一个特定方面或视角。这样可…...

conntrack iptables 安全组

centos 安装yum install conntrack-tools 1. conntrack状态 NEW: 新建连接(第一次包)。 ESTABLISHED: 已建立连接,正在传输数据。 RELATED: 与已有连接相关的连接,如 FTP 数据连接。 INVALID: 无效连接,无法识别或不…...

stringRedisTemplate.execute执行lua脚本

stringRedisTemplate.execute执行lua脚本 1. 引入必要依赖 确保项目中已经引入了Spring Data Redis相关依赖&#xff0c;例如在 Maven 项目中&#xff0c;一般会有如下依赖&#xff08;版本号根据实际情况调整&#xff09;&#xff1a; <dependency><groupId>or…...

HDFS异构存储和存储策略

一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常&#xff0c;公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用&#xff0c;从而该数据被标记为"热"数据。随着时间的推移&#xff0c;存储的数据每周…...

生成idea ui风格界面代码

创建一个类似 IntelliJ IDEA 的用户界面&#xff08;UI&#xff09;涉及多个组件和复杂的布局设计。为了简化这个过程&#xff0c;我们可以使用 **Java Swing** 或 **JavaFX** 来实现一个基本的 IDE 界面&#xff0c;模仿 IntelliJ IDEA 的主要布局元素&#xff0c;如菜单栏、工…...

嵌入式C语言:二维数组

目录 一、二维数组的定义 二、内存布局 2.1. 内存布局特点 2.2. 内存布局示例 2.2.1. 数组元素地址 2.2.2. 内存布局图&#xff08;简化表示&#xff09; 2.3. 初始化对内存布局的影响 三、访问二维数组元素 3.1. 常规下标访问方式 3.2. 通过指针访问 3.2.1. 指向数…...

【机器学习:四、多输入变量的回归问题】

多输入变量的回归问题 1. 多元线性回归概述 1.1 单变量线性回归与多变量线性回归的概念区分 单变量线性回归&#xff1a;用于预测一个因变量&#xff08;输出变量&#xff09;与单一自变量&#xff08;输入变量&#xff09;之间的线性关系。模型形式为&#xff1a; y θ 0 …...

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…...

iOS 本地新项目上传git仓库,并使用sourceTree管理

此文记录的场景描述&#xff1a; iOS前期开发时&#xff0c;在本地创建项目&#xff0c;直至开发一段时间&#xff0c;初期编码及框架已完善后&#xff0c;才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库&#xff0c;可以使用终端&#xff0c;键入命令…...

mysql之基本select语句 运算符 排序分页

1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…...

做reference的网站/竞价托管哪家效果好

挂载windows 盘 编辑fstab /dev/sda5 /host ntfs default 0 0 也可以根据uuid进行挂载(代替/dev/sda5) ls -all /edv/disk/by-uuid //显示分区的信息可以查看到各分区的uuid转载于:https://www.cnblogs.com/zhangzhang/archive/2012/05/14/2499546.html...

wordpress 内容 只调图片/网站流量查询平台

尝试着将一个文件夹下所有的图片写入视频中&#xff0c;由于自己比较熟悉opencv&#xff0c;所以网上找了个利用opencv的代码。&#xff08;前提条件是我已经在终端输入pip install opencv-python&#xff0c;并且pip list也显示opencv已安装。&#xff09; 但是当我运行代码时…...

福州公司网站设计/热门搜索关键词

文章目录Class 文件格式字节码Class类的本质Class文件格式类加载机制加载验证准备解析初始化类加载器双亲委派机制栈桢JVM方法调用详解方法解析静态分派动态分派参考Class 文件格式 一般情况下Java代码执行流程如下图&#xff1a; 字节码 字节码文件 .class文件的产生是最关…...

做网站哪家南京做网站/百度网盘官网登录首页

一、什么是JSON&#xff1f; JSON 英文全称 JavaScript Object Notation&#xff0c;JSON 是用于存储和传输数据的格式。JSON 最常见的用法是从 web 服务器上读取 JSON 数据&#xff0c;将 JSON 数据转换为 JavaScript 对象&#xff0c;然后在网页中使用该数据。 JSON简单说就是…...

ui设计师个人优势/杭州seo排名优化

一、网络编程为什么需要进行消息定界 封帧一般是指在一段数据的前后分别添加首部和尾部&#xff0c;以此形成数据帧。对数据帧而言&#xff0c;首部和尾部的重要作用之一&#xff0c;就是可以对消息进行定界。因此封帧的本身就是消息定界中的一种方式。那么我们为什么要对消息进…...

ps做网站连接/什么是营销型网站?

鼠标经过事件&#xff0c;当鼠标移到一个对象上时&#xff0c;该对象就触发onclick事件&#xff0c;并执行onclick事件调用的程序。 现实鼠标点击 window.onload function () {var navdocument.getElementsByClassName("nav") var acc document.getElementsByClass…...