python 各个版本之间为何差距很大?

2015-08-01 09:29:24 +08:00
 rondo9
python2.0和3.0对于除号和整除有很大差异,不知道开发者为何这样指定规则?
6496 次点击
所在节点    Python
33 条回复
introom
2015-08-01 09:42:19 +08:00
因为开发者蛋疼。

不过从用户的角度来说,在3里,/是带浮点除法,//是去尾整除,写起来还是很方便的。
在Py2,用户得蛋疼得加个.0比方说3/2.0来得到浮点结果,对于变量还得来个类型转换比如3/float(hoge)菜行。
Damnever
2015-08-01 09:51:14 +08:00
Mark24
2015-08-01 11:21:30 +08:00
把Python2中设计不合理的,在Python 3中改进,规范化,比如2中print “待打印字符串”,3中,print("带打印字符串"),就是print也是函数,按照道理,应该有括号。规范化,线性化,改善性能,把默认字符串国际化,等等。3的方向就是这样
rootsir
2015-08-01 11:27:33 +08:00
因为python不是商业化语言,所以肯定没有商业化语言稳定
rootsir
2015-08-01 11:27:49 +08:00
更新上会比较激进
0bit
2015-08-01 11:54:46 +08:00
@rootsir Python只是在2.x到3.x的跨大版本升级上比较激进。
实际上在同一代的升级,还是很谨慎的,一般API变更不大,兼容也很好做。
tini31
2015-08-01 11:58:21 +08:00
最受不了的就是print带括号,我会说我在python中写的最多的关键字就是print吗
guoqiao
2015-08-01 12:08:48 +08:00
@tini31 对, print 有了括号, 语法上是更一致了, 但是用起来太不方便了.

Python 让人喜爱的重要原因之一就是简单方便不迂腐.
而这个改变其实不符合 Python 的哲学.
迎合了处女座, 但给一个最常用的功能带来了语法不兼容, 真的是得不偿失.
clino
2015-08-01 12:26:36 +08:00
其实要是python 3 改一个地方,然后4改一个地方,这样过渡得会比较平滑容易被接受
不过作者估计看不下去想把自己之前的设计重构推翻
lilydjwg
2015-08-01 12:28:59 +08:00
各个版本差异大的应该是 Lua 和 Ruby 而不是 Python,因为 Python 只是 2.x 和 3.x 差异很大,2.x 内部以及 3.x 内部基本上都是向下兼容的。

Python 3 为了正确地支持 Unicode,不得不与 Python 2 不兼容。既然都不兼容了,不如趁此机会把 Python 2 那些不好的地方都改了。于是又弄出许多小的语法差异。

另外,Perl 5 和 Perl 6 的差异更大。

@tini31 你是不是应该用 logging 了?

@guoqiao 如果你说 print 函数打字多,那么大部分情况下是的。可是 print('loading...', end='', flush=True) 真的很棒呢~

为什么不符合 Python 的哲学呢?不符合哪一条?我看它倒是挺符合 Explicit is better than implicit. 以及 Special cases aren't special enough to break the rules.
tini31
2015-08-01 13:01:41 +08:00
@lilydjwg 只不过输出个字符串再专门 import logging ?,拜托我用python很多时候就是当脚本和交互式命令行用的,不是当java用的
jimzhong
2015-08-01 13:15:07 +08:00
3更优美了,2有一些反人类的设计,还有unicode问题
yakczh
2015-08-01 13:20:26 +08:00
python2的字符集编码跟php一样,读入字节码,需要手动转换
python3的字符集编码跟java一样,不管外部输入的什么编码,内部统一用unicode
lilydjwg
2015-08-01 13:51:36 +08:00
@tini31 会有很多单独的输出?我真没见过几乎满屏都是 print 的情况。交互式命令行下你可以 p=print,然后用 p(xxx),如果 repr 的结果不好用的话。
lilydjwg
2015-08-01 13:52:24 +08:00
@yakczh Java 是 UTF16,不是 Unicode,对于 U+ffff 以上的字符会当成两个字符的。
yakczh
2015-08-01 14:25:33 +08:00
@lilydjwg utf8 utf16le utf16be都是unicode子集 统称unicode可以不查表很方便地互相转换 java class文件就是用utf8存储的,读入内存才用utf16 ,python生成的pyc字节码也一样
zhicheng
2015-08-01 14:34:34 +08:00
Python 3.x 里有很多设计是非常优秀的,即使不在项目中使用,也建议多了解一下,现在在 Python 2.7 中可以写出和 Python 3.x 完全兼容的代码,具体看一下 __future__ 。
leavic
2015-08-01 18:03:09 +08:00
同感2里面print不带括号太蛋疼了,lambda都用不了它,写c还要来回切脑子
wbsdty331
2015-08-01 18:05:08 +08:00
3里面Print强制带括号
Shy07
2015-08-01 19:24:53 +08:00
@lilydjwg 求不黑 Ruby,我记得 Ruby 2.0 发布的时候,Matz 在演讲为什么要升级到 2.0 时提到一条, 2.0 完全兼容以前的代码,然后台上台下会心一笑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/209998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX