My idea is not "assignment blocks" those already exist. `def` and `class` blocks are both syntaxes that assign to some name. I'm just using the term to refer to them as a group.

The proposal is just being able to return them. These two examples become equivalent:

def ignore_exc(exc_type):
    return def (func):
        @wraps(func)
        return def (*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except exc_type:
                pass

def ignore_exc(exc_type):
    def decorator(func):
        @wraps(func)
        def wrapped_func(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except exc_type:
                pass
        return wrapped_func
    return decorator

On Wed, Oct 24, 2018 at 9:51 AM Benedikt Werner <1benediktwerner@gmail.com> wrote:

Would you mind providing a bit more details about your proposal?

What exactly are those "Assignment Blocks" supposed to do?

If I understand your proposal correctly you want this:

def my_func():
    return def():
        print("abc")

to be the same as this:

def my_func():
    def inner_func():
        print("abc")
    return inner_func

But this is only my assumption as your proposal doesn't give very much details.
Maybe you should provide a few simple examples and explain what they are supposed to do or what they should be equivalent to.

Your example is quite complex and to me it's not clear at all what it is supposed to mean.

Also and probably most importantly what is the reason you want this? Are there any good usecases where this would help?

If my assumption above is correct this just looks like a bit of syntactic sugar that IMO isn't really neccessary. It doesn't really improve readability or save many characters. The existing way to do this is totally fine.

Benedikt


Am 24.10.2018 um 15:18 schrieb Calvin Spealman:
I'd like to suggest what I think would be a simple addition to `def` and `class` blocks. I don't know if calling those "Assignment Blocks" is accurate, but I just mean to refer to block syntaxes that assign to a name. Anyway, I propose a combined return-def structure, and optionally also allowing a return-class version. Omitting the name would be allowable, as well.

This would only apply to a `def` or `class` statement made as the last part of the function body, of course.

def ignore_exc(exc_type):
    return def (func):
        @wraps(func)
        return def (*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except exc_type:
                pass

Thanks for considering and for any comments, thoughts, or feedback on the idea!


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

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