我最近做了一些网页设计作为一种爱好,主要动机是学习有趣的东西。学习Python当然很好,但是我发现有一个Great Python重写太晚了,所以我必须学习Python 3和2.6。
我是新手,所以我希望人们从最终用户编程而不是语言设计者的角度分享他们认为Python 3的优点/缺点。我的问题更多的是人们实际上喜欢使用或回避是非生产性或单一性的。
对我来说,with
声明是明确的加号,而打破print
运算符绝对是负数。
澄清编辑:有很多帖子询问是否应该学习Python 2或3,或者是否有任何差异。我看到我的问题是不同的:来自那些无论出于何种原因选择使用Python 3的人的反馈,但可能对哪些更好,哪些更好有意见。
另一个澄清:已将with
向后移植到2. *的答案中指出。道歉。
答案 0 :(得分:5)
我没有在生产中使用Python 3,但是,在玩它时我发现print
是一个功能是一个极好的想法 - 例如,我可以很容易地把它在lambda
现在,在2. *我必须使用sys.stdout.write("%s\n" % foo)
,有点狡猾。此外,使用不同于sys.stdout
或删除最终\n
的输出文件进行此类调整的语法是所以比Python 2更具可读性。*!的!
BTW,with
也是最近的Python 2. *版本,它不是Python 3 - 独占。
答案 1 :(得分:2)
从长远来看,我认为他们所做的一切都是最好的。他们删除了许多不赞成做事的方法,从而强制执行“只有一种方法去做”并提高一致性。此外,with
语句非常棒。
使用Python 3的一个明显问题是它缺乏对许多[大]库(例如Django)的支持。如果你的库没有破坏Python 3,就没有理由不使用它。
答案 2 :(得分:2)
强项是字节和字符串之间的澄清。您在简短的Python体验中有多少次与不清楚的UnicodeDecodeError
和UnicodeEncodeError
混淆了?如果你从未遇到过unicode vs bytestrings的麻烦,你很可能会使用ascii-only语言,(英语?;))但这通常是初学者最难掌握的概念。 (顺便说一句,如果你仍然感到困惑,{2. 3}用于Python 2.x)
我真的认为str和bytes之间的区别是Python3.0的优点之一。阅读this link should help获取正式描述,阅读PEP358获取更多面向最终用户的信息。此新功能强制开发人员在unicode对象和以特定编码编码的字节对象之间保持 clear 区别。我相信这一改变将有助于新手更容易理解这两种结构之间的差异,并将帮助有经验的开发人员使用理智的编程方法。
但是当然这种改变有其自身的不便之处:移植2.x应用程序非常困难,如果你还没有清楚地分离Unicode和字节字符串,这些str + unicode到str +字节的改变是最烦人的改变在你的2.x代码中。很烦人,但很需要。
这些重大变化对很多用户来说都很烦人,并且......对于重要的图书馆/解决方案来说实施起来很烦人。 Python2.x的当前力量是众多的第三方应用程序/模块:但是因为有时候移植到Python3并不容易,所以这些第三方应用程序需要一些时间来移植(因为2.x仍然是还活着,那些应用程序将需要维护两个版本:一个针对2.x客户端,一个针对3.x ...昂贵的维护!)明年,运行Python3的完全成熟的应用程序的数量可能会相当多因为Python3兼容的第三方数量很少。但同样,我强烈支持这些重大变化:你读过这个diveintopython class吗? ;)
答案 3 :(得分:1)
答案 4 :(得分:1)
这是非常主观的。 Python3.x肯定是对2.x的改进。它包含长期预期的变化,如:字典理解,有序字典,更强大的字符串格式......等等更清晰的库。