From 46da504eba4abcef200d602abf242731ce9ffeeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Fri, 30 Aug 2024 11:42:40 +0300 Subject: [PATCH] add map codealong dump --- slides/map_example_codealong.py | 40 +++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 slides/map_example_codealong.py diff --git a/slides/map_example_codealong.py b/slides/map_example_codealong.py new file mode 100644 index 0000000..b07d6a4 --- /dev/null +++ b/slides/map_example_codealong.py @@ -0,0 +1,40 @@ +# Computer scientists love the Fibonacci sequence +# [https://en.wikipedia.org/wiki/Fibonacci_sequence], possibly +# described by Acharya Pingala in छन्दःशास्त्र (Chhandaḥśāstra). +# +# The basic definition is that the next item in the sequence +# if the sum of the two preceding items, and the two initial +# items and 0 and 1. +# +# We end up with [0, 1, 1, 2, 3, 5, 8, 13, ...] + +def fibbo(n): + match n: + case 0 | 1: + return n + case _: + return fibbo(n-1) + fibbo(n-2) + +# For example: the first few items in the sequence: +for n in range(36): + print(n, fibbo(n)) + +# A (nowadays) less commonly used way to construct the mapping +# from n to fibbo(n) is to use the map function. +# map returns a generator, and we call list to collect the numbers: +sequence = list(map(fibbo, range(36))) +print(sequence) + +# To split the work between multiple Python processes, we can +# use the multiprocessing module: +import multiprocessing + +pool = multiprocessing.Pool() +sequence = pool.map(fibbo, range(36)) +print(sequence) + +# We may use 'with' to clean up the pool after we're done with +# the workers: +with multiprocessing.Pool(10) as pool: + sequence = pool.map(fibbo, range(36)) +print(sequence)