[Python-Dev] The new and improved PEP 572, same great taste with 75% less complexity!

Mikhail V mikhailwas at gmail.com
Thu Apr 26 21:33:43 EDT 2018


On Thu, Apr 26, 2018 at 4:27 PM, Kirill Balunov <kirillbalunov at gmail.com> wrote:
>
>
> 2018-04-24 18:31 GMT+03:00 Chris Angelico <rosuav at gmail.com>:
>>
>>
>>
>
> Not sure, but if additional motivating examples are required, there is a
> common pattern for dynamic attribute lookup (snippet from `copy.py`):
>
>     reductor = dispatch_table.get(cls)
>     if reductor:
>         rv = reductor(x)
>     else:
>         reductor = getattr(x, "__reduce_ex__", None)
>         if reductor:
>             rv = reductor(4)
>         else:
>             reductor = getattr(x, "__reduce__", None)
>             if reductor:
>                 rv = reductor()
>             else:
>                 raise Error("un(shallow)copyable object of type %s" % cls)
>
> which can with the current `binding expression` syntax simplified to:
>
>     if reductor := dispatch_table.get(cls):
>         rv = reductor(x)
>     elif reductor := getattr(x, "__reduce_ex__", None):
>         rv = reductor(4)
>     elif reductor := getattr(x, "__reduce__", None):
>         rv = reductor()
>     else:
>         raise Error("un(shallow)copyable object of type %s" % cls)
>

To me this looks more like a motivating example for adding
GOTO statement to Python... Anybody writing a PEP?  :)
And should not the above be wrapped in a function?
(a workaround in abscence of GOTO)

Also, the ELIF is merely an edge case: once you
have something like:

if value :
    rv = f(x)
else :
    temp = ...
    value = f1(temp)
    print (value)
    if value :
        rv = f2(x)
    ...

then it does not wrap into anything anymore.


Mikhail


More information about the Python-Dev mailing list