In guile the module (ice-9 match) generally has zero runtime cost compared to equal hand-written code.
Good FP debuggers would be able to step through it of course so it can be restated as a “toolchain issue” but that ignores the fact that Python is largely statement oriented, in terms of its execution model.
I am sad that most languages don't have macros since it is a very powerful tool. Not only does it let you abstract the ugliness away from approaches like this python one (which is actually pretty decent), but it also let's you produce good machine code from a "bolted on" construct. The python matcher is bound to have some overhead, whereas a syntactically expanded one is not.
with matching(expr) as m:
def __init__(self, expr):
self.expr = expr
self.patterns = 
self.result = None
def __call__(self, pattern):
def __exit__(self, *args):
for pattern, func in self.patterns:
self.result = func(self.expr)
m(pattern)(lambda v: ...)
May end up using this, or one of us should send a PR to the OP!