Functional-style recursive pattern matching in Python. Crazy stuff.
Install
pip install patmat
Usage
Pattern matching with patmat:
>>> from patmat import *
>>> Mimic({(1, Val('k')): (3, Val('v'))}).match({(1, 2): (3, 4)})
{'k': 2, 'v': 4}
Multiple dispatch generic functions:
>>> from patmat import *
>>>
>>> @case
>>> def func(match, l=[Val('head'), ..., 3, Val('tail')]):
... print('a list with a head {} and a tail {}'.format(match.head, match.tail))
>>>
>>> @case
>>> def func(match, l=Val('item')):
... print('an item {}'.format(match.item))
>>>
>>> func([1, 2, 3, 4])
a list with a head 1 and a tail 4
>>> func(5)
an item: 5
More dispatch examples:
>>> @case
>>> def func(_, x=int):
... print('Do something with an integer.')
>>>
>>> @case
>>> def func(_, x=float):
... print('Do something with a float.')
>>>
>>> func(1)
Do something with an integer
>>> func(1.0)
Do something with a float
Matches list, tuple, dict, types, classes with attributes. Brace yourself for the power of recursive pattern matching:
>>> from patmat import *
>>> m = Mimic([
... 1, Type(int, Val(2)),
... Mimic(a=3, b=[4, Val(5), 6], c=Val(7)),
... Val(8), {Val(9): 10, Val(11): 12},
... ])
>>> class A:
... __init__ = lambda self, **kwargs: self.__dict__.update(kwargs)
>>> m.match([1, 2, A(a=3, b=[4, 5, 6], c=7), 8, {9: 10, 11: 12}])
{2: 2, 5: 5, 7: 7, 8: 8, 9: 9, 11: 11}
Release files for patmat 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| patmat-1.0.1.tar.gz | 5.7 kB | Details |
Release files / patmat-1.0.1.tar.gz
| Download URL | patmat-1.0.1.tar.gz |
|---|---|
| Size | 5.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bcc55351e329b7ce89d9df4fe7e6bee4a7d8f57ba185f8af0aaad0751bf28502
|
|
BLAKE2b-256 checksum How to use checksums |
0434d988505c225efdd87ae8853b8cd01babf25d690002ac7f4af96e208f0681
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |