sum と reduce

今日、list に対しても sum が使えることに気づいた。ということは以下の2つは等価だ。

import operator
reduce(operator.add, [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [])
sum([[1, 2, 3], [4, 5, 6], [7, 8, 9]], [])

じゃあ __add__ が定義されていればなんでもいいのかと思って ''.join(seq) も sum で置き換えられるんじゃないかと思ったら。

>>> sum(["abc", "def"], "")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: sum() can't sum strings [use ''.join(seq) instead]

むぅ。TOOWTDI*1 というやつか?

*1:There's only one way to do it