Qualche prova in piĆ¹: import itertools
def gen(n): i = 1 while i < n: yield i i += 1 def avg1(): n, sum_ = 0, 0.0 for v in gen(100000): sum_ += v n += 1 return sum_ / n def avg2(): tot = 0.0 for n, v in enumerate(gen(100000), 1): tot += v try: return tot / n except UnboundLocalError: return 0 # ??? def avg3(): x = itertools.izip(*((i, 1) for i in gen(100000))) return float(sum(x.next())) / sum(x.next()) def avg4(): it1, it2 = itertools.tee(gen(100000)) try: return sum(it1) / float(sum(1 for _ in it2)) except ZeroDivisionError: return 0 # ??? if __name__ == '__main__': import timeit for s in range(1, 5): f = "avg%s" % s print f, timeit.timeit(f + "()", setup="from __main__ import %s" % f, number=100) *avg1 2.8069589138* *avg2 2.88984298706* *avg3 6.68095088005* *avg4 2.85471391678* Postmettendo che avg1 e avg3 nel caso di sequenza nulla sbagliano. Ciao. Marco.
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python