Python3那些与Python2不同的地方(持续更新)

P

又是一年踩坑时啊,最近写Python为了保证在Python2和Python3中同时运行踩了不少关于两者的坑,本来是没打算总结的,可是越踩越多,越踩越多,脑子实在记不住了,就提笔写了这一篇博客

print

这是一个很普遍的坑,也是一个很容易遇到的坑

在Python27中,print可以这么写

也可以这么写

而在python3上只能使用第二种写法,究其原因是因为print在Python27中还是一条语句,而这个print语句可以识别额外的(),而在Python3中print语句被print()函数替代,使用print变成了函数调用,自然就不能有之前第一种写法了,否则会出现“SyntaxError: invalid syntax

整数除法

这算是一个比较不起眼的改动,而且编程习惯良好的程序员可能几乎都发现不了这个改动,但是还是要提一下

在Python2中

而在Python3中

整数除整数在Python3中可以产生浮点数了,是该说Python变得更智能了还是说代码的严谨性越来越差了呢

编码

超级蛋疼的问题,这个问题几乎在我写爬虫的时候成为一个很要命的让代码同时兼容Python2和Python3的老大难问题

在Python2中默认编码为ascii(蛋疼),这就会导致在面对UTF-8编码的网页和文件读取时会出现很多问题,Windows的GB2312让我很嫌弃

在Python3中默认编码UTF-8,真的舒服呀

其实在Python2中也可以在py文件的一开头可以通过声明一下语句来实现使用UTF-8

所以在Python2里看到“SyntaxError: Non-ASCII character”就放平心态就好,你不是一人在排错,不过这个也和编程习惯有关

说到编码问题,因为Python3原生支持UTF-8,所以你可以用中文来做变量名,瞬间亲民了有木有

True 和 False

这是一个很好玩的问题,甚至可以上升到人类认知的高度,你知道吗在Python中True可以被永久(其实只针对于本次程序运行)更改成False (劳资的True没了。哭,都给劳资哭)

当然你可以把True赋值成任意值

这个问题在Python3中被解决了,如果你在Python3中执行上述代码会得到一个“SyntaxError: can’t assign to keyword(hia hia hia劳资的True谁也动不了)

异常捕获

异常捕获在Python2和Python3中也有了些许的不同,在Python2中将异常捕获到变量中可以这么写

然而在Python3中会认为上述写法存在语法错误,需要这么写

我说调试了半天就是不对

迭代器

说到迭代器这个就厉害了,在Python2哪个时代返回大多都是列表,而在Python3中正式使用迭代器对象来代替了返回列表,因为迭代器的惰性加载使得对大数据的处理速度更快。诸如dict.keys(),dict.values()等也放弃了返回列表,返回的都是迭代器对象

说到迭代器对象,其实可以算作一种数据集合,包含list、set、tuple、dict、str以及带yield的generator function,迭代器都可以使用next()来进行迭代,同时支持for循环,具体迭代器的用法就不在这里详细描述了,可以参考Python学习手册或者廖雪峰的官方网站来学习

八进制

在Python2中八进制数值可以携程07777或者0o7777。但是在Python3中,07777这种写法不被编译器认可,只能写成0o7777。如果在Python3中使用07777会产生“SyntaxError: invalid token”错误

About the author

NOBUG.IN

Add comment

By NOBUG.IN

Your sidebar area is currently empty. Hurry up and add some widgets.