From 242ac5f0f9f11a90b5b15bbfde3ac808e51f3922 Mon Sep 17 00:00:00 2001 From: eul94458 <62548460+eul94458@users.noreply.github.com> Date: Thu, 9 Feb 2023 16:48:31 +0900 Subject: [PATCH 1/2] Improving reversi() --- docs/decoupled.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/decoupled.md b/docs/decoupled.md index 419beb0..708eace 100644 --- a/docs/decoupled.md +++ b/docs/decoupled.md @@ -176,12 +176,28 @@ def reversi(arr): def reversi(arr): """Reverses a list.""" reved = [] - for i in range(len(arr)): - reved.append(arr[len(arr) - 1 - i]) + for i in reversed(range(len(arr)): + reved.append(arr[i]) return reved ``` ```` +````{tabbed} Even better code using list indexing +``` +def reversi(arr): + """Reverses a list.""" + return arr[::-1] +``` +```` + +````{tabbed} Even better code version using builtin function +``` +def reversi(arr): + """Reverses a list.""" + return list(reversed(arr)) +``` +```` + Functions with side effects can be hard to reason about: you often need to understand their internals and state in order to use them properly. They're also harder to test. **Not every function with side effects is problematic, however**. My pragmatic advice is to first learn to spot and understand pure functions. Then organize your code so that many functions are pure, and those that are not are well-behaved. ```{figure} figures/pure-impure.svg From 2f747b9b34f9f9aba3d36c695653f230a577551b Mon Sep 17 00:00:00 2001 From: eul94458 <62548460+eul94458@users.noreply.github.com> Date: Thu, 9 Feb 2023 17:00:41 +0900 Subject: [PATCH 2/2] reversed(range(len(arr))) --- docs/decoupled.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/decoupled.md b/docs/decoupled.md index 708eace..162681f 100644 --- a/docs/decoupled.md +++ b/docs/decoupled.md @@ -176,7 +176,7 @@ def reversi(arr): def reversi(arr): """Reverses a list.""" reved = [] - for i in reversed(range(len(arr)): + for i in reversed(range(len(arr))): reved.append(arr[i]) return reved ``` @@ -190,7 +190,7 @@ def reversi(arr): ``` ```` -````{tabbed} Even better code version using builtin function +````{tabbed} Even better code version using built-in functions ``` def reversi(arr): """Reverses a list."""