Python 3.0 的哪些特性会改变你的日常编码? [关闭]
Posted
技术标签:
【中文标题】Python 3.0 的哪些特性会改变你的日常编码? [关闭]【英文标题】:What features of Python 3.0 will change your everyday coding? [closed] 【发布时间】:2010-09-25 08:29:25 【问题描述】:Py3k just came out 并拥有大量 neat new stuff!我很好奇,SO pythonistas 最兴奋的是什么?哪些功能会影响您每天编写代码的方式,或者您是否一直期待?
【问题讨论】:
您的链接应该是docs.python.org/3.0/whatsnew/3.0.html - 您提供的链接是开发版本。 这确实应该设置为社区wiki。 【参考方案1】:有几件事我很感兴趣:
文本和数据而不是 unicode 和 8 位 Extended Iterable Unpacking Function annotations 二进制字面量 New exception catching syntax 许多 Python 2.6 功能,例如:with 语句【讨论】:
不知道函数注释。太酷了。【参考方案2】:我希望exception chaining 能流行起来。由于下面介绍的反模式而丢失异常堆栈跟踪一直是我的烦恼很长一段时间:
try:
doSomething( someObject)
except:
someCleanup()
# Thanks for passing the error-causing object,
# but the original stack trace is lost :-(
raise MyError("Bad, bad object!", someObject)
我知道,我知道,将一些上下文信息添加到原始异常和保留原始堆栈跟踪是可能的,但它需要一个非常丑陋的 hack。现在您可以(并且应该!):
raise MyError("Bad, bad object!", someObject) from original_exception
并轻松获得上述两者。因此,作为我对抗丢失堆栈跟踪的神圣使命的一部分:
伙计们,在重新引发异常时不要忘记 from 子句!谢谢。
【讨论】:
这在 Python 2.6 中可用吗? 不,在 Python 2.*(包括 2.6)中,您需要借助 hack 来获得类似的功能。例如:blog.ianbicking.org/2007/09/12/re-raising-exceptions【参考方案3】:坦率地说,没有。虽然我可能会发现自己使用了一些新语法,但我主要使用 Python 来编写快速简单的脚本和正则表达式。
我认为新功能会让很多人更容易做很多小事,让少数人更容易做一些大事。但是,我对任何声称很多人最终会在生产力方面获得巨大收益的说法持怀疑态度。
简而言之,我认为这些变化总体上会让事情变得更好一些,但不要指望任何奇迹。
【讨论】:
【参考方案4】:与其说是一个功能,但我认为库清理会很有帮助,尤其是。给新的 Python 程序员。在不止一次的情况下,我想在 python 中做一些事情,只是为了找到两个提供该功能的包含库,没有明显的理由为什么我应该选择一个而不是另一个。
【讨论】:
【参考方案5】:尽管他们通过解释语言实现了尽可能小的迁移过程,但我发现 python3 的整个版本是十年痛苦的迁移路径。所以我觉得它不是特别吸引人。
他们所做的改进都是好的和重要的。两种不同类型的字符串一直是无处不在的烦恼的真正来源,因此它们摆脱了 unicode 对象并引入了 bytes 对象,现在是 unicode str,这很好。
bignum 与 num 的变化是为了方便,我认为这也是一个不错的选择。总的来说,他们清除了过去十年积累的有害成分。
他们做的第二个最糟糕的事情是实现速度慢了 10%,好像速度已经不是 python 的问题了。
我相信 python3 的发布会降低而不是提高 python 的声誉。现在,当涉及到库支持时,他们又回到了他们的语言的起点。
【讨论】:
不是基于其中一个预发布版本降低了 10% 的速度吗?我记得在 Python 3.0 真正发布之前很久就听到过这样的数字...... 没错,我们的想法是让 Python 3 出来,然后一旦事情稳定下来,3.1 可能会提高性能。请记住,早期优化是项目杀手。【参考方案6】:不必做那么多..
不用担心使用unicode()
或u""
。
无需搜索 urllib
urllib2
和 httplib
的文档即可找到我需要对文件进行编码并通过 POST 请求上传的函数
不必担心except TypeError, something:
是否会捕获TypeError
和something
,或TypeError
进入`something..
相反,必须再次查看文档!我现在对 python 已经足够了解了,我可以在不参考 pydoc 的情况下完成大部分工作,但是每次我这样做时,我都会发现一些其他有用的模块或函数。
【讨论】:
【参考方案7】:打印语句。 <sniff>
我已经开始想念它了。
实际上,在使用 Python 2.6 之前,我们正在清除 print
以支持 logging.debug
。这只是为了改掉随便使用print
进行调试、支持和开发的习惯。
剩下的是一些实际在标准输出上产生东西的程序。对于这些,我们可能会在我们的某个库中引入与 2.6/3.0 兼容的“打印”功能。
【讨论】:
【参考方案8】:字典理解不一定是惊天动地的,但它们非常好。
虽然k: v for k, v in list
比dict(list)
长,但它更灵活且不言自明。
【讨论】:
【参考方案9】:Python 3 最被低估的特性之一是引入了抽象基类。这不会立即彻底改变 Python 编程,但代表了从松散的鸭子类型方法到更好定义的接口方向的有趣转变。
更多信息可以在PEP 3119找到。
【讨论】:
【参考方案10】:几乎所有这些,因为我将 Python 3 的发布作为学习该语言的动力。
【讨论】:
【参考方案11】:Unicode (utf-8) 对于生活在非英语国家的人们来说非常重要。
我不喜欢在文件开头指定编码,因为我总是忘记。通常我的文本与 ASCII 兼容,因为我使用的是 UTF-8,所以它在没有编码规范的情况下工作。但是如果我写我的名字(带重音)或€ 符号,它会中断......我最终用他们的 \uxxxx 表示写了 unicode 字符,但这有点神秘!
【讨论】:
以上是关于Python 3.0 的哪些特性会改变你的日常编码? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章