python2和python3系列之间的区别

本文详细对比了Python2与Python3的主要区别,包括编码方式、print语法、整数除法、八进制表示、关键字引入等更新,以及如range、input、exception处理等函数与语法的调整。

python2和python3系列之间的区别

在这里插入图片描述
(1)3系列默认UTF-8编码,在处理英文和中文时一样方便。

(2)用print函数代替了print·语句,example:
python2:>>>print “Hello World”
python3:>>>print(“Hello World”)
python2:>>>print x,
python3:>>>print(x,end=’,’)

(3)用exec函数替代了exec语句。

(4)去掉<>符用!=表示不等于。

(5)用<,<=,>,>=符合比较两个元素时,如果元素之间不存在有意义的顺序关系,将抛出TypeError错误,而不是返回False,example:
python2:>>>1<“1”
False
在这里插入图片描述
(6)python3系列不在区分整数和长整数类型,只有一个int类型,int类型取消了取值范围限制,sys.maxint被去掉。

(7)两个整数一般除法(/)返回一个浮点数,不在是返回整数,想返回整数则需要使用(//)
在这里插入图片描述
(8)在八进制整数上做了改动,使用0o楷开头而不再使用0开头。

(9)增加了as,with,True,False,None作为关键字。

(10)去掉raw_input()函数改为input()替代。

(11)修改了range()函数,range函数与2系列的xrange()作用类似,不在显式返回一个列表,如果想返回列表则需要用list()转换。

(12)除了range(),zip(),map(),filter(),字典类型的key()方法,values()方法,itme()方法不在返回列表类型。
在这里插入图片描述
(13)使用as关键字标识异常信息
python2:>>>try:
… wrong_name
…expect NameError,err:
…print err

在这里插入图片描述

<think> 我们被要求回答关于Python 2Python 3之间发生的事件。根据提供的引用,我们可以总结出以下关键点: 引用[1]提到:Python 3是一次向后不兼容的重大升级,导致绝大多数Python 2代码无法在Python 3环境中运行,反之亦然。特别指出,文本二进制数据的处理(unicode/str/bytes)是移植代码到Python 3中真正棘手的部分,因为在Python 2中这是一团糟。 引用[2]提到:Python 32在一些内置函数(如map、filter)上也有差异。 引用[3]提到:Python 2.x3.x的差异非常大,从简单的print语句到核心库的改进都有涉及。 引用[4]提到:在Python 2中使用不等号运算符需要“>”或“<”符号,而Python 3中可以使用“!=”作为通用不等号运算符(实际上Python2也有!=,但引用可能是指操作符使用习惯上的变化,但更准确地说,Python3中取消了`<>`运算符,只保留`!=`)。 根据以上引用已知知识,我们可以概述Python 2Python 3的主要事件: 1. **发布背景**:Python 3.0(也称为Python 3000或Py3k)于2008年123日发布。它被设计为对语言进行彻底的清理,解决修正Python 2中已知的设计缺陷,而不考虑向后兼容性。 2. **主要变化**: - **print函数**:Python 2中print是一个语句,而Python 3中print是一个函数(需要括号)。 - **整数除法**:Python 2中整数除法是整除(例如,`1/2`结果为0),而Python 3中`/`是真正的除法(`1/2`结果为0.5),整除使用`//`。 - **Unicode支持**:Python 3中的所有字符串都是Unicode字符串(str类型),而需要字节序列时则使用bytes类型。在Python 2中,str是字节字符串,而unicode是Unicode字符串,这种分离导致了许多问题。 - **语法变化**:例如,Python 3中取消了`<>`运算符,只使用`!=`;异常捕获语法改变(使用`as`关键字);等等。 - **内置函数变化**:如`map`、`filter`返回迭代器而不是列表(这与Python 2的xrange类似),`reduce`被移到了functools模块。 - **标准库重组**:一些模块被重命名或移除(例如,`urllib2`被整合到`urllib`中)。 3. **兼容性问题**:由于这些重大变化,Python 2代码无法直接在Python 3解释器上运行。为此,Python社区提供了工具(如2to3)来帮助迁移,但很多情况下需要手动修改。 4. **迁移的艰难过程**:由于大量第三方库在早期不支持Python 3,导致迁移缓慢。因此,Python 2.7作为最后一个Python 2版本,在2008年发布,并且支持持续到2020年1月1日。 5. **结束支持**:2020年1月1日,Python 2正式停止支持,不再提供安全更新bug修复。这促使许多组织迁移到Python 3。 6. **当前状态**:现在,Python 3已经成为主流,所有新的特性改进都在Python 3版本中进行。Python 2已经不再被维护。 因此,我们可以将事件按时间顺序总结: - **2008年12月**:Python 3.0发布,引入不兼容的变化。 - **2010年7月**:Python 2.7发布,作为2.x系列的最后一个版本,旨在帮助用户过渡。 - **2020年1月1日**:Python 2.7正式停止支持。 回答结构: 1. 简述Python 3发布的背景目的。 2. 列举主要变化(重点在引用中提到的文本处理、内置函数等)。 3. 说明兼容性问题迁移过程。 4. 提到结束支持的时间当前状态。 最后,按照要求生成相关问题。 </think> ### Python 2Python 3 的关键事件及差异 Python 2Python 3 的过渡是 Python 历史上最重要的变革之一,核心事件如下: 1. **2008年 Python 3.0 发布** - Python 3.0(代号 "Python 3000")首次发布,设计目标是通过**彻底重构解决 Python 2 的深层缺陷**,尤其针对文本处理编码模型[^1]。 - 关键决策:**放弃向后兼容性**,导致绝大多数 Python 2 代码无法直接在 Python 3 运行[^1]。 2. **核心差异引发挑战** - **文本处理革命** - Python 2 中 `str`(字节串) `unicode` 类型混用导致编码混乱[^1]。 - Python 3 明确区分:`str`(Unicode 字符串) `bytes`(二进制数据)[^1]。 - **语法与内置函数变更** - `print` 从语句变为函数(`print()` 需加括号)[^3]。 - `map/filter` 返回迭代器而非列表,`reduce` 移入 `functools`[^2]。 - 不等号统一为 `!=`(Python 2 曾支持 `<>`)[^4]。 - **整数除法行为** - Python 2:`5/2 = 2`(整除);Python 3:`5/2 = 2.5`(真除法)[^3]。 3. **漫长的迁移期(2008-2020)** - 因兼容性问题,Python 2.7 作为过渡版本于 2010 年发布,提供部分兼容支持[^1]。 - 社区工具(如 `2to3` 转换工具)兼容层(`six` 库)涌现以协助迁移。 - 2020 年 1 月 1 日:Python 2 官方**终止支持**,停止安全更新[^3]。 4. **现状与影响** - Python 3 已成为绝对主流(2023 年 PyPI 包兼容率达 99%)。 - 遗留系统迁移难点集中于:字节串/字符串处理、第三方库依赖、C扩展兼容性[^1]。 > 示例对比:字符串处理 > ```python > # Python 2(混乱) > s = "你好" # 字节串(可能引发编码错误) > u = u"你好" # Unicode 字符串 > > # Python 3(清晰) > s = "你好" # 自动处理为 Unicode 字符串 > b = b"hello" # 显式二进制数据 > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_2415200549

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值