Infix operators for Python
Easily make named infix binary operators in Python.
# 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.
pip install betwixt
To run the all tests run:
Note, to combine the coverage data from all the tox environments run:
set PYTEST_ADDOPTS=--cov-append tox
Copyright and license
Copyright (c) 2016-2020 Riccardo Murri <firstname.lastname@example.org>
This is free software, available under the terms and conditions of the GNU LGPL – see file LICENSE for details.
- First release on PyPI.
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size betwixt-1.0.0-py2.py3-none-any.whl (8.9 kB)||File type Wheel||Python version py2.py3||Upload date||Hashes View|
|Filename, size betwixt-1.0.0.tar.gz (21.2 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for betwixt-1.0.0-py2.py3-none-any.whl