PEP 3124 有什么实现吗
我在寻找关于PEP 3124的任何实现或开发进展。对邮件列表不太熟悉,但似乎在过去一年里,关于“3124”的讨论在Python的邮件列表中没有出现过。有没有关于这个PEP的最新情况呢?
2 个回答
0
我刚刚在阅读PEP 3124的时候,心里想:“这听起来实现起来并不难。”于是我在看这个Stack Overflow的问题之前,就自己想出了一个解决方案。下面就是我的代码(没有进行错误检查)。
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])
3
这个PEP(Python增强提案)里描述的大部分功能已经在正在开发的PEAK-Rules框架中实现了。特别是,基本的重载和方法组合框架(除了@overload装饰器)已经在那里存在。目前在peak.rules.core中实现这些功能的代码有656行。
http://www.python.org/dev/peps/pep-3124/#implementation-notes