Przeszedłem przez pierwsze dwa odcinki w PEP 3107, ale nadal nie wiem, co robią dla tego języka. Wydaje mi się, że możesz dodawać metadane do funkcji używających dekoratorów. na przykładCo to są adnotacje funkcji Python?
def returns(return_type):
f.return_type = return_type # <- adding metadata here
return f
@returns(Foo)
def make_foo(): ...
Możesz dodać metadane do argumentów za i może to wyglądać całkiem jeśli skorzystać z domyślnych argumentów, tak jak poniżej:
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)."): ...
Przynajmniej moje pierwsze wrażenie jest takie, że adnotacje są zbędne: dekoratorzy może zrobić wszystko, co mogą adnotacje (i więcej). Dlaczego adnotacje są lepsze od dekoratorów, jeśli chodzi o dodawanie metadanych do funkcji?
Adnotacje są na razie eksperymentem i rodzajem pracy w toku. Na liście [python-ideas] znajduje się ostatnio wątek (http: //mail.python .org/pipermail/python-ideas/2012-December/thread.html) na temat, który może być pomocny –
@JohnY Chcę zaznaczyć twoją odpowiedź jako "poprawną", ale nie jest to "oficjalna" odpowiedź! – allyourcode