knife Documentation¶
knife is a powerful Python multitool loosely inspired by Underscore.js but remixed for maximum pythonicity.
knife concentrates power that is normally dispersed across the entire Python universe in one convenient shrink-wrapped package.
Vitals¶
knife works with CPython 2.6, 2.7, 3.1. and 3.2 and PyPy 1.8.
knife documentation is at http://readthedocs.org/docs/knife/en/latest/ or http://packages.python.org/knife/
Installation¶
Install knife with pip...:
$ pip install knife
[... possibly exciting stuff happening ...]
Successfully installed knife
...or easy_install...:
$ easy_install knife
[... possibly exciting stuff happening ...]
Finished processing dependencies for knife
...or old school by downloading knife from http://pypi.python.org/pypi/knife/:
$ python setup.py install
[... possibly exciting stuff happening ...]
Finished processing dependencies for knife
Development¶
- Public repository: https://bitbucket.org/lcrees/knife.
- Mirror: https://github.com/lcrees/knife/
- Issue tracker: https://bitbucket.org/lcrees/knife/issues
- License: BSD
3 second knife¶
Things go in:
>>> from knife import __
>>> gauntlet = __(5, 4, 3, 2, 1)
Things get knifed:
>>> gauntlet.initial().rest().slice(1, 2).last()
knife.lazy.lazyknife ([IN: ([3]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
Things come out:
>>> gauntlet.get()
3
Slightly more knife¶
knife has 40 plus methods that can be chained into pipelines...
contrived example:¶
>>> __(5, 4, 3, 2, 1).initial().rest().slice(1, 2).last().get()
3
...or used object-oriented style.
contrived example:¶
>>> from knife import knife
>>> oo = knife(5, 4, 3, 2, 1)
>>> oo.initial()
knife.active.activeknife ([IN: ([5, 4, 3, 2, 1]) => WORK: ([]) => HOLD: ([]) => OUT: ([5, 4, 3, 2])])
>>> oo.rest()
knife.active.activeknife ([IN: ([5, 4, 3, 2]) => WORK: ([]) => HOLD: ([]) => OUT: ([4, 3, 2])])
>>> oo.slice(1, 2)
knife.active.activeknife ([IN: ([4, 3, 2]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
>>> oo.last()
knife.active.activeknife ([IN: ([3]) => WORK: ([]) => HOLD: ([]) => OUT: ([3])])
>>> oo.get()
3
A knife object can roll its current state back to previous states like snapshots of immediately preceding operations, a baseline snapshot, or even a snapshot of the original arguments.
contrived example:¶
>>> undone = __(1, 2, 3).prepend(1, 2, 3, 4, 5, 6)
>>> undone.peek()
[1, 2, 3, 4, 5, 6, 1, 2, 3]
>>> undone.append(1).undo().peek()
[1, 2, 3, 4, 5, 6, 1, 2, 3]
>>> undone.append(1).append(2).undo(2).peek()
[1, 2, 3, 4, 5, 6, 1, 2, 3]
>>> undone.snapshot().append(1).append(2).baseline().peek()
[1, 2, 3, 4, 5, 6, 1, 2, 3]
>>> undone.original().peek()
[1, 2, 3]
knife knives come in two flavors: active and lazy. active.knife objects evaluate the result of calling a method immediately after the call. Calling the same method with a lazy.knife object only yields results when it is iterated over or knife.lazy.lazyknife.get is called to get results.
knife.lazy.lazyknife combines all knife methods in one knife class:
>>> from knife import lazyknife
It can be imported under its dunderscore (knife.__) alias.
>>> from knife import __
knife.active.activeknife also combines every knife method in one combo knife class:
>>> from knife import activeknife
It can be imported under its knife.knife alias:
>>> from knife import knife
knife methods are available in more focused classes that group related methods together. These classes can also be chained together into pipelines.
contrived example:¶
>>> from knife.active import mathknife, reduceknife
>>> one = mathknife(10, 5, 100, 2, 1000)
>>> two = reduceknife()
>>> one.minmax().pipe(two).merge().back().min().get()
2
>>> one.original().minmax().pipe(two).merge().back().max().get()
1000
>>> one.original().minmax().pipe(two).merge().back().sum().get()
1002
Lazy knives¶
- knife.lazy.lazyknife — Lazier evaluated combo knife
- knife.lazy.cmpknife — Lazier evaluated comparing knife
- knife.lazy.filterknife — Lazier evaluated filtering knife
- knife.lazy.mapknife — Lazier evaluated mapping knife
- knife.lazy.mathknife — Lazier evaluated mathing knife
- knife.lazy.orderknife — Lazier evaluated ordering knife
- knife.lazy.reduceknife — Lazier evaluated reducing knife
- knife.lazy.repeatknife — Lazier evaluated repeating knife
- knife.lazy.sliceknife — Lazier evaluated slicing knife
Active knives¶
- knife.active.activeknife — Actively evaluated combo knife
- knife.active.cmpknife — Actively evaluated comparing knife
- knife.active.filterknife — Actively evaluated filtering knife
- knife.active.mapknife — Actively evaluated mapping knife
- knife.active.mathknife — Actively evaluated mathing knife
- knife.active.orderknife — Actively evaluated ordering knife
- knife.active.reduceknife — Actively evaluated reducing knife
- knife.active.repeatknife — Actively evaluated repeating knife
- knife.active.sliceknife — Actively evaluated slicing knife