Свилен обнови решението на 14.03.2013 21:47 (преди над 11 години)
+def iterate(func):
+ iter = 0
+ def _inner(arg):
+ def _recursive(iter, arg):
+ if iter > 1:
+ return _recursive(iter - 1, func(arg))
+ return arg
+ nonlocal iter
+ iter += 1
+ return _recursive(iter, arg)
+ while True:
+ yield _inner
+
+def zip_with(func, *iter):
+ for value in zip(*iter):
+ yield func(*value)
+
+def groupby(func, iter):
+ iter = list(iter)
+ _result = {key: [value for value in iter if func(value) == key] for key
+ in set(map(func, iter))}
+ return _result
+
+def cache(func, size):
+ keys, values = [], []
+ def func_cached(arg):
+ if size == 0:
+ return func(arg)
+ if arg not in keys and size == len(keys):
+ del keys[0]
+ del values[0]
+ if arg not in keys:
+ keys.append(arg)
+ values.append(func(arg))
+ return values[len(values)-1]
+ return cached
+
Пусни си тестовете :)
Имаш странен стил на писане.
- Какъв е смисълът от
_result
вgroupby
? - В момента, в който се наложи да ползваш
nonlocal
, не ти ли светна някаква лампичка?