我正在寻找任何PEP 3124实施或开发过程。我对邮件列表不是很熟悉,但是去年Python邮件列表中似乎没有出现序列“3124”。是否有关于此 PEP 的一些信息?
问问题
456 次
2 回答
3
本 PEP 中描述的大部分功能已经在 PEAK-Rules 框架的开发版本中实现。特别是,那里已经存在基本的重载和方法组合框架(减去 @overload 装饰器)。在撰写本文时,peak.rules.core 中所有这些功能的实现是 656 行 Python。
http://www.python.org/dev/peps/pep-3124/#implementation-notes
于 2010-08-15T21:13:52.323 回答
0
我只是在阅读 PEP 3124 并且对自己说,“这听起来并不难实现”,并在阅读这个 SO 问题之前制定了一个解决方案。所以在这里(没有任何错误检查)。
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])
于 2019-10-16T23:06:03.163 回答