[Python-ideas] Pattern Matching Syntax

Terry Reedy tjreedy at udel.edu
Thu May 3 18:09:32 EDT 2018

On 5/3/2018 8:41 AM, Robert Roskam wrote:

> However, I don't see that the conversation ever really resolved, so I'd 
> like restart the conversation on some kind of pattern matching syntax in 
> Python.

For the cases not handled by dicts, I believe chained conditional 
expressions work.

# Pattern matching with guards
x = 'three'

number = match x:
     1 => "one"
     y if y is str => f'The string is {y}'
     _ => "anything"

print(number)  # The string is three

Is handled by

def f(x):
     return ('one' if x == 1 else
             f'The string is {x}' if isinstance(x, str) else

for x in 1, '2', 3: print(f(x))

I don't like the ordering, but this was Guido's decision.

 >     1, 2, 3, 4 => "one to four"

"one to four' if x in (1,2,3,4)

 >    x:int => f'{x} is a int'
 >    x:float => f'{x} is a float'
 >    x:str => f'{x} is a string'

tx = type(x)
f'{x} is a {tx}' if tx in (int, float, str) else None

Terry Jan Reedy

More information about the Python-ideas mailing list