百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Python2和Python3的区别是什么,我应该学习哪个?

bigegpt 2024-10-21 03:51 3 浏览


版本区别

python2 自2000年发布,python3 于2008年发布第一个版本,从时间上,python3 解决了python2版本中存在的一些问题。从 Python 2 向 Python 3 的过渡虽然不容易,但带来了更清晰、现代化和强大的语言特性。这些变化不仅提高了语言的一致性和可读性,也为未来的发展奠定了坚实的基础。


Python 2 的历史

Python 2.0 (2000年10月16日发布)

  • 垃圾回收器:引入了一个循环垃圾回收器,解决了引用循环问题。
  • 列表推导式:允许更简洁地创建列表。
  • Unicode 字符串:初步支持 Unicode,尽管不是默认的字符串类型。

Python 2.1 (2001年4月17日发布)

  • 作用域改进:引入了嵌套作用域,允许嵌套函数访问外部函数的变量。
  • PEP 234:引入了生成器。

Python 2.2 (2001年12月21日发布)

  • 新式类:引入了新式类(继承自 object),统一了类和类型。
  • 迭代器和生成器:使得处理序列更加高效。

Python 2.7 (2010年7月3日发布)

  • 这是 Python 2 的最后一个主要版本,增加了一些 Python 3 的特性,以帮助用户过渡到 Python 3,例如:集合推导式和更好的模块导入机制。
  • Python 2.7 原计划在 2015 年停止支持,但由于大量用户仍在使用,它的支持延长至 2020 年 1 月 1 日。


Python 3 的历史

Python 3.0 (2008年12月3日发布)

  • 不向后兼容:为了改进语言的一致性和清晰性,Python 3 做出了许多不向后兼容的改变。
  • print 函数:print 由语句变为函数,需要使用括号。
  • 整数除法:/ 操作符执行浮点数除法,// 执行整数除法。
  • Unicode:字符串默认使用 Unicode 编码。

Python 3.1 (2009年6月27日发布)

  • 改进 I/O 性能:大幅提升了 I/O 操作的速度。
  • OrderedDict:引入了 collections.OrderedDict,保证字典的插入顺序。

Python 3.3 (2012年9月29日发布)

  • yield from:增强生成器,允许生成器委托到另一个生成器。
  • 虚拟环境:venv 模块用于创建轻量级虚拟环境。

Python 3.5 (2015年9月13日发布)

  • 异步支持:引入 async 和 await 关键字,改进异步编程模型。
  • @ 操作符:用于矩阵乘法。

Python 3.6 (2016年12月23日发布)

  • f 字符串:引入了 f 字符串格式化方法,大大简化了字符串插值。
  • 字典保持插入顺序:从 CPython 3.6 开始,字典会记住插入顺序。

Python 3.7 (2018年6月27日发布)

  • 数据类:dataclasses 模块简化了类的创建,特别是用于存储数据的类。
  • 新的时间函数:高精度时间函数 time.time_ns()。

Python 3.8 (2019年10月14日发布)

  • 海象运算符:引入 := 运算符,允许在表达式内部进行赋值。
  • 位置参数专用语法:允许函数参数在特定位置只能使用位置参数。

Python 3.9 (2020年10月5日发布)

  • 类型提示改进:内置集合类型可以用于类型提示,例如:list[int]。
  • 字符串方法的合并:str.removeprefix() 和 str.removesuffix()。

Python 3.10 (2021年10月4日发布)

  • 模式匹配:引入结构化模式匹配 (match 和 case 语句)。
  • 更好的错误信息:错误信息和追踪更具可读性。


Python2 和 Python3 的区别点

1. Unicode 编码字符串

Python 3 默认使用 Unicode 编码字符串(str 类型)。 Python 2 默认使用 ASCII 编码字符串(str 类型)和 Unicode 字符串(unicode 类型)。

Python 3 示例:

# Python 3
s = "你好,世界"  # 默认就是 Unicode 编码
print(s)

Python 2 示例:

# Python 2
s = u"你好,世界"  # 需要在字符串前加 u 表示 Unicode 编码
print s

2. Range 函数

Python 3 中的 range() 函数返回一个 range 对象,类似于 Python 2 的 xrange()。 Python 2 中的 range() 返回一个列表,而 xrange() 返回一个生成器。

Python 3 示例:

# Python 3
for i in range(5):
    print(i)

Python 2 示例:

# Python 2
for i in xrange(5):  # Python 2 中使用 xrange
    print i


3. 异常处理

Python 3 的异常使用 as 关键字来捕获异常实例。 Python 2 的异常使用逗号来捕获异常实例。

Python 3 示例:

# Python 3
try:
    1 / 0
except ZeroDivisionError as e:
    print(f"Exception: {e}")


Python 2 示例:

# Python 2
try:
    1 / 0
except ZeroDivisionError, e:
    print "Exception: {}".format(e)


4. 整数除法

Python 3 中,整数除法返回浮点数。 Python 2 中,整数除法返回整数,截断小数部分。

Python 3 示例:

# Python 3
result = 5 / 2
print(result)  # 输出 2.5

Python 2 示例:

# Python 2
result = 5 / 2
print result  # 输出 2

要在 Python 2 中获得浮点数结果,可以显式地进行浮点数除法:

# Python 2
result = 5 / 2.0
print result  # 输出 2.5

5. 类型注解

Python 3 支持类型注解,可以在函数定义时指定参数和返回值类型。 Python 2 不支持类型注解。

Python 3 示例:

# Python 3
def greet(name: str) -> str:
    return "Hello, " + name

print(greet("Alice"))

6. 打印语句

Python 3 中 print 是一个函数,必须使用括号。 Python 2 中 print 是一个语句,可以不使用括号。

Python 3 示例:

# Python 3
print("Hello, World!")

Python 2 示例:

# Python 2
print "Hello, World!"


7. 语法

Python 3 的语法更简洁易读,例如:移除了旧式类、废弃了某些老旧的库等。 Python 2 使用一些更复杂的语法和旧式库。

Python 3 示例:

# Python 3
class MyClass:
    pass


Python 2 示例:

# Python 2
class MyClass(object):  # Python 2 中需要显式地继承 object 才是新式类
    pass


8. 向后兼容性

Python 3 不向后兼容 Python 2 的代码,需要进行修改才能运行。 Python 2 向后兼容 Python 1.x 的代码,可以在不做重大修改的情况下运行。


应该学习哪个版本

基本上,python2版本官方已经不再维护,建议初学者直接选择版本3;

除非是维护旧的系统,目前业界上python 3.9、3.10版本占据主流

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...