This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author levkivskyi
Recipients levkivskyi
Date 2015-05-06.10:24:41
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1430907882.79.0.781559925773.issue24133@psf.upfronthosting.co.za>
In-reply-to
Content
The matrix multiplication operator @ is going to be introduced in Python 3.5 and I am thinking about the following idea:

The semantics of matrix multiplication is the composition of the corresponding linear transformations.
A linear transformation is a particular example of a more general concept - functions.
The latter are frequently composed with ("wrap") each other. For example:

plot(real(sqrt(data)))

However, it is not very readable in case of many wrapping layers. Therefore, it could be useful to employ
the matrix multiplication operator @ for indication of function composition. This could be done by such (simplified) decorator:

class composable:

    def __init__(self, func):
        self.func = func

    def __call__(self, arg):
        return self.func(arg)

    def __matmul__(self, other):
        def composition(*args, **kwargs):
            return self.func(other(*args, **kwargs))
        return composable(composition)

I think using such decorator with functions that are going to be deeply wrapped
could improve readability.
You could compare (note that only the outermost function should be decorated):

plot(sorted(sqrt(real(data_array)))) vs. (plot @ sorted @ sqrt @ real) (data_array)

I think the latter is more readable, also compare

def sunique(lst):
    return sorted(list(set(lst)))

vs.

sunique = sorted @ list @ set

Apart from readability, there are following pros of the proposed decorator:

1. Similar semantics as for matrix multiplication.
2. Same symbol for composition as for decorators.
3. The symbol @ resembles mathematical notation for function composition: ∘

I think it could be a good idea to add such a decorator to the stdlib functools module.
History
Date User Action Args
2015-05-06 10:24:42levkivskyisetrecipients: + levkivskyi
2015-05-06 10:24:42levkivskyisetmessageid: <1430907882.79.0.781559925773.issue24133@psf.upfronthosting.co.za>
2015-05-06 10:24:42levkivskyilinkissue24133 messages
2015-05-06 10:24:41levkivskyicreate