A Little Noise

13Dec/190

Using map with class methods – why map(split) doesn’t work

I have some sentences.

text = [
  "Call me Ishmael.",
  "Some years ago, never mind how long precisely, having little or no money..."
]

How many words are in each sentence?

for sentence in text:
  sentenceLength = len(sentence.split())
  print(sentenceLength)

3
13

But I want to do it all at once the functional programming way, with maps.

list(map(len, map(split, text)))

NameError: name 'split' is not defined

Why does that produce an error? Because "split" isn't a function. It's a method of strings: str.split(), not split(str).

So how do we use map with a class method?

from operator import methodcaller
split = methodcaller("split")

That means, "Create a function. I'll pass in an object. Call its 'split' method."

Now it works.

list(map(len, map(split, text)))
[3, 13]

Of course, there are other ways. Don't even need map.

[len(s.split()) for s in text]
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

No trackbacks yet.