Size: 941
Comment:
|
Size: 3378
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 2: | Line 2: |
''' 即将到来的 Python 3000 '''::-- ["swordsp"] [[[DateTime]]] [[TableOfContents]] | '''即将到来的 Python 3000 '''::-- ["swordsp"] [[[DateTime]]] [[TableOfContents]] |
Line 5: | Line 5: |
* [wiki:peps/pep-3000/ PEP 3000] -- Python 3000 * [wiki:peps/pep-3099/ PEP 3099] -- Things that will Not Change in Python 3000 * [wiki:peps/pep-3100/ PEP 3100] -- Miscellaneous Python 3.0 Plans |
* [wiki:peps:pep-3000/ PEP 3000] -- Python 3000 * [wiki:peps:pep-3099/ PEP 3099] -- Things that will Not Change in Python 3000 * [wiki:peps:pep-3100/ PEP 3100] -- Miscellaneous Python 3.0 Plans === PEPs === ==== Access to Names in Outer Scopes ==== [wiki:peps:pep-3104/ PEP 3104] 这算是个老问题了: {{{ #!python a = 1 def test1(): a = 2 def test2(): #目前的python版本中,这里无法修改 test1 中的那个 a。 }}} 而 python3000 中有望通过使用 nonlocal 关键字访问外层名字空间: {{{ #!python a = 1 def test1(): a = 2 def test2(): nonlocal a = 3 # 这样就把 test1 中的 a 修改了。 }}} nonlocal 会从最靠近的名字空间不断向外搜索。 ==== Function Annotations ==== [wiki:peps:pep-3107/ PEP 3107] 可以可选地给函数添加元数据,利用这些元数据可以干很多事情,比如文档生成、类型检查、方便与静态语言之间的交互等等,看个例子: {{{ #!python def foo(a: 'x', b: 5 + 6, c: list) -> max(2, 9): ... }}} ==== Standard Library Reorganization ==== [wiki:peps:pep-3108/ PEP 3108] 重新组织标准库,主要是移除和重命名。 ==== Metaclasses in Python 3000 ==== [wiki:peps:pep-3115/ PEP 3115] Python 3000 在 metaclass 方面的大改动! 新的 class 定义语法和函数几乎一样,除了 def 换成了 class: {{{#!python class Foo(base1, base2, metaclass=mymeta, otherkeyword=...): ... bases = (base1, base2) keywords = {'metaclass':mymeta, 'a':1, 'b':2} class Foo(*bases, **kw): .... }}} 另外以前的 metaclass 第一次被调用时,class 的属性字典就已经构建出来了,metaclass 无法控制这个过程,使得有些功能无法实现,比如保持属性定义的顺序! Python 3000 中的 metaclass 可以定义一个叫 `__prepare__` 的 class method,返回一个 dict like 对象(只需要定义 `__setitem__` 方法),用来控制 class 属性的存储。这个过程用伪码表示大致如下: {{{#!python def prepare_class(name, *bases, metaclass=None, **kwargs): if metaclass is None: metaclass = compute_default_metaclass(bases) prepare = getattr(metaclass, '__prepare__', None) if prepare is not None: return prepare(name, bases, **kwargs) else: return dict() }}} 可以看出,class 定义时传入的参数实际上都是传给 metaclass 的。 |
Line 10: | Line 78: |
* 来自 Guido van Rossum 个人 blog 的关于 Python 3000 开发进度和展望的最新消息 |
* 来自 [http://www.artima.com/weblogs/index.jsp?blogger=guido Guido van Rossum 个人 blog] 的关于 Python 3000 开发进度和展望的最新消息 |
Line 17: | Line 84: |
=== 讨论 === [[PageComment2]] |
即将到来的 Python 3000 ::-- ["swordsp"] [DateTime] TableOfContents
概述
- [wiki:peps:pep-3000/ PEP 3000] -- Python 3000
- [wiki:peps:pep-3099/ PEP 3099] -- Things that will Not Change in Python 3000
- [wiki:peps:pep-3100/ PEP 3100] -- Miscellaneous Python 3.0 Plans
PEPs
Access to Names in Outer Scopes
[wiki:peps:pep-3104/ PEP 3104]
- 这算是个老问题了: 而 python3000 中有望通过使用 nonlocal 关键字访问外层名字空间: nonlocal 会从最靠近的名字空间不断向外搜索。
Function Annotations
[wiki:peps:pep-3107/ PEP 3107]
- 可以可选地给函数添加元数据,利用这些元数据可以干很多事情,比如文档生成、类型检查、方便与静态语言之间的交互等等,看个例子:
Standard Library Reorganization
[wiki:peps:pep-3108/ PEP 3108]
- 重新组织标准库,主要是移除和重命名。
Metaclasses in Python 3000
[wiki:peps:pep-3115/ PEP 3115]
Python 3000 在 metaclass 方面的大改动! 新的 class 定义语法和函数几乎一样,除了 def 换成了 class:
另外以前的 metaclass 第一次被调用时,class 的属性字典就已经构建出来了,metaclass 无法控制这个过程,使得有些功能无法实现,比如保持属性定义的顺序! Python 3000 中的 metaclass 可以定义一个叫 __prepare__ 的 class method,返回一个 dict like 对象(只需要定义 __setitem__ 方法),用来控制 class 属性的存储。这个过程用伪码表示大致如下:
可以看出,class 定义时传入的参数实际上都是传给 metaclass 的。
进展
来自 [http://www.artima.com/weblogs/index.jsp?blogger=guido Guido van Rossum 个人 blog] 的关于 Python 3000 开发进度和展望的最新消息
[http://www.artima.com/weblogs/viewpost.jsp?thread=98196 The fate of reduce() in Python 3000]
[http://www.artima.com/weblogs/viewpost.jsp?thread=155123 Python 3000 - Adaptation or Generic Functions?]
[http://www.artima.com/weblogs/viewpost.jsp?thread=157004 Python 3000 Slides]
Guido 于2006年4月在某次会议上的讲稿。[http://www.python.org/doc/essays/ppt/accu2006/Py3kACCU.ppt 下载]
[http://www.artima.com/weblogs/viewpost.jsp?thread=173453 Python Sprint Report]