Python 3 作出的不兼容改动,我觉得对这门语言是有很大益处的。修正的地方其实是以前的设计失误, 下面举两个最明显的例子。
首先是print由 statement 转变为函数。看看这个语法:
print >> outfile, arg1, arg2
和新的语法
print(arg1, arg2, file=outfile)
在 Python 2, 当你想输出不换行的时候, 要这样, 在后面加一个逗号:
print arg1, arg2,
但这样不可避免地会出现一个空格。
Python 3 里面,解决了这个问题
print(arg1, arg2, end='')
而且好处还有更多, 因为 Python 函数参数传递的表达能力很强,对print引入特殊语法反而约束了表达能力, 例如不能用 * 号展开参数。
第二个例子,当然是字符串的问题了, 相信用过 Python 2 的人都被decode, encode什么的坑过。Python 2 里面:
bytes is str # True !!!
这坑爹呢!
在 Python 3 里面, 通过把 str 分成 str 和 bytes 两个概念,很好的解决了这个问题。str.encode, bytes.decode, 学习了 Python 3 甚至可以帮助你理解 Python 2 这个地方为什么这么坑, 这完全是个设计失误,迟早要改的。