WEB开发网
开发学院软件开发Python 深入 PEAK 的新特性 阅读

深入 PEAK 的新特性

 2007-03-29 12:16:36 来源:WEB开发网   
核心提示: PEAK 的 dispatch 模块也有一个基于类型的分派器,但是目前尚微不足道,深入 PEAK 的新特性(3),因为它只能处理单一分派 —— dispatch.on() 封装程序除了基于普通 Python 类的分派之外还做不了多少事情,尽管如此,将 IntBetw

PEAK 的 dispatch 模块也有一个基于类型的分派器,但是目前尚微不足道,因为它只能处理单一分派 —— dispatch.on() 封装程序除了基于普通 Python 类的分派之外还做不了多少事情。尽管如此,看到 PEAK 的基于类型的分派仍然让我们对完整断言分派的语法兴奋不已。注意这些例子都利用了 Python 2.4 中新的 decorator 语法,用于修改所定义的函数或方法。您可以 在早期版本的 Python 中使用 PEAK 的通用函数,但是其语法并不美观(如清单 2 所示):

清单 2. PEAK 分派包中对类型进行单一分派

import dispatch
@dispatch.on('foo')
def doIt(foo, other, args):
  "Base generic function of 'doIt()'"
@doIt.when(int)
def doIt(foo, other, args):
  print "foo is an int |", other, args
@doIt.when(str)
def doIt(foo, other, args):
  print "foo is a str |", other, args
doIt( 1, 'this','that') # -> foo is an int | this that
doIt('x','this','that') # -> foo is a str | this that

对于新的类型来说,的确可以添加 dispatch.on() 通用函数签名,而不用修改以前的代码。例如,我可以向前面的代码中添加 @doIt.when(float) 或 @doIt.when(MyClass);如果需要,以后的调用就可以利用它。但是即使不用 PEAK dispatch 包,也有很多方法可以实现同样的功能。

什么是类型化?

类型化是件非常有趣的事情。大部分程序员在考虑变量或对象类型时都会联想起计算机 CPU 的奇特行为 —— 即使是那些使用诸如 Python 这种高级语言的程序员也是如此。int、float 与 long 之间的区别不是数字本身之间的强制区别,而是芯片设计者如何使用寄存器和操作符所引起的一些简单后果。但是从理论上来说,3 和 17 之间的整数类型,与 2^31 和 2^31-1 之间的整数类型同样重要(后者在 Python 中是 int 类型,至少在 32 位的机器上是如此)。实际上,将 IntBetween3And17 作为 int 的一个 子类型 是很有意义的,至少从表面上是如此,而不管继承树是否与此匹配。

上一页  1 2 3 4 5 6  下一页

Tags:深入 PEAK 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接