Package: patternmatching
Python Pattern Matching=======================Python, I love you. But I'd like you to change. It's not you, it's me. Really.See, you don't have pattern matching. But, that's not the root of it. Macrosare the root of it. You don't have macros but that's OK. Right now, I wantpattern matching. I know you offer me ``if``/``elif``/``else`` statements but Ineed more. I'm going to abuse your functions. Guido, et al, I hope you canforgive me. This will only hurt a little.`Python Pattern Matching`_ is an Apache2 licensed Python module for `patternmatching`_ like that found in functional programming languages. Most projectsthat address Python pattern matching focus on syntax and simple cases. Operatoroverloading is often used to change the semantics of operators to supportpattern matching. In other cases, function decorators are used to implementmultiple dispatch, sometimes known as function overloading. Each of thesesyntaxes, operators, and decorators, is really more of a detail in theapplication of pattern matching.A lot of people have tried to make this work before. Somehow it didn't take. Ishould probably call this yet-another-python-pattern-matching-module but"yappmm" doesn't roll off the tongue. Other people have tried overloadingoperators and changing codecs. This module started as a codec hack but those arehard because they need an ecosystem of emacs-modes, vim-modes and the like toreally be convenient.Python Pattern Matching focuses instead on the semantics of pattern matching inPython. The dynamic duck-typing behavior in Python is distinct from the taggedunions found in functional programming languages. Rather than trying to emulatethe behavior of functional pattern matching, this project attempts to implementpattern matching that looks and feels native to Python. In doing so thetraditional function call is used as syntax. There are no import hooks, nocodecs, no AST transforms... todo::Python ``match`` function example.Finally, pythonic pattern matching! If you've experienced the feature before in"functional" languages like Erlang, Haskell, Clojure, F#, OCaml, etc. then youcan guess at the semantics... todo::Show the same code without ``patternmatching``.Features--------- Pure-Python- Developed on Python 3.7- Tested on CPython 3.4, 3.5, 3.6, 3.7 and PyPy3.. todo::- Fully Documented- 100% test coverage- Hours of stress testing.. image:: https://api.travis-ci.org/grantjenks/python-pattern-matching.svg?branch=master:target: http://www.grantjenks.com/docs/patternmatching/.. image:: https://ci.appveyor.com/api/projects/status/github/grantjenks/python-pattern-matching?branch=master&svg=true:target: http://www.grantjenks.com/docs/patternmatching/Quickstart----------Installing `Python Pattern Matching`_ is simple with `pip<http://www.pip-installer.org/>`_::$ pip install patternmatchingYou can access documentation in the interpreter with Python's built-in `help`function. The `help` works on modules, classes, and functions in `patternmatching`_... code-block:: python>>> from pypatt import match, bind, bound, like>>> help(match)Alternative Packages--------------------- https://github.com/lihaoyi/macropy- module import, but similar design- https://github.com/Suor/patterns- decorator with funky syntax- Shared at Python Brazil 2013- https://github.com/mariusae/match- http://monkey.org/~marius/pattern-matching-in-python.html- operator overloading- http://blog.chadselph.com/adding-functional-style-pattern-matching-to-python.html- multi-methods- http://svn.colorstudy.com/home/ianb/recipes/patmatch.py- multi-methods- http://www.artima.com/weblogs/viewpost.jsp?thread=101605- the original multi-methods- http://speak.codebunk.com/post/77084204957/pattern-matching-in-python- multi-methods supporting callables- http://www.aclevername.com/projects/splarnektity/- not sure how it works but the syntax leaves a lot to be desired- https://github.com/martinblech/pyfpm- multi-dispatch with string parsing- https://github.com/jldupont/pyfnc- multi-dispatch- http://www.pyret.org/- It's own language- https://pypi.python.org/pypi/PEAK-Rules- generic multi-dispatch style for business rules- http://home.in.tum.de/~bayerj/patternmatch.py- Pattern-object idea (no binding)- https://github.com/admk/patmat- multi-dispatch styleOther Languages---------------- https://msdn.microsoft.com/en-us/library/dd547125.aspx F#- https://doc.rust-lang.org/book/patterns.html Rust- https://www.haskell.org/tutorial/patterns.html Haskell- http://erlang.org/doc/reference_manual/expressions.html#pattern Erlang- https://ocaml.org/learn/tutorials/data_types_and_matching.html OcamlDeveloper Guide---------------* `Python Pattern Matching Tutorial`_* `Python Pattern Matching Reference`_* `Python Pattern Matching Search`_* `Python Pattern Matching Index`_.. _`Python Pattern Matching Tutorial`: http://www.grantjenks.com/docs/patternmatching/tutorial.html.. _`Python Pattern Matching Reference`: http://www.grantjenks.com/docs/patternmatching/reference.html.. _`Python Pattern Matching Search`: http://www.grantjenks.com/docs/patternmatching/search.html.. _`Python Pattern Matching Index`: http://www.grantjenks.com/docs/patternmatching/genindex.htmlProject Links-------------* `Python Pattern Matching`_* `Python Pattern Matching at PyPI`_* `Python Pattern Matching at GitHub`_* `Python Pattern Matching Issue Tracker`_.. _`Python Pattern Matching`: http://www.grantjenks.com/docs/patternmatching/.. _`Python Pattern Matching at PyPI`: https://pypi.python.org/pypi/patternmatching/.. _`Python Pattern Matching at GitHub`: https://github.com/grantjenks/python-pattern-matching.. _`Python Pattern Matching Issue Tracker`: https://github.com/grantjenks/python-pattern-matching/issuesPython Pattern Matching License-------------------------------Copyright 2015-2019, Grant JenksLicensed under the Apache License, Version 2.0 (the "License"); you may not usethis file except in compliance with the License.  You may obtain a copy of theLicense athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, software distributedunder the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES ORCONDITIONS OF ANY KIND, either express or implied.  See the License for thespecific language governing permissions and limitations under the License... _`pattern matching`: http://www.grantjenks.com/docs/patternmatching/