Czy dekoratory Python są takie same lub podobne, czy zasadniczo różne od adnotacji Java lub czegoś w stylu Spring AOP lub Aspect J?Czy program Python Decorator jest taki sam jak adnotacja Java lub Java z aspektami?
Odpowiedz
Python dekoratorów są cukier tylko syntaktyczny dla przekazując funkcję do innej funkcji i zastąpienie pierwszej funkcji z wynikiem:
@decorator
def function():
pass
jest cukier syntaktyczny dla
def function():
pass
function = decorator(function)
adnotacji Java same tylko magazynu metadane, musisz mieć coś, co sprawdza je, aby dodać zachowanie.
systemy Java AOP są ogromne rzeczy zbudowane na szczycie Java, dekoratorzy są tylko składnia języka z niewiele ma semantyki dołączonych, naprawdę nie można porównać je.
zrzeczenie - Nie znam żadnego Java
Z iż z drogi, mam zamiar założyć, że adnotacja Java jest jak adnotacji Pythona wprowadzonego z PEP 3107. Adnotacje to sposoby dołączania meta-danych do samego obiektu funkcji.
Dekoratory (od PEP 0318) są zwykle do tworzenia nowych funkcji (chociaż przypuszczam, że dekorator mógł zwrócić również swoją dawną funkcję). Te nowe funkcje zwykle owijają się wokół funkcji wejściowej, ale mogą wykonać dowolną wartość. Oto głupi przykład, gdzie zawsze przechodzą 'foo'
jako drugi argument:
def second_always_foo(func):
def wrapper(*args,**kwargs):
args = list(args)
args[1] = 'foo'
return func(*args,**kwargs)
return wrapper
@second_always_foo
def printer(arg1,arg2):
print arg1,arg2
printer("Hello","world")
Zauważ, że ten przykład mógł zostać napisany bez dekoratora jak:
...
def printer(arg1,arg2):
print arg1,arg2
printer = second_always_foo(printer)
Nie jestem też ekspertem od Javy, ale adnotacje AFAIK dotyczą znacznie więcej niż tylko funkcji/metod (klasy, parametry i więcej). – delnan
@delnan - który byłby inny sposób, że różnią się od dekoratorów Pythona. podczas gdy python ma dekoratory klas, nie ma niczego takiego jak dekoratory parametrów (lub nawet adnotacje parametrów AFAIK) ... – mgilson
Python 3 ma adnotacje parametrów (ale bez adnotacji w klasie). –
używam obu z nich w sposób w podobny sposób: włączanie/wyłączanie opcji debugowania lub testowania.
(na przykład dekoratorów Python):
def measure_time(func):
def _measure_time(*args, **kwargs):
t0 = time.time()
ret = func(*args, **kwargs)
print "time=%lf" % (time.time()-t0)
...
return ret
return _measure_time
@measure_time
def train_model(self):
...
adnotacji Java, użyj getAnnotation, etc. może wykonać podobne oferty lub bardziej skomplikowanych.
- 1. Czy model pamięci Dalvika jest taki sam jak język Java?
- 2. Czy LinqToSQL jest taki sam jak Linq?
- 3. Czy int jest taki sam jak niepodpisany lub podpisany?
- 4. Czy dp jest taki sam jak dip?
- 5. Czy R.layout.listview jest taki sam jak R.id.listview
- 6. Java 7 Model pamięci taki sam jak JSR-133?
- 7. Czy istnieje adnotacja? Jak działa biblioteka? (Java)
- 8. Czy JVM OpenJDK jest taki sam, jak JVM Oracle Java SE?
- 9. Czy istnieje adnotacja Java dla błędów?
- 10. Adnotacja Java SafeVarargs, czy istnieje standardowa lub najlepsza praktyka?
- 11. Jak załatać program Java?
- 12. Czy Java (swing) ma taki przycisk?
- 13. Czy zmienne słowo kluczowe C# i java zachowuje się w taki sam sposób?
- 14. Czy AppendHeader jest dokładnie taki sam jak AddHeader?
- 15. Czy $ PROGRAM_NAME jest taki sam jak 0 rubinów?
- 16. Czy rozmiar znaku * jest taki sam jak rozmiar int *?
- 17. Czy asynchroniczny w C# jest taki sam jak w F #?
- 18. Jak dokładnie działa program @param - Java
- 19. Adnotacja Java i dynamiczne ładowanie
- 20. Jak utworzyć złożony klucz podstawowy (adnotacja java)
- 21. Czy kontroler nadzorujący MVC i MVP jest taki sam?
- 22. Python decorator opcjonalny argument
- 23. Czy Mallocator Stephena Lavaveja jest taki sam w C++ 11?
- 24. Python Class Decorator
- 25. Czy w Pythonie istnieje program taki jak GitLab?
- 26. Jak uruchomić program java z innego katalogu?
- 27. Czy konieczne jest tworzenie klasy Java za każdym razem?
- 28. Program Java kończy się wynikiem java: 137
- 29. Czy mogę uruchamiać program Java w programie?
- 30. Program, którego kod źródłowy jest dokładnie taki sam jak jego wyjście
Python ma również adnotacje, więc zakładam, że są zasadniczo różne. – mgilson
możliwy duplikat ["@" Decorator (w języku Python)] (http://stackoverflow.com/questions/10191561/decorator-in-python) –
Zobacz zmiany, aby rozwinąć pytanie do aspektów Java. –