动态函数重载(Dynamic Function Overloading)

翻译 2006年06月23日 10:29:00

我已经向Python的subversion沙箱里提交了一个新的动态函数重载的实现。
尽管“(动态或运行时)重载函数[(dynamically, or run-time) overloaded functions]”这一术语受到各方批评,我还是要继续讲讲它。“(动态或运行时)重载函数”又可称为泛型函数(generic functions)、多重方法(multi-methods)或分派(dispatch),这些术语也都受到了批评。
大家可以在http://svn.python.org/view/sandbox/trunk/overload/上看到一个稍微优化过的实现。Phillip Eby曾说我的实现速度太慢,不过,我建议你们运行一下test_overloading.py,看看你们的情况怎么样。(这需要Python 2.5a 1版本,python.org刚刚发布了该版本。)
Phillip还建议我使用issubclass(),而不要依赖方法解析次序(Method Resolution Order,简称MRO)。他认为,MRO方法会导致虚假的准确性。我不知道是否会这样,因为对于单一派遣(single dispatch)而言,我的方法确实与类方法查找完全匹配。当然,这需要很多附加功能或潜在要求。例如,是否存在调用“next” 可用方法的机制?但是,算法没有清楚地生成下一个方法。另外,如果存在歧义,是否应该抛出异常或者调用缺省方法(或“next”方法,如果我们能够对它的定义达成一致的话)?
对于优化,我相信代码生成(code generation)可以让重载的函数和手写函数运行得一样快。请参见test_overloading.py中的accelerated。
这并不适用Python2.5。这是一个颇具争议的话题,所以应该到Python3000才来试验(也许可以作为Python2.5的第三方附加品)。
大约在一年前我曾经写过相关话题的blog,但是我却忘记有这么一回事了。与今天的情况相比,那时候的实现显得暗淡无光。看来,Plillip的提议还是帮了很大忙。
我希望最终将PyProtocols挤出市场。Plillip应该为我感到骄傲。

(原文链接网址:http://www.artima.com/weblogs/viewpost.jsp?thread=155514;Guido van Rossum的英文blog网址:http://www.artima.com/weblogs/index.jsp?blogger=guido

相关文章推荐

【Java Learning】重载、多态和动态绑定——Overloading、Ploymorphism&Dynamic binding

Title:重载、多态和动态绑定——Overloading、Ploymorphism&Dynamic binding 【Section one】     对于面向对象编程语言,重载...

C++中的函数重载(overloading)

Reference: 《C++ Primer. 4th ed》 What's overloading? 函数的重载也就是用一个函数名代表多个不同的函数。这些不同的函数之间需要用不...

VB的动态函数曲线的绘制

  • 2009年12月22日 12:58
  • 101KB
  • 下载

vb实现动态函数

  • 2013年11月15日 16:22
  • 2KB
  • 下载

C语言动态函数调用

在远程调用中,服务器在收到请求后,需要通过查符号的手段,获取函数指针,然后调用客户端请求的函数。然而,不同函数参数个数、类型皆不相同,函数指针在定义时就需要明确类型,因此,没有一种定义,可以满足所有函...

JNI_OnLoad实现动态函数替换

jni RegisterNatives注册失败的解决方法

OOP 5. Constructor Overloading(构造函数重载) - TimeOfDay

OOP 5. Constructor Overloading - TimeOfDay Purpose of this lesson: Introduce constructor overloa...

【JavaScript】(4)普通函数、动态函数定义格式,调用方式,注意的详细细节

动态函数调用实现下列操作,输入2个数以及操作符计算结果@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等

//求最大公约数 int greatestDivisorOfTwo(int x, int y){ int min = x < y ? x : y; int i = 0; for...

动态函数调用追踪方法

动态函数调用追踪方法 函数调用开源软件动态追踪软件网络 上学期间研究了下软件执行网络的动态拓扑特性,实验了一些在函数粒度上可行的网络构造方法,这里总结下,感觉对分析开源软件代码有一...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态函数重载(Dynamic Function Overloading)
举报原因:
原因补充:

(最多只允许输入30个字)