Христина обнови решението на 14.03.2013 23:22 (преди над 11 години)
+def zip_with(func, *iterables):
+ zipped = zip(*iterables)
+ list_of_zip = list(zipped)
+
+ for zipvalue in list_of_zip:
+ zipped_by_func = func(*zipvalue)
+ yield zipped_by_func
+
+
+def iterate(func):
+ def compose(f, g):
+ return lambda x: f(g(x))
+
+ res_func = lambda y: y
+ while(True):
+ yield res_func
+ res_func = compose(func, res_func)
+
+
+def groupby(func, seq):
+ keys = {func(i) for i in seq}
+ return {key: list(filter(lambda i: func(i) == key, seq))
+ for key in keys}
+
+
+def cache(func, cache_size):
+ cached_args = []
+ cached_values = {}
+
+ def update_cache(all_args, values):
+ nonlocal cached_args
+ if len(cached_args) >= cache_size:
+ del cached_values[cached_args[0]]
+ cached_args = cached_args[1:]
+
+ cached_args.append(all_args)
+
+ def func_cached(*args):
+ all_args = args
+
+ if all_args not in cached_values:
+ cached_values[all_args] = func(*args)
+ update_cache(all_args, cached_values[all_args])
+
+ return cached_values[all_args]
+
+ return func_cached
Харесва ми кода, с лека забележка по името res_func
. Освен това, можеш ли да се сетиш за случай, в който del cached_values[cached_args[0]]
ще изгърми?