Python 3.x 新特性有哪些?
http://docs.python.org/3.0/whatsnew/3.0.html 上说的是列出了 Python 的 新 特性,但在我看来,它其实只列出了 不同 之处。那么,有没有人知道在 3.x 版本中引入的任何 完全新 的 Python 特性呢?
为了避免混淆,我会把“完全新”的特性定义为之前从未在任何其他代码中使用过的东西,让你看到后会说“哇,好酷!” 比如说一个可以让外星人入侵的函数等等。
2 个回答
在3.0版本中引入的许多全新功能也被移植到了2.6版本,这是一个经过深思熟虑的选择。不过,并不是所有的新功能都能这样处理,所以有些新功能只能在Python 3中使用。
元类的工作方式可能是最大的一个新特性。新的语法比2.*
版本中的__metaclass__
赋值要好得多……:
class X(abase, metaclass=Y):
更重要的是,这种新语法让编译器在处理类的主体之前就知道要使用哪个元类,因此元类终于可以影响类主体的处理方式——这在2.*
中是做不到的。具体来说,元类的新__prepare__
方法可以返回任何可写的映射,如果这样做的话,就会用这个映射来记录类主体中的赋值(比如def
这样的关键词)。特别是,这让类主体的顺序得以完全保留,正如它写下来的那样。同时,元类如果愿意,还可以记录类主体中任何名称的多个赋值/定义,而不仅仅是最后一个赋值或定义。这大大扩展了使用合适自定义元类的类的适用性,相比于2.*
版本,功能更强大。
另一个重要的语法变化是注解——有关详细信息请查看我提到的PEP。Python的标准库对注解没有特别的语义,但正因为如此,第三方框架和工具可以自由地应用他们想要的任何语义——比如对函数参数进行类型检查,这在标准Python库中并没有直接实现。
当然,还有许多其他的新特性(比如在3.*
中体现的新的“视图”概念,如字典的.keys
方法,关键字参数,改进的序列解包,nonlocal
用于更强大的闭包等等),这些特性各有轻重,但都非常实用且设计得很好。