python 3新功能解决了哪些问题?[关闭]


18

Python 3的新功能说:

我们主要是修复众所周知的烦恼和疣,并清除大量旧屑

它提到了什么不同(修复),但没有提到为什么(问题)。我还没有发现问题所在。修复程序解决了哪些问题?


1
但是,他们没有删除一个疣,这是必须将“自我”传递给类方法的原因。失败的火车。
钻机

Answers:


11

我只列举那些马上想到的。

  • 仅限关键字的参数:在PEP的原理中进行了描述。
  • nonlocal:没有这个,闭包就不能覆盖关闭的变量。使用装饰器和其他高阶函数时常会出现这种需求。唯一合理的解决方法(无需切换外部API)将所需的任何可变状态存储在可变对象中,就太丑陋了。
  • 字典和集合理解:通过生成器理解,以类似于列表理解的方式创建字典和集的过程不太漂亮,但速度稍慢。它使我们能够在适当的地方使用这些类型,而无需支付额外费用。设置文字的同上,特别是对于in测试(从Python 3.2开始,也通过窥孔优化器进行了优化)。
  • 八进制文字存在于Python 2中,但0777对于那些不习惯使用八进制文字的人来说,这是一个陷阱(在其他情况下,添加前导零不会更改值或基数)。
  • 二进制字面量比十六进制字面量对位摆弄更为有用。
  • 字节文字是unicode字符串和字节字符串之间强制区分的征兆,而字符串文字是unicode。这些变化迫使您考虑文本和未解释的二进制数据之间的差异以及编码。这很重要,因为否则您需要进行广泛的测试(输入时会说英语,而以欧洲/美国为中心的傻瓜很少考虑)才能找到与编码相关的错误。
  • except ex, var-> except ex as var修复了常见错误except ValueError, IndexError(应该同时捕获两个错误,但仅捕获第一个并IndexError用捕获的异常覆盖名称)。
  • 列表理解范围:避免污染名称空间,并允许根据生成器表达式来考虑它们。
  • 删除了语法和模块:使我们更接近“应该有一种-最好只有一种-显而易见的方法”。并避免教程质量差的人坚持旧的修复方法。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.