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删除...
- 一周热门
- 最近发表
-
- Docker篇(二):Docker实战,命令解析
- docker学习笔记——安装和基本操作
- 不可错过的Docker完整笔记(dockerhib)
- 扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!
- 第五节 Docker 入门实践:从 Hello World 到容器操作
- 替代Docker build的Buildah简单介绍
- Docker 命令大全(docker命令大全记录表)
- docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)
- 使用Docker快速部署Storm环境(docker部署confluence)
- Docker Desktop安装使用指南:零基础教程
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- oracle时间戳转换日期 (64)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)