我已经阅读了PEP 3107的前几个部分,但我仍然不明白它们对语言有何好处。在我看来,你可以使用装饰器为函数添加元数据。例如:
def returns(return_type):
f.return_type = return_type # <- adding metadata here
return f
@returns(Foo)
def make_foo(): ...
你也可以为参数添加元数据,如果你利用默认参数,它看起来会很漂亮:
import inspect
def defaults_are_actually_metadata(f):
names, args_name, kwargs_name, defaults = inspect.getfuncspec(f)
f.parameter_metadata = dict(zip(names[-len(defaults):], defaults))
f.__defaults__ = ()
return f
@defaults_are_actually_metadata
def haul(load="Stuff to be carried.",
speed_mph="How fast to move the load (in miles per hour)."): ...
我的初步印象是注释是多余的:装饰器可以做到注释所能做的一切(而且更多)。在为函数添加元数据时,为什么注释比装饰器更好?