Мартин обнови решението на 14.03.2013 17:32 (преди над 11 години)
+from collections import defaultdict, OrderedDict
+
+
+def groupby(func, seq):
+ result = defaultdict(list)
+ for x in seq:
+ result[func(x)].append(x)
+ return result
+
+
+def iterate(func):
+ def compose(outer, inner):
+ return lambda *args: outer(inner(*args))
+
+ def generator():
+ f = lambda *args: args if len(args) > 1 else args[0]
+ while True:
+ yield f
+ f = compose(f, func)
+ return generator()
+
+
+def zip_with(func, *iterables):
+ return (func(*ntuple) for ntuple in zip(*iterables))
+
+
+def cache(func, cache_size):
+ cached_args = OrderedDict()
+
+ def func_cached(*args):
+ retval = cached_args.get(args) if cached_args.get(args) else func(*args)
+ cached_args[args] = retval
+ if len(cached_args) > cache_size:
+ cached_args.popitem(last=False)
+ return retval
+ return func_cached
Добро решение, но именоваш кофти някои неща.
Какво значи retval
, например?
retval
предполагам идва от return value
. Не съм го измислил аз, retval
е широко използвано име за променлива из Python средите, и не само :)