betwixt

Infix operators for Python


Licenses
LGPL-3.0/GPL-3.0+
Install
pip install betwixt==1.0.0

Documentation

Overview

docs Documentation Status
tests
package

Easily make named infix binary operators in Python.

Demo time:

# the only useful function in the module
>>> from betwixt import infix_operator

# any function of 2 arguments would do
>>> from fnmatch import fnmatch

# make the binary function into an operator, delimited by `*`
>>> matches = infix_operator('*', fnmatch)

# use it
>>> 'foo.txt' *matches* '*.txt'
True

# other delimiters can be used
>>> matches = infix_operator('|', fnmatch)
>>> 'foo.txt' |matches| '*.txt'
True

A decorator form can also be used:

>>> @infix_operator('|')
... def contains(left, right):
...   return right in left

>>> [1, 2, 3] |contains| 1
True

>>> [1, 2, 3] |contains| 0
False

Finally, betwixt is provided as a shorter (and, perhaps, more expressive) alias to infix_operator:

>>> from betwixt import betwixt

>>> @betwixt('*')
... def joining(left, right):
...   return left.join(right)

>>> '_' *joining* ['a', 'b', 'c']
'a_b_c'

>>> split_at = betwixt('//', lambda lhs, rhs: lhs.split(rhs))

>>> 'a_b_c' //split_at// '_'
['a', 'b', 'c']

All these example operators and a few more are available in module betwixt.examples.

The idea was taken from http://code.activestate.com/recipes/384122-infix-operators/ and by a similar C++ hack whose code on the web I cannot find any more, but no actual code has been stolen.

Installation

pip install betwixt

Documentation

https://betwixt.readthedocs.io/

Development

To run the all tests run:

tox

Note, to combine the coverage data from all the tox environments run:

Windows
set PYTEST_ADDOPTS=--cov-append
tox
Other
PYTEST_ADDOPTS=--cov-append tox

Copyright and license

Copyright (c) 2016-2020 Riccardo Murri <riccardo.murri@gmail.com>

This is free software, available under the terms and conditions of the GNU LGPL -- see file LICENSE for details.