Larry Hastings wrote:
> On 11/23/20 8:15 AM, Brian Coleman wrote:
> > def process(root_node: Node):
> >      def process_node(node: Node):
> >          if isinstance(node, StringNode):
> >              return node.value
> >          elif isinstance(node, NumberNode):
> >              return float(node.value)
> >          elif isinstance(node, ListNode):
> >              return [process_node(child_node) for child_node in 
> > node.children]
> >          elif isinstance(node, DictNode):
> >              return {key: process_node(child_node) for key, child_node in 
> > node.children}
> >          else:
> >              raise Exception('Unexpected node')
> > You don't need the "else".  And you can change all your "elif"s into 
> "if"s too.  Now your "isinstance" version is 35 lines. Shorter than the 
> pattern matching version, roughly the same speed, works in current 
> Python, eminently readable to anybody conversant in current Python.  A 
> very reasonable solution to the problem.
> There should be one--and preferably only one--obvious way to do it,
> //arry/

It was not my intention to suggest that the solution implemented in the 
shortest number of lines was superior.

I think that one of the advantages of the pattern matching implementation over 
the sequence of `isinstance` checks is that there is no need to worry about 
whether using `if`, `elif`or `else` is the best approach. There is a single 
elegant and natural way to express the solution with pattern matching.
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/7FCXBKZQ6PU7VAOB76GGFJJXFWEPXL7L/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to