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 RubyBlackJack 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.Nicht böse nehmen

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)
 Naja heute würde ich C/C++ (eher C ^^) bei Zeitkritischen Sachen nutzen und ansonsten alles in Python machen bzw. je nach Anwendungsfall auch mal Perl benutzen. (-> wenns schnell gehen soll und dabei Reguläre ausdrücke zum Einsatz kommen, was in Python mMn zu Kompliziert gelöst ist bzw. ich verstehe die Umsetzung in Python noch nicht wirklich).
 Naja heute würde ich C/C++ (eher C ^^) bei Zeitkritischen Sachen nutzen und ansonsten alles in Python machen bzw. je nach Anwendungsfall auch mal Perl benutzen. (-> wenns schnell gehen soll und dabei Reguläre ausdrücke zum Einsatz kommen, was in Python mMn zu Kompliziert gelöst ist bzw. ich verstehe die Umsetzung in Python noch nicht wirklich). 
 
 
  
 
 
 