3

我最近做了一些网页设计作为一种爱好,主要动机是学习有趣的东西。学习 Python 固然很好,但我发现 Python 重写为时已晚,所以我必须同时学习 Python 3 和 2.6。

我是一个新手,所以我希望人们从从事最终用户编程而不是语言设计者的角度来分享他们认为 Python 3 的优势/劣势。我的问题将更多的是人们实际上喜欢使用什么,或者回避为非生产性或非pythonic。

对我来说,with语句肯定是加号,而中断print运算符肯定是减号。

澄清编辑:有很多帖子询问是否应该学习 Python 2 或 3,或者是否有任何区别。我发现我的问题有所不同:人们出于某种原因选择使用 Python 3 但可能对哪些更好,哪些不更好有意见。

另一个澄清:已在with向后移植到 2.* 的答案中指出。道歉。

4

5 回答 5

5

我还没有在“生产环境”中使用 Python 3,但是在使用它时,我发现print作为一个函数是一个绝妙的主意——例如,我可以很容易地将它放在一个lambdanow 中,在 2 中。 *我必须使用sys.stdout.write("%s\n" % foo),有点笨拙。此外,诸如使用不同于sys.stdout或删除 final\n的输出文件等调整的语法比 Python 2.* 的可读性强得多!

顺便说一句,with最近的 Python 2.* 版本也是如此,它不是 Python 3 - 独有的。

于 2009-06-01T00:51:24.757 回答
2

从长远来看,我认为他们所做的一切都是为了最好的。他们删除了许多过时的做事方式,从而强制执行“只有一种方法可以做到”并提高一致性。此外,with声明很棒。

使用 Python 3 的一个明显问题是它缺乏对很多 [big] 库(例如 Django)的支持。如果您的库都没有与 Python 3 冲突,那么没有理由不使用它。

于 2009-06-01T00:48:31.487 回答
2

一个优点是字节和字符串之间的澄清。在您短暂的 Python 体验中,您有多少次与不清楚的UnicodeDecodeErrorand混淆UnicodeEncodeError?如果您从未遇到过 unicode 与 bytestrings 的问题,那么您很可能使用的是纯 ascii 语言,(英语?;))但这通常是初学者最难掌握的概念。(顺便说一句,如果您仍然感到困惑,这个链接应该对 Python 2.x 有所帮助)

我真的认为 str 和 bytes 之间的这种区别是 Python3.0 的强项之一。阅读PEP358以获取正式描述,并阅读diveintopython 类以获取更多面向最终用户的内容。这一新功能迫使开发人员在 unicode 对象和以特定编码编码的字节对象之间保持清晰的区别。我相信这种变化将帮助新手更容易理解这两种结构之间的区别,并将帮助有经验的开发人员使用理智的编程方法。

但是当然这种改变有它自己的不方便:移植 2.x 应用程序是相当困难的,如果你还没有在你的 2 .x 代码。烦人,但长期需要。

对于很多用户来说,这些重大变化看起来很烦人,而且......对于重要的库/解决方案来说实施起来很烦人。Python2.x 的当前力量是众多的第三方应用程序/模块:但由于移植到 Python3 有时并非易事,那些第三方应用程序将需要一些时间来移植(而且因为 2.x 仍然活着,这些应用程序需要维护两个版本:一个针对 2.x 客户端,一个针对 3.x……维护成本很高!)明年,运行 Python3 的成熟应用程序的数量可能会相当多低,因为与 Python3 兼容的第三方数量很少。但是,我再次强烈支持这些重大变化:你读过这个猴子、香蕉、Python(3) 和消防水带的故事吗?;)

于 2009-06-01T01:20:20.800 回答
1

我真的很喜欢字典理解:

{k: v for k, v in stuff}

扩展可迭代解包

(head, *rest) = range(5)
于 2009-06-01T00:51:47.033 回答
1

这真的很主观。Python3.x 肯定是对 2.x 的改进。它包含期待已久的变化,如:字典推导、有序字典、更强大的字符串格式化......等等更不用说更干净的库了。

于 2009-06-01T00:53:37.297 回答