@
gouchaoer 不是加不加括号, 而是从一个表达式变成了函数, 引用
https://stackoverflow.com/a/6241519 提到的其中一个好处就是可以像如下方式使用 print:
>>> [print(x) for x in range(10)]
print 并不会对兼容性造成太多的困扰, 毕竟很少有库里直接使用 print, 而且 print 这种非常容易修改. 最大的不兼容就是底层使用 Unicode 重新实现, 同时严格区分了 字节序(bytes) 和 Unicode(str). 比如 Python2 中 bytes 和 unicode 可以相互比较, 但是在 Python3 中是不允许的:
Python2:
>>> b'abc' in u'cc abc' # True
Python3:
>>> b'abc' in 'abc' # TypeError
还有比如 Python2 中只要是字符串类型(str,unicode) 都有 format/decode/encode 方法, 但是 Python3 中仅允许 Unicode(str) 有 encode/format 方法, bytes 不允许有 format 方法, 等等等.
这样做的好处是让语言更加严谨, 其他一些库的不兼容可能主要是由于这个原因导致, 也有部分可能是破窗效应: 反正不兼容那就做些大调整, 比如换个名啥的.
还有一些类似 MySQLdb 这样的库不兼容是因为 Python3 的 C API 也不兼容, 导致这些用 C 写的扩展库不支持 Python3, 就像 #8 说的, 除非一些已死的项目(想 MySQLdb) 基本上都已经(或正在)同时兼容 Python2 和 Python3.