Okay, man muss diesen Aufwand nicht treiben. Meine Funktion macht mehr als Deine. Sie kommt nämlich auch damit klar wenn eine leeres iterierbares Objekt übergeben wurde und gibt dann entweder den `default` Wert zurück oder löst eine Ausnahme aus falls es den nicht gibt. Eine direkte Umsetzung Deiner Funktion sähe so aus:Zambo hat geschrieben:Also was du an Code geschrieben hast, ist eher ein Argument für Ruby Nicht böse nehmenBlackJack hat geschrieben:Code: Alles auswählen
import operator NO_DEFAULT = object() def my_sum(iterable, default=NO_DEFAULT): iterator = iter(iterable) try: first = iterator.next() except StopIteration: if default is NO_DEFAULT: raise TypeError('empty iterable without default') else: return default return reduce(operator.add, iterator, first) print my_sum(('H', 'a', 'l', 'l', 'o')) # -> 'Hallo' print my_sum(xrange(6)) # -> 15 print my_sum([], 0.0) # -> 0.0 print my_sum('') # Raises Exception.
Aber Ruby ist doch um einiges leichter zu lesen und zu verstehen. Was du da für einen Aufwand treiben mußt ist schon jenseits von gut und böse.
Code: Alles auswählen
import operator
def my_sum(iterable):
return reduce(operator.add, iterable, None)