یک دکوراتور در پایتون بنویسید که با استفاده از functools.wraps زمان اجرای یک تابع عددی را اندازهگیری کند، نام تابع و آرگومانها و نتیجه را لاگ کند و مقدار اصلی تابع را بدون تغییر برگرداند تا برای اسکریپتهای محاسبات عددی و اتوماسیون قابل استفاده باشد.
2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:04 0.0
برای حل این مسئله از ماژول functools و تابع wraps برای حفظ متادیتای تابع اصلی (__name__, __doc__) استفاده کنید، و با time.perf_counter یا time.time زمان شروع و پایان را اندازهگیری کنید. دکوراتور باید args و kwargs را به صورت عمومی قبول کند، نتیجه را لاگ (یا چاپ) کند و سپس نتیجه را برگرداند؛ به این ترتیب میتوانید آن را روی توابع محاسباتی مانند حل معادلات یا حلقههای عددی و نیز در اسکریپتهای اتوماسیونی برای پروفایل ساده اجرا بکار ببرید. نکتهها: حتما wraps را روی تابع داخلی بگذارید و مقدار بازگشتی اصلی را بدون تغییر برگردانید.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
یک دکوراتور با استفاده از functools.wraps کار میکند تا __name__ و __doc__ تابع اصلی حفظ شود. زمان اجرای تابع را با time.perf_counter اندازه میگیریم و تفاوت آغاز و پایان را ثبت میکنیم تا لاگ دقیقی به دست آید. ورودیها را با *args و **kwargs میگیریم و نتیجه را لاگ کرده و در نهایت همان مقدار را برمیگردانیم تا برای محاسبات عددی و اسکریپتهای اتوماسیون بدون تغییر استفاده شود. نکتهٔ تکمیلی اینکه در صورت وقوع استثنا باید از try/except یا finally استفاده کنید تا زمانسنجی و گزارش به درستی انجام شود و از خاموشی ناخواسته جلوگیری گردد.
گزارش