From 7591306e6b6d5b2f4495086b90a8dd9319d73d11 Mon Sep 17 00:00:00 2001 From: Kadambari Date: Mon, 6 Apr 2026 15:31:51 +0200 Subject: [PATCH 1/3] Add simple use-effect-like behavior simulation in Python --- dynamic_programming/use_effect_simulation.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 dynamic_programming/use_effect_simulation.py diff --git a/dynamic_programming/use_effect_simulation.py b/dynamic_programming/use_effect_simulation.py new file mode 100644 index 000000000000..e69de29bb2d1 From 6ae5134a2fc7591131abe2dec25787b6384110d1 Mon Sep 17 00:00:00 2001 From: Kadambari Date: Tue, 7 Apr 2026 14:23:03 +0200 Subject: [PATCH 2/3] Fix: add actual implementation for use effect simulation --- dynamic_programming/use_effect_simulation.py | 39 ++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 dynamic_programming/use_effect_simulation.py diff --git a/dynamic_programming/use_effect_simulation.py b/dynamic_programming/use_effect_simulation.py new file mode 100644 index 000000000000..7a249ac30b2a --- /dev/null +++ b/dynamic_programming/use_effect_simulation.py @@ -0,0 +1,39 @@ +""" +Simulation of a simple useEffect-like behavior in Python. + +This demonstrates executing a function when a dependency changes. +Reference: +https://en.wikipedia.org/wiki/Reactive_programming +""" + +from typing import Callable, Any + + +def use_effect_simulation(callback: Callable[[], None], dependency: Any) -> None: + """ + Executes the callback when the dependency changes. + + >>> calls = [] + >>> def cb(): + ... calls.append("called") + >>> use_effect_simulation(cb, 1) + >>> use_effect_simulation(cb, 1) + >>> use_effect_simulation(cb, 2) + >>> calls + ['called', 'called'] + """ + if not hasattr(use_effect_simulation, "_prev"): + use_effect_simulation._prev = None # type: ignore + + if use_effect_simulation._prev != dependency: + callback() + use_effect_simulation._prev = dependency + + +if __name__ == "__main__": + def example(): + print("Effect triggered!") + + use_effect_simulation(example, 1) + use_effect_simulation(example, 1) + use_effect_simulation(example, 2) \ No newline at end of file From 7903a22dab45a6a05f746962ec5f5cbb554f2371 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 Apr 2026 12:30:48 +0000 Subject: [PATCH 3/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dynamic_programming/use_effect_simulation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dynamic_programming/use_effect_simulation.py b/dynamic_programming/use_effect_simulation.py index 7a249ac30b2a..2729b09b88b8 100644 --- a/dynamic_programming/use_effect_simulation.py +++ b/dynamic_programming/use_effect_simulation.py @@ -31,9 +31,10 @@ def use_effect_simulation(callback: Callable[[], None], dependency: Any) -> None if __name__ == "__main__": + def example(): print("Effect triggered!") use_effect_simulation(example, 1) use_effect_simulation(example, 1) - use_effect_simulation(example, 2) \ No newline at end of file + use_effect_simulation(example, 2)