是否有一些PEP 3124的实施

时间:2010-08-15 21:09:51

标签: python pep

我正在搜索任何PEP 3124实施或开发过程。我不太喜欢邮件列表,但似乎去年在Python邮件列表中没有出现序列“3124”。是否有关于此PEP的信息?

2 个答案:

答案 0 :(得分:2)

  

此PEP中描述的大多数功能已在开发中实现   PEAK规则框架的版本。特别是基本的重载和方法   组合框架(减去@overload装饰器)已经存在。该   peak.rules.core中所有这些功能的实现是656行的Python   写入。

http://www.python.org/dev/peps/pep-3124/#implementation-notes

答案 1 :(得分:0)

我只是在阅读有关PEP 3124的内容,然后对自己说:“听起来听起来很难实施”,然后在阅读此问题之前提出了一个解决方案。这样就到了(没有任何错误检查)。

def overload(f):
    oldfunc = globals()[f.__name__]
    param1 = f.__code__.co_varnames[0]
    type1 = f.__annotations__[param1]
    def impl(*args, **kwargs):
        if param1 in kwargs:
            arg1 = kwargs[param1]
        else:
            arg1 = args[0]
        if isinstance(arg1, type1):
            return f(*args, **kwargs)
        else:
            return oldfunc(*args, **kwargs)
    impl.__name__ = f.__name__
    return impl

from math import sin
import numpy

@overload
def sin(x: numpy.ndarray):
    return numpy.sin(x)

sin(3.14)
# 0.0015926529164868282

sin(numpy.arange(10))
# array([ 0.        ,  0.84147098,  0.90929743,  0.14112001, -0.7568025 ,
#        -0.95892427, -0.2794155 ,  0.6569866 ,  0.98935825,  0.41211849])