سوال شماره 4743 چندگزینه‌ای
آزمون رایگان پایتون فنی و حرفه ای
کدام یک از کدهای زیر به درستی یک دکوراتور را پیاده‌سازی می‌کند که زمان اجرای یک تابع را محاسبه و چاپ می‌نماید؟

گزینه‌ها:

  • 1. def timer_decorator(func): import datetime def wrapper(): start = datetime.datetime.now() func() end = datetime.datetime.now() print(f"زمان اجرا: {end - start}") return wrapper
  • 2. import time @timer_decorator def my_function(n): total = 0 for i in range(n): total += i return total
  • 3. import time class TimerDecorator: def __init__(self, func): self.func = func def __call__(self, *args, **kwargs): start = time.time() result = self.func(*args, **kwargs) end = time.time() print(f"زمان اجرا: {end - start} ثانیه") return result
  • 4. import time def timer_decorator(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"زمان اجرا: {end - start} ثانیه") return result return wrapper ✓ صحیح

پاسخ صحیح:

  • import time def timer_decorator(func): def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(f"زمان اجرا: {end - start} ثانیه") return result return wrapper

توضیحات:

گزینه اول صحیح است زیرا: 1. ماژول time را به درستی import کرده است 2. ساختار استاندارد دکوراتور با تعریف تابع داخلی wrapper را رعایت کرده است 3. از *args و **kwargs برای پشتیبانی از تمامی پارامترهای ورودی استفاده کرده است 4. زمان شروع و پایان را به درستی محاسبه و تفاوت آن‌ها را چاپ می‌کند 5. نتیجه تابع اصلی را به درستی بازمی‌گرداند گزینه دوم اگرچه کار می‌کند اما از کلاس استفاده شده که برای این کاربرد ساده، پیچیدگی غیرضروری دارد. گزینه سوم فقط برای توابع بدون پارامتر کار می‌کند و محدود است. گزینه چهارم اصلاً تعریف دکوراتور نیست، بلکه استفاده از آن است.