Dekoratory w Pythonie Wyja艣nione z Przyk艂adami
Co dekorator naprawd臋 robi z twoj膮 funkcj膮 Chcesz zmierzy膰 czas ka偶dej funkcji, kt贸ra wywo艂uje wolne zewn臋trzne API. Mo偶esz wklei膰 wywo艂ania time.perf_counter() do ka偶dej z nich albo napisa膰 pomiar raz i stosowa膰 go wsz臋dzie. Dekorator to druga opcja: to funkcja, kt贸ra bierze inn膮 funkcj臋, owija j膮 dodatkowym zachowaniem i zwraca owini臋t膮 wersj臋 pod oryginaln膮 nazw膮. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import time def timed(func): def wrapper(*args, **kwargs): start = time.perf_counter() result = func(*args, **kwargs) elapsed = time.perf_counter() - start print(f"{func.__name__} took {elapsed:.3f}s") return result return wrapper @timed def fetch_price(ticker): time.sleep(0.2) # zast臋puje wywo艂anie sieciowe return 142.50 fetch_price("AAPL") # fetch_price took 0.201s @timed nad def fetch_price to skr贸t od fetch_price = timed(fetch_price). Python wywo艂uje timed raz, zaraz po zdefiniowaniu fetch_price, i przypisuje nazw臋 fetch_price do tego, co zwraca timed. To jest ca艂a robota, jak膮 wykonuje @. ...