"Structural pattern matching" for Python, part 2
"Structural pattern matching" for Python, part 2
Posted Sep 8, 2020 7:21 UTC (Tue) by johill (subscriber, #25196)In reply to: "Structural pattern matching" for Python, part 2 by ecree
Parent article: "Structural pattern matching" for Python, part 2
You can probably use some more "magic" to make that shorter, something like
from matching import match, capture
with match(p) as matches:
if m := matches((capture.x, capture.y)):
print("Diagonal at %d" % (m.x, ))
elif m := matches((0, capture.y)):
print("X-axis at %d" % (m.y, ))
elif m := matches((capture.x, capture.y)):
print("Point at (%d, %d)" % (m.x, m.y))
else:
raise ValueError("Not a 2-tuple")
return Point(*p)
You need something like
class CapturedVar:
def __init__(self, name):
self.name = name
class capture:
def __getattr__(self, name):
return CapturedVar(name)
and "match(...)" returns an object that is callable; the called method knows about CapturedVar instances and bumps those into the returned MatchedVars object ("m").
The LWN site is currently under high scraper load, so comment display has been suppressed for anonymous users. If you are a human, you may read the comments by clicking the button below:
Note: you can avoid this step in the future by logging into your LWN account.
