Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (pypi.python.org).
Help us improve Python packaging - Donate today!

Things go in. Things get knifed. Things go out.

Project Description

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

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 objects 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 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 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
Release History

Release History

This version
History Node

0.5.11

History Node

0.5.10

History Node

0.5.9

History Node

0.5.8

History Node

0.5.7

History Node

0.5.6

History Node

0.5.5

History Node

0.5.4

History Node

0.5.3

History Node

0.5.2

History Node

0.5.1

History Node

0.5.0

Download Files

Download Files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
knife-0.5.11.tar.gz (23.9 kB) Copy SHA256 Checksum SHA256 Source Oct 4, 2012
knife-0.5.11.zip (31.5 kB) Copy SHA256 Checksum SHA256 Source Oct 4, 2012

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting