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
            'anything')

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

_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to