This was actually quite interesting to code, thanks for the idea Jonathan!

You can even support "magic.upper()" and "magic.real" at the same time as well as "magic[0]":

class MagicClass:
    NO_ARG = object()

    @staticmethod
    def __getattribute__(attr):
        def method(x=MagicClass.NO_ARG):
            if x is MagicClass.NO_ARG:
                return lambda x: getattr(x, attr)()
            return getattr(x, attr)
        return method

    @staticmethod
    def __getitem__(attr):
        return lambda x: x[attr]

magic = MagicClass()

print(list(map(magic.upper(), ["abc", "def"])))  # ['ABC', 'DEF']
print(list(map(magic.real, [1j, 2, 3+4j])))      # [0.0, 2, 3.0]
print(list(map(magic[0], ["abc", "def"])))       # ['a', 'd']

You could also use None instead of that NO_ARG thingy, because you most likely won't want to get any attributes of None objects, but that wouldn't produce proper errors incase you do anyways.

With metaclasses you propably could also make it work directly on the class without the need of a magic instance.

Benedikt

Am 08.03.2019 um 19:07 schrieb Jonathan Fine:
Hi Samuel

Interesting idea, and certainly addresses a real problem, if you find
yourself creating lots of lambda expressions. But in my first opinion,
not so useful that it merits adding to the syntax of Python.

(Even if I never use it, it puts an extra burden on me when scanning
Python code. Something that used to look like a syntax error is now
valid. That's more work for me.)

However, you can already achieve something similar, and perhaps more
expressive. It is possible to define an object 'magic' such that
    fn = magic.upper
    fn = lambda x: x.upper()
are effectively equivalent.

And this can be done now. No need for a PEP and a new version of
Python. And available for those who have to use some fixed already
existing Python versions.

I hope you'd be interesting in coding this up yourself. I'd have a
limited amount of time to help you, but it would put you on a good
learning curve, for fundamentals of the Python object model.

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to