[Python-ideas] new operators via backquoting
Chris Rebert
cvrebert at gmail.com
Wed Jan 3 01:07:31 CET 2007
In Haskell, foo `baz` bar means (baz foo bar), which translates to
baz(foo, bar) in Python. This allows Haskell programmers to use
functions as infix operators.
If I recall correctly, in Py3k, enclosing something in backticks will no
longer cause it to be repr()-ed, leaving the backtick without a meaning
in Python.
Thus, I propose one of the following as the new use for the backtick (`):
[Note: In both, the characters between the backticks must be a valid
Python identifier.]
(A) `baz` is treated as an operator, named "baz", just as / is "div".
foo `baz` bar thus causes python to try to call foo.__baz__(bar), and
failing that, bar.__rbaz__(foo), and if both those fail, raise
TypeError. This is, if I understand correctly, how the builtin operators
work.
(B) `baz` is a special way to call a callable. foo `baz` bar is
translated to baz(foo, bar) with the standard lookup rules for
resolving "baz"
Example use cases, stolen from Haskell: The Craft of Functional Programming:
2 `max` 5 => 5
7 `cons` tail => ConsCell(val=7, next=tail)
matrix1 `crossproduct` matrix2 => cross-product of the matrices
[1, 2, 3] `zip` ['a', 'b', 'c'] => [[1, 'a'], [2, 'c'], [3, 'c']]
I believe that this would improve the readability of code, such as
Numeric, without going off the deep end and offering programmable syntax.
- Chris Rebert
More information about the Python-ideas
mailing list