یک دکوراتور در پایتون بنویسید که با استفاده از functools.wraps زمان اجرای یک تابع عددی را اندازه‌گیری کند، نام تابع و آرگومان‌ها و نتیجه را لاگ کند و مقدار اصلی تابع را بدون تغییر برگرداند تا برای اسکریپت‌های محاسبات عددی و اتوماسیون قابل استفاده باشد.

2.0 بازدید آخرین ویرایش در 220 روز قبل ساعت 02:04

0.0

برای حل این مسئله از ماژول functools و تابع wraps برای حفظ متادیتای تابع اصلی (__name__, __doc__) استفاده کنید، و با time.perf_counter یا time.time زمان شروع و پایان را اندازه‌گیری کنید. دکوراتور باید args و kwargs را به صورت عمومی قبول کند، نتیجه را لاگ (یا چاپ) کند و سپس نتیجه را برگرداند؛ به این ترتیب می‌توانید آن را روی توابع محاسباتی مانند حل معادلات یا حلقه‌های عددی و نیز در اسکریپت‌های اتوماسیونی برای پروفایل ساده اجرا بکار ببرید. نکته‌ها: حتما wraps را روی تابع داخلی بگذارید و مقدار بازگشتی اصلی را بدون تغییر برگردانید.

توسط پژوهشگر در 220 روز قبل ساعت 02:04
دسته بندی ها: Python Python for beginner
sara در 220 روز قبل ساعت 11:04

یک دکوراتور با استفاده از functools.wraps کار می‌کند تا __name__ و __doc__ تابع اصلی حفظ شود. زمان اجرای تابع را با time.perf_counter اندازه می‌گیریم و تفاوت آغاز و پایان را ثبت می‌کنیم تا لاگ دقیقی به دست آید. ورودی‌ها را با *args و **kwargs می‌گیریم و نتیجه را لاگ کرده و در نهایت همان مقدار را برمی‌گردانیم تا برای محاسبات عددی و اسکریپت‌های اتوماسیون بدون تغییر استفاده شود. نکتهٔ تکمیلی اینکه در صورت وقوع استثنا باید از try/except یا finally استفاده کنید تا زمان‌سنجی و گزارش به درستی انجام شود و از خاموشی ناخواسته جلوگیری گردد.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری