python2和python3 的区别

Python 2 和 Python 3

引言

Python 是一种极具可读性和通用性的编程语言。Python 这个名字的灵感来自于英国喜剧团体 Monty Python,它的开发团队有一个重要的基础目标,就是使语言使用起来很有趣。Python 易于设置,并且是用相对直接的风格来编写,对错误会提供即时反馈,对初学者而言是个很好的选择。

Python 是一种多范式语言,也就是说,它支持多种编程风格,包括脚本和面向对象,这使得它适用于通用目的。随着越来越多地在工业中,被诸如联合太空联盟(NASA 的主要飞机支持承包商)和工业光魔(VFX 和卢卡斯影业的动画工作室)等组织使用,Python 为那些寻求额外编程语言的人提供了巨大的潜力 。

开发于 20 世纪 80 年代末并于 1991 年首次被发布,Python 的创始人是 Guido van Rossum ,而他现在仍然活跃在社区中。被认为是 ABC 编程语言的继承者,Python 的第一版就已经包括异常处理,函数和带继承的类。当一个重要的被称为 comp.lang.python 的 Python 新闻组在 1994 年形成时,Python 的用户基础不断增长,这为 Python 成为开源开发中最受欢迎的编程语言之一铺平了道路。

总体概述

在探讨 Python 2 和 Python 3 之间的潜在可能性和关键的程序化差异之前,我们来看看最近的 Python 主要版本的背景。

Python 2

Python 2 发布于 2000 年年底,意味着较之先前版本,这是一种更加清晰和更具包容性的语言开发过程。而先前版本的 Python 应用的是 PEP (Python 增强协议),这种技术规范能向 Python 社区成员提供信息或描述这种语言的新特性。

此外,Python 2 还包括了更多的程序性功能,包括能自动化地管理内存的循环检测垃圾收集器,增加了对 Unicode 的支持以实现字符的标准化,并采用列表综合的方式以在现有列表基础上创建列表。 随着 Python 2 的不断发展,更多的功能被添加进来,包括将 Python 的类型和类在 Python 2.2 版本中统一为一层。

Python 3

Python 3 被视为 Python 的未来,是目前正在开发中的语言版本。作为一项重大改革,Python 3 于 2008 年年末发布,以解决和修正以前语言版本的内在设计缺陷。Python 3 开发的重点是清理代码库并删除冗余,清晰地表明只能用一种方式来执行给定的任务。

对 Python 3.0 的主要修改包括将 print 语句更改为内置函数,改进整数分割的方式,并对 Unicode 提供更多的支持。

起初,Python 3的采用很缓慢,因为该语言不能向后兼容 Python 2,这就需要人们决定该使用哪个版本的语言。此外,许多封装库库只适用于 Python 2,但是由于 Python 3 背后的开发团队重申了终止对 Python 2 的支持,促使更多的库被移植到 Python 3 上来。从对 Python 3 提供支持的 Python 包的数量可以看出,Python 3 已得到越来越多的采用,在撰写本文时,支持它的包就已包括了 339 个最受欢迎的 Python 包。

Python 2.7

在 2008 年 Python 3.0 的发布之后,Python 2.7 于 2010 年 7 月 3 日发布,并计划作为 2.x 版本的最后一版。发布 Python 2.7 的目的在于,通过提供一些测量两者之间兼容性的措施,使 Python 2.x 的用户更容易将功能移植到 Python 3 上。这种兼容性支持包括了 2.7 版本的增强模块,如支持测试自动化的 unittest,用于解析命令行选项的 argparse,以及更方便的集合类。

Python 2.7 具有 Python 2 和 Python 3.0 之间的早期迭代版本的独特位置,它因为对许多具有鲁棒性的库具有兼容性,对于程序员而言一直是非常流行的选择。当我们今天讨论 Python 2 时,我们通常指的是 Python 2.7 版本,因为它是最常用的版本。

然而,Python 2.7 被认为是一种遗留语言,且它的后续开发,包括现在最主要的 bug 修复,将在 2020 年完全停止。

python2版本和python3版本的区别,两者对比如下

核心类差异

  1. Python3 对 Unicode 字符的原生支持。

    Python2 中使用 ASCII 码作为默认编码方式导致 string 有两种类型 str 和 unicode,

    Python3 只支持 unicode 的 string。

  2. Python3 采用的是绝对路径的方式进行 import

  3. Python2 中相对路径的 import 会导致标准库导入变得困难(想象一下,同一目录下有 file.py,如

    何同时导入这个文件和标准库 file)。Python3 中这一点将被修改,如果还需要导入同一目录的文件必

    须使用绝对路径,否则只能使用相关导入的方式来进行导入。

  4. Python2 中存在老式类和新式类的区别,Python3 统一采用新式类。新式类声明要求继承 object,

    必须用新式类应用多重继承。

  5. Python3 使用更加严格的缩进。Python2 的缩进机制中,1 个 tab 和 8 个 space 是等价的,所

    以在缩进中可以同时允许 tab 和 space 在代码中共存。这种等价机制会导致部分 IDE 使用存在问题。

    Python3 中 1 个 tab 只能找另外一个 tab 替代,因此 tab 和 space 共存会导致报错

TabError: inconsistent use of tabs and spaces in indentation.
废弃类差异
  1. print 语句被 Python3 废弃,统一使用 print 函数

  2. exec 语句被 python3 废弃,统一使用 exec 函数

  3. execfile 语句被 Python3 废弃,推荐使用 exec(open("./filename").read())

  4. 不相等操作符"<>“被 Python3 废弃,统一使用”!="

  5. long 整数类型被 Python3 废弃,统一使用 int

  6. xrange 函数被 Python3 废弃,统一使用 range,Python3 中 range 的机制也进行修改并提高

​ 了大数据集生成效率

  1. Python3 中这些方法再不再返回 list 对象:dictionary 关联的 keys()、values()、items(),zip(),

    map(),filter(),但是可以通过 list 强行转换:

mydict={"a":1,"b":2,"c":3}

mydict.keys() #<built-in method keys of dict object at 0x000000000040B4C8>

list(mydict.keys()) #['a', 'c', 'b']
  1. 迭代器 iterator 的 next()函数被 Python3 废弃,统一使用 next(iterator)

  2. raw_input 函数被 Python3 废弃,统一使用 input 函数

  3. 字典变量的 has_key 函数被 Python 废弃,统一使用 in 关键词

  4. file 函数被 Python3 废弃,统一使用 open 来处理文件,可以通过 io.IOBase 检查文件类型

  5. apply 函数被 Python3 废弃

  6. 异常 StandardError 被 Python3 废弃,统一使用 Exception

修改类差异

1. 浮点数除法操作符“/”和“//”的区别

“ / ”:

Python2:若为两个整形数进行运算,结果为整形,但若两个数中有一个为浮点数,则结果为

浮点数;

Python3:为真除法,运算结果不再根据参加运算的数的类型。

“//”:

Python2:返回小于除法运算结果的最大整数;从类型上讲,与"/"运算符返回类型逻辑一致。

Python3:和 Python2 运算结果一样。

2. 异常抛出和捕捉机制区别

Python2

raise IOError, "file error" #抛出异常

except NameError, err: #捕捉异常

Python3

raise IOError("file error") #抛出异常

except NameError as err: #捕捉异常

3. for 循环中变量值区别

Python2,for 循环会修改外部相同名称变量的值

i = 1

print'comprehension: ', [i for i in range(5)]print'after: i =', i ) #i=4

Python3,for 循环不会修改外部相同名称变量的值

i = 1

print'comprehension: ', [i for i in range(5)]print'after: i =', i ) #i=1

4. round 函数返回值区别

Python2,round 函数返回 float 类型值

isinstance(round(15.5),int) #True

Python3,round 函数返回 int 类型值

1. isinstance(round(15.5),float) #True

5. 比较操作符区别

Python2 中任意两个对象都可以比较

11 < 'test' #True

Python3 中只有同一数据类型的对象可以比较

11 < 'test' # TypeError: unorderable types: int() < str()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值