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的第一步,一定是先将文件内容从硬 ...
随机推荐
- Markdown编辑器-图形化
SELECT * from yffee_favourable_detail yfd LEFT JOIN yffee_favourable yf on yfd.minor_id = yf.major_i ...
- 【.Net】水晶报表CrystalReport粗浅入门
VB6代码大概是这样的: crystalreport1.Connect:='dsn=xxx;uid=yyy;pwd=zzz;dsq=aaa'; crystalreport1.DiscardSavedD ...
- 功能------常用快捷键(在win10下)
功能------win10 常用快捷键 在进行学习,记录,编写代码时,需要用到一些功能,用鼠标浪费时间,可以使用快捷键来快速的处理.方便操作. 以下内容分为两类.快捷键以及触控板类(不能享用鼠标) 快 ...
- CUBA China 最新进展
各位关注CUBA平台的朋友,你们好! 距上次发布动态我们又沉默了大概两个月时间,这期间我们一直在翻译CUBA平台的文档.CUBA平台的开发文档相当丰富,所以这需要耗费较多的时间,至少比我们预想的时间要 ...
- java date相关
public static void getPreDay() throws ParseException{ String dateStr="2013-1-1"; D ...
- 【转】Visio绘制WEB流程图的心得
一个哥们在MSN上告诉我,他们公司的交互设计师只产出流程图,并问我用什么标准评价流程图的好坏.他的说法把我彻底震了-这分工也太细了吧!也不知道该说他们那里这样是好还是不好. 不过仔细想来,我倒的确没有 ...
- 【转】实现Sqlite datediff日期时间相减的方法
对sqlite既恨又爱,在小项目里,用sqlite开发起来非常方便,效率足够用.美中不足的是sqlite精简了些功能及相关函数.如存储过程,datediff,不支持并发写入及远程访问(或许有些高手说这 ...
- 转载:SQL中的case when then else end用法
SQL中的case when then else end用法 来源: http://www.cnblogs.com/prefect/p/5746624.html Case具有两种格式.简单Case函数 ...
- python学习之老男孩python全栈第九期_day015知识点总结
# 作用域相关(2)locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 # 迭代器/生成器相关(3)range()print('__next__' i ...
- BZOJ4977: [[Lydsy1708月赛]跳伞求生
传送门 直接贪心 考虑到 \(n\) 个人的贡献都是 \(a_i\),另外 \(m\) 个人的贡献都是 \(c_i-b_i\) 首先 \(a_i>b_j\) 的限制不好做,所以将 \(a,b\) ...