Better Software - November 2007 - (Page 13) Code Craft default value to return. To better under>>> set1 = 'abc' # A string is a special sequence holding ASCII code points stand reduce, suppose >>> set2 = [1,2,3] # A sequence of integers you want to summa>>> [(x,y) for x in set1 for y in set2 if x != 'b' if y >> map(len,["a", "fine", "mess"]) tion that checks to see if any value in a sequence of Booleans is [1, 4, 4] true: The map function also accommodates functions whose arity matches the number of subsequent lists: def any(bools): return reduce(operator.or_, bools, False) >>> map(operator.add, [1,2,3],[4,5,6]) [5, 7, 9] The reduce function is used to summarize a list, usually reducing it to a single value. For example, to sum the elements of derlined argument above is the initial value from the third a list, you could use the following expression: argument in the original call. >>> reduce(operator.add, [1,2,3]) 6 The function call any([False,True]), for example, computes or_(or_(False,False),True). The accumulated value at each call will be True if any value encountered so far is True. The un- Higher-Order Functions Now consider how to write a function that forms the union of two sets. The result will have everything from one set and In the case of addition, however, it is better to use Python’s everything in the other set that isn’t already in the first. Therefore the initial value can be one of the sets, and the accumulating built-in sum function: function inspects each element in the other set, discarding duplicates. Listing 4 is a first attempt. >>> sum([1,2,3]) 6 The reduce function is handy for other operations, though. The following expression forms the product of a list: >>> reduce(operator.mul, [1,2,3]) 6 def union(s,t): def form_union(sofar,x): return sofar + ([] if x in s else [x]) return reduce(form_union, t, s) Listing 4 An alternate form of reduce takes a third argument as an initializer. This comes in handy in case the list happens to be Since form_union is a one-liner, we can use a lambda expresempty: sion to create the function on-the-fly, instead, as shown in listing 5. The lambda keyword takes a parameter list followed by a colon and a single expression. >>> reduce(operator.mul, [], 1) As listing 6 shows, writing an intersection function is also 1 a one-liner. As shown in listing 3, without the third argument, there is no This time the default is the empty set, and elements of t are retained only if they are also >>> reduce(operator.mul, []) elements of s. Traceback (most recent call last): A function that takes other functions as paFile " ", line 1, in rameters or that returns a function as a result is TypeError: reduce() of empty sequence with no initial value known as a higher-order function. The map and reduce functions are examples that take a funcListing 3 www.StickyMinds.com NOVEMBER 2007 BETTER SOFTWARE 13 http://www.StickyMinds.com
Table of Contents Feed for the Digital Edition of Better Software - November 2007 Better Software - November 2007 Contents MarkYour Calendar Technically Speaking What’s Happening @StickyMinds.com Code Craft Test Connection Management Chronicles The Measure of a Management System Behind the Scenes A Story About User Stories and Test-Driven Development Product Announcements The Last Word Ad Index Better Software - November 2007 Better Software - November 2007 - (Page Intro) Better Software - November 2007 - Better Software - November 2007 (Page Cover1) Better Software - November 2007 - Better Software - November 2007 (Page Cover2) Better Software - November 2007 - Better Software - November 2007 (Page 1) Better Software - November 2007 - Better Software - November 2007 (Page 2) Better Software - November 2007 - Contents (Page 3) Better Software - November 2007 - MarkYour Calendar (Page 4) Better Software - November 2007 - MarkYour Calendar (Page 5) Better Software - November 2007 - MarkYour Calendar (Page 6) Better Software - November 2007 - Technically Speaking (Page 7) Better Software - November 2007 - Technically Speaking (Page 8) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 9) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 10) Better Software - November 2007 - What’s Happening @StickyMinds.com (Page 11) Better Software - November 2007 - Code Craft (Page 12) Better Software - November 2007 - Code Craft (Page 13) Better Software - November 2007 - Code Craft (Page 14) Better Software - November 2007 - Code Craft (Page 15) Better Software - November 2007 - Test Connection (Page 16) Better Software - November 2007 - Test Connection (Page 17) Better Software - November 2007 - Management Chronicles (Page 18) Better Software - November 2007 - Management Chronicles (Page 19) Better Software - November 2007 - The Measure of a Management System (Page 20) Better Software - November 2007 - The Measure of a Management System (Page 21) Better Software - November 2007 - The Measure of a Management System (Page 22) Better Software - November 2007 - The Measure of a Management System (Page 23) Better Software - November 2007 - The Measure of a Management System (Page 24) Better Software - November 2007 - The Measure of a Management System (Page 25) Better Software - November 2007 - The Measure of a Management System (Page 26) Better Software - November 2007 - The Measure of a Management System (Page 27) Better Software - November 2007 - Behind the Scenes (Page 28) Better Software - November 2007 - Behind the Scenes (Page 29) Better Software - November 2007 - Behind the Scenes (Page 30) Better Software - November 2007 - Behind the Scenes (Page 31) Better Software - November 2007 - Behind the Scenes (Page 32) Better Software - November 2007 - Behind the Scenes (Page 33) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 34) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 35) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 36) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 37) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 38) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 39) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 40) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 41) Better Software - November 2007 - A Story About User Stories and Test-Driven Development (Page 42) Better Software - November 2007 - Product Announcements (Page 43) Better Software - November 2007 - Product Announcements (Page 44) Better Software - November 2007 - Product Announcements (Page 45) Better Software - November 2007 - Product Announcements (Page 46) Better Software - November 2007 - The Last Word (Page 47) Better Software - November 2007 - Ad Index (Page 48) Better Software - November 2007 - Ad Index (Page Cover3) Better Software - November 2007 - Ad Index (Page Cover4)
For optimal viewing of this digital publication, please enable JavaScript and then refresh the page. If you would like to try to load the digital publication without using Flash Player detection, please click here.