From 9f85fd12be19c6636747466da1a283b9b8c879a4 Mon Sep 17 00:00:00 2001 From: Helin Date: Tue, 23 Dec 2025 10:55:15 +0300 Subject: [PATCH] Add custom functions for power, equation, and counter Added custom_power and custom_equation functions with type hints and error handling. Implemented fn_w_counter to track function calls. --- Week04/functions_helin_harman.py | 55 ++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 Week04/functions_helin_harman.py diff --git a/Week04/functions_helin_harman.py b/Week04/functions_helin_harman.py new file mode 100644 index 00000000..10c4a683 --- /dev/null +++ b/Week04/functions_helin_harman.py @@ -0,0 +1,55 @@ +import inspect + + +# ------------------------------------------------- +# custom_power +# ------------------------------------------------- +custom_power = lambda x=0, /, e=1: x**e + + +# ------------------------------------------------- +# custom_equation +# ------------------------------------------------- +def custom_equation( + x: int = 0, + y: int = 0, + /, + a: int = 1, + b: int = 1, + *, + c: int = 1, +) -> float: + """ + Calculate a custom equation. + + :param x: positional-only integer + :param y: positional-only integer + :param a: positional-or-keyword integer + :param b: positional-or-keyword integer + :param c: keyword-only integer + :return: result of the equation + """ + + for name, value in {"x": x, "y": y, "a": a, "b": b, "c": c}.items(): + if not isinstance(value, int): + raise TypeError(f"{name} must be int") + + return (x**a + y**b) / c + + +# ------------------------------------------------- +# fn_w_counter +# ------------------------------------------------- +_counter = 0 +_callers = {} + + +def fn_w_counter() -> (int, dict[str, int]): + global _counter, _callers + + _counter += 1 + + module_name = inspect.getmodule(fn_w_counter).__name__ + _callers[module_name] = _callers.get(module_name, 0) + 1 + + return _counter, {module_name: _callers[module_name]}