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