python2.x和3.x的区别(不定时更新)
python2.x和3.x的区别
文:铁乐与猫
2018.3.16新增博文,为方便以后总结Python2.x与3.x的不同版本之间的区别,随时更新。
python原本的宗旨是崇尚优美、清晰、简单。但python刚推出的时候,自身除了创始者龟叔等谷歌少数人外,全世界的phthon大牛还很少,所以python社区来说,有很多各个语言的大牛去为python提供源码,而这些大牛提供的源码比较倾向于各自善长领域的语言的语法规范。例如有善长C的,有善长java的,写出来的源码都带有C或java的印记。这就导致一个状况:python2.x版本的源码相对混乱,重复代码较多显得繁擁。
有鉴于此,python的创始人龟叔在2008年的时候就“愤怒”了,这有别于python的初衷阿。
【关于龟叔】
python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。
(龟叔:2005年加入谷歌至2012年,2013年加入Dropbox直到现在,依然掌握着Python发展的核心方向,被称为仁慈的独裁者)。
一个很有趣的现象,python版本在2008年的时候出现了转折点:2.6版本之后“愤怒”的龟叔“规范”了python后直接跳跃到python3.0,最初他宣布要使用2.6版本的公司两个月后直接停止使用过渡到使用3.0版本。可这时间也太短了,遭到了全世界的抗议,所以后来才有了2.7版本的python做为过渡,提供更新直至到2020年。
原话如下:
Python 2.7 - July 3, 2010 In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
大至意思就是龟叔在2014年11月,宣布Python 2.7的支持直到2020年为止,重申不会再有2.8版本的发布,希望用户尽快迁移到Python 3.4+版本。
这也就是为何python2.7与python3.x共存发行的独特之处,也是为何python2.7与python3.x的语法规范等有50+以上的不同之处的原因所在。
让我们来随着学习python的脚步来逐一记录下2.x和3.x版本的各个不同之处,以便总结和应对,不过2020年快到了,也许很快就不用再记着2.7的不同了吧。
区别
01不忘初衷
python2.x:源码相对混乱,重复代码较多,显得繁冗;
python3.x:源码规范,优美清晰简单;
02 print
python2.x:print被视为一条语句;
python3.x:print作为函数存在,print()接收字符串作为参数。
如上图,很明显区别了。
在py2中,print语句后面接的是一个元组对象,而在py3中,print函数可以接收多个位置参数。
03 input
python2.x: 使用raw_input();Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入。
python3.x:使用input()函数接受一个标准输入数据,返回为 string 类型。。
raw_input() 将所有输入作为字符串看待,返回字符串类型。
而 input() 在对待纯数字输入时具有自己的特性,它返回所输入的数字的类型( int, float )。
注意:input() 和 raw_input() 这两个函数均能接收 字符串 ,但 raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收)。而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它会引发一个 SyntaxError 。
除非对 input() 有特别需要,否则一般情况下我们都是推荐使用 raw_input() 来与用户交互。
04 编码
Python2.x: 默认编码是 asscii;
Python 3.x: 默认UTF-8 , 因此不再需要在文件顶部写 # coding=utf-8 了。
05 字符串
Python2.x: 字符串有两个类型,一个是 unicode,一个是 str,前者表示文本字符串,后者表示字节序列,不过两者并没有明显的界限,开发者也感觉很混乱;
Python3.x: 两者做了严格区分,用 str 表示字符串,byte 表示字节序列,任何需要写入文本或者网络传输的数据都只接收字节序列,从源头上阻止了编码错误的问题。
补充:bytes 类型提供的操作和 str 一样,支持分片、索引、基本数值运算等操作。但是 str 与 bytes 类型的数据不能执行 + 操作,尽管在py2中是可行的。
python2 与 python3 字节与字符的对应关系:
python2 | python3 | 表现 | 转换 | 作用 |
---|---|---|---|---|
str | bytes | 字节 | encode | 存储 |
unicode | str | 字符 | decode | 显示 |
06 True和False
Python2.x: True 和 False 在 Python2 中是两个全局变量(名字),在数值上分别对应 1 和 0, 作为变量,可以指向其它对象,产生了混乱,也违背了设计初衷。
Python3.x: Python3 修正了这个缺陷,True 和 False 变为两个关键字,永远指向两个固定的对象,不允许再被重新赋值。
07 比较运算符
Python2.x: 支持<>作为!=的同义词;
Python3.x: 只支持!=,不再支持<>。
08 字典类方法 HAS_KEY()
Python2.x: 字典对象has_key()方法测试字典是否包含指定的键。
Python3.x:python3不再支持这个方法,使用in就可以了。
09 xrange()
Python2.x: 有两种方法获得一定范围内的数字:range()返回一个列表,xrange()返回一个迭代器。
Python3.x:range()也可以返回迭代器,xrange()不再存在。
10 intern(字符串驻留,数据池)机制
Python2.x:支持intern()
Python3.x:不支持intern()
注:
python默认只会对由字符
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz"
构成字符串进行intern。
(未完待续)
python2.x和3.x的区别(不定时更新)的更多相关文章
- Python2和Python3的一些语法区别
Python2和Python3的一些语法区别 python 1.print 在版本2的使用方法是: print 'this is version 2 也可以是 print('this is versi ...
- Python2与Python3字符编码的区别
目录 字符编码应用之Python(掌握) 执行Python程序的三个阶段 Python2与Python3字符串类型的区别(了解) Python2 str类型 Unicode类型 Python3 字符编 ...
- python3中的 zip()函数 和python2中的 zip()函数 的区别
python3中的 zip()函数 和python2中的 zip()函数 的区别: 描述: zip() 函数用于将可迭代对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象. ...
- Python2.x与3.x版本区别
Python2.x与3.x版本区别 1.print 函数 print语句没有了,取而代之的是print()函数. Python 2.6与Python 2.7部分地支持这种形式的print语法.在Pyt ...
- python大法好——Python2.x与3.x版本区别
python大法好——Python2.x与3.x版本区别 Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级. 为了不带 ...
- 【python系列】python2.x和python3.x的区别
刚接触python使用的是python2.x的书籍,但是发现python3.x和python2.x有不小的区别,以下做一些记录 性能 Py3.0运行 pystone benchmark的速度比Py2. ...
- python2和python3中range的区别
参考自 python2和python3中的range区别 - CSDN博客 http://blog.csdn.net/xiexingshishu/article/details/48581379 py ...
- day008 字符编码之 字符编码 、Python2和Python3字符编码的区别
计算机基础(掌握) 启动应用程序的流程 双击qq 操作系统接受指令然后把该操作转化为0和1发送给CPU CPU接受指令然后把指令发送给内存 内存接受指令把指令发送给硬盘获取数据 qq在内存中运行 文本 ...
- Python2和3字符编码的区别
Python2和3字符编码的区别 一.字符编码应用之Python 1.1 执行Python程序的三个阶段 Python test.py(我再强调一遍,执行test.py的第一步,一定是先将文件内容从硬 ...
随机推荐
- solidity如何拼接字符串?
当你开始学习使用solidity开发以太坊智能合约之后,很快你会碰到一个问题: 一.在solidity中该如何拼接字符串? 可能你已经试过了,下面的代码试图把两个字符串使用相加的运算符连接起来,但是这 ...
- iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。
这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...
- Linux进程管理 简介
何为进程,我想这个问题大家再熟悉不过了吧,无非就是"执行中的程序"! 概念性的东西本文暂时忽略或者略微一提,详细信息还需要阅读相应的blog或专业书籍.(博主收藏了计算机相关的大量 ...
- sql 等额本息
/* 等额本息计算还款额 a 贷款总额 b 月利率 m 贷款月数 */ execute block returns (result double precision) as declare a ; - ...
- 以中间件,路由,跨进程事件的姿势使用WebSocket--Node.js篇
上一篇文章介绍了在浏览器端以中间件,路由,跨进程事件的姿势使用原生WebSocket.这篇文章将介绍如何使用Node.js以相同的编程模式来实现WebSocket服务端. Node.js中比较流行的两 ...
- DataContractSerializer数据不一致下序列化
一.数据类型的等效性 例如下面定义的两个类成员名称.定义顺序都不一样,但是在DataContract.DataMember的Name属性作用下,两个类的实例对象序列化后的xml是一样的,因此Or ...
- Jsp&Servlet入门级项目全程实录第4讲
惯例广告一发,对于初学真,真的很有用www.java1234.com,去试试吧! 1.添加搜索.添加.修改.删除按钮 <div id="tb"> <div> ...
- MyEclipse在不同编辑面间快速切换
想在下面的编辑页面间切换有两种方式,一种是按“栈”方式切换,一种是按“链表”方式切换. 按栈方式切换: Alt + 左箭头: 上一次编辑页面 Alter + 右箭头 : 下一个编辑也页面 按链表(绝对 ...
- Java版分布式ID生成器技术介绍
分布式全局ID生成器作为分布式架构中重要的组成部分,在高并发场景下承载着分担数据库写瓶颈的压力. 之前实现过PHP+Swoole版,性能和稳定性在生产环境下运行良好.这次使用Java进行重写,目前测试 ...
- 解决post请求乱码问题
将下面配置信息配置在webapp/WEB-INF/web.xml中 <!-- 解决post乱码 --><filter> <filter-name>Character ...