Станислав обнови решението на 14.03.2013 20:06 (преди над 11 години)
+def groupby(func, seq):
+ return {group: [n for n in seq if func(n) == group]
+ for group in set(map(func, seq))}
+
+
+def iterate(func):
+ def compose(inner_func):
+ return lambda x: func(inner_func(x))
+
+ current_func = lambda x: x
+ while True:
+ yield current_func
+ current_func = compose(current_func)
+
+
+def zip_with(func, *iterables):
+ min_iterables_len = min(map(len, iterables)) if len(iterables) else 0
+ for i in range(0, min_iterables_len):
+ yield func(*[iterable[i] for iterable in iterables])
+
+
+def cache(func, cache_size):
+ class CachedFunc():
+ def __init__(self):
+ self.cache = []
+
+ def __call__(self, *args):
+ for arguments, result in self.cache:
+ if arguments == args:
+ return result
+ return self.__non_cached_call(*args)
+
+ def __non_cached_call(self, *args):
+ result = func(*args)
+ self.cache = [(args, result)] + self.cache[:cache_size - 1]
+ return result
+ return CachedFunc()
- Какво значи seq?
- len е неприложим в някои случаи. Можеш ли да се сетиш в кои?
- Помисли за по-добро решение от това да набуташ клас във функцийка :)
- В groupby предполагам, че seq означава sequence. Така е зададено в условието.