पाठ 39 / 49

व्यावहारिक डेकोरेटर

Timing और logging के लिए व्यावहारिक decorators लिखें, और अपने arguments स्वीकार करने वाले decorators बनाएँ।

फ़ंक्शन का समय मापना

एक टाइमिंग डेकोरेटर मापता है कि फ़ंक्शन को कितना समय लगा — धीमे कोड को बिना उसका मुख्य भाग छुए पहचानने के लिए उपयोगी।

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:.4f}s")
        return result
    return wrapper

@timed
def slow_add(a, b):
    time.sleep(0.1)
    return a + b

slow_add(2, 3)

आर्ग्युमेंट वाले डेकोरेटर

डेकोरेटर को अपने खुद के आर्ग्युमेंट लेने योग्य बनाने के लिए (जैसे @retry(times=3)), उसे एक और बाहरी फ़ंक्शन परत में लपेटें।