Functional Python Programming

(Wang) #1
Chapter 4

The following is an example that shows what the zip() function does:





xi= [1.47, 1.50, 1.52, 1.55, 1.57, 1.60, 1.63, 1.65,
... 1.68, 1.70, 1.73, 1.75, 1.78, 1.80, 1.83,]
yi= [52.21, 53.12, 54.48, 55.84, 57.20, 58.57, 59.93, 61.29,
... 63.11, 64.47, 66.28, 68.10, 69.92, 72.19, 74.46,]
zip( xi, yi )
<zip object at 0x101d62ab8>
list(zip( xi, yi ))
[(1.47, 52.21), (1.5, 53.12), (1.52, 54.48), (1.55, 55.84),
(1.57, 57.2), (1.6, 58.57), (1.63, 59.93), (1.65, 61.29),
(1.68, 63.11), (1.7, 64.47), (1.73, 66.28), (1.75, 68.1),
(1.78, 69.92), (1.8, 72.19), (1.83, 74.46)]





There are a number of edge cases for the zip() function. We must ask the following
questions about its behavior:



  • What happens where then are no arguments at all?

  • What happens where there's only one argument?

  • What happens when the sequences are different lengths?


For reductions (any(), all(), len(), sum()), we want an identity element from
reducing an empty sequence.


Clearly, each of these edge cases must produce some kind of iterable output.
Here are some examples to clarify the behaviors. First, the empty argument list:





zip()
<zip object at 0x101d62ab8>
list(_)
[]





We can see that the zip() function with no arguments is a generator function,
but there won't be any items. This fits the requirement that the output is iterable.


Next, we'll try a single iterable:





zip( (1,2,3) )
<zip object at 0x101d62ab8>
list(_)
[(1,), (2,), (3,)]





In this case, the zip() function emitted one tuple from each input value. This too
makes considerable sense.

Free download pdf