[Python-ideas] Match statement brainstorm
Michael Selik
michael.selik at gmail.com
Mon May 23 22:57:39 EDT 2016
On Mon, May 23, 2016 at 8:23 PM Guido van Rossum <guido at python.org> wrote:
> No, what I'm saying is that seeing it as sugar for exception handing
> is the wrong way to look at it.
>
Ok, let me refocus on the idea of assign-if-you-can during matching, not
just sugar for try/except.
The matching features of equality, inequality, predicates, and subtype are
already available via if/elif. The matching features of destructuring,
assignment, and post-assignment guards need new syntax. The other proposals
in this thread suggest a new keyword or keyword pair like switch/case.
Instead, why not extend if/elif with a new operator?
def demo(arg):
if p, q ?= arg.x, arg.y: # dict structure
elif x ?= arg.x and isinstance(x, int) # assignment + guard
elif a, b, *_ ?= arg: # tuple structure
elif isinstance(arg, Mapping): # nothing new here
A major advantage to merging these new matching features with the existing
if/elif is that refactoring gets much easier. One could insert a single
elif block near the top of the chain using the new assign-if-you-can
operator/keyword, without needing to change any of the existing elif
statements.
Otherwise, I could imagine someone waffling back and forth between
switch/case and if/elif as they add and remove cases. What would be the
style recommendation if you have 5 boring cases that are all easy to read
via if/elif?
The disadvantage would be that the new syntax wouldn't stand out as much as
it would with, say, switch/case, and someone might not notice its usage. I
think a good choice of operator/keyword mitigates this. A keyword like
``as`` would stand out due to syntax highlighting. An operator like ``?=``
looks different enough and many similar-looking operators, like ``/=``
would be illegal.
Operator precedence would affect the beauty of the code. Giving ``?=`` the
same precedence as ``==`` seems best for post-assignment guards.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160524/10998da2/attachment.html>
More information about the Python-ideas
mailing list