2020-10-08 21:22:51 +00:00
#+title : Python Typing
Python does not require nor enforce strict typing, and instead takes a dynamic
approach using [[file:20201008164244-duck_typing.org ][Duck Typing ]].
2020-10-11 00:13:31 +00:00
[[file:20201010185815-gradual_typing.org ][Gradual Typing ]] support for Python is provided via type hints as described in
2020-10-14 13:26:40 +00:00
[[https://www.python.org/dev/peps/pep-0484/ ][PEP-484 ]] (which covers [[file:20201009010657-nominal_typing.org ][Nominal Typing ]]) and expanded upon in [[https://www.python.org/dev/peps/pep-0544/ ][PEP-544 ]] (which covers
2020-10-11 00:13:31 +00:00
[[file:20201008164835-structural_typing.org ][Structural Typing ]]).
2020-10-08 21:22:51 +00:00
Variables, function arguments, and return values can have their types annotated,
e.g. "variable x has type integer" or "function y takes a string and returns a
list of dictionaries". While these are optional and not checked at run-time,
they serve as documentation and can be used by various type checkers to ensure
program correctness.
* Available Type Checkers
- Mypy :: http://mypy-lang.org/
- Pyright (Microsoft) :: https://github.com/Microsoft/pyright
- Pyre (Facebook) :: https://pyre-check.org/
- Pytype (Google) :: https://google.github.io/pytype/
* Limitations
- Type hints do not guarantee purity.
- Type hints are not checked at run-time.
* Fun facts
2020-10-14 13:26:40 +00:00
- Per [[https://www.python.org/dev/peps/pep-0285/ ][PEP-285 ]], Python's =boolean= inherits from =int= , hence =True + True = 2=.
2020-10-09 05:56:12 +00:00
* Relevant PEPs
2020-10-14 13:26:40 +00:00
- [[https://www.python.org/dev/peps/pep-3107/ ][PEP 3107 -- Function Annotations ]]
- [[https://www.python.org/dev/peps/pep-0482/ ][PEP 482 -- Literature Overview for Type Hints ]]
- [[https://www.python.org/dev/peps/pep-0483/ ][PEP 483 -- The Theory of Type Hints ]]
- [[https://www.python.org/dev/peps/pep-0484/ ][PEP 484 -- Type Hints ]]
- [[https://www.python.org/dev/peps/pep-0526/ ][PEP 526 -- Syntax for Variable Annotations ]]
- [[https://www.python.org/dev/peps/pep-0544/ ][PEP 544 -- Protocols: Structural subtyping (static duck typing) ]]
- [[https://www.python.org/dev/peps/pep-0557/ ][PEP 557 -- Data Classes ]]
- [[https://www.python.org/dev/peps/pep-0560/ ][PEP 560 -- Core support for typing module and generic types ]]
- [[https://www.python.org/dev/peps/pep-0561/ ][PEP 561 -- Distributing and Packaging Type Information ]]
- [[https://www.python.org/dev/peps/pep-0563/ ][PEP 563 -- Postponed Evaluation of Annotations ]]
- [[https://www.python.org/dev/peps/pep-0585/ ][PEP 585 -- Type Hinting Generics In Standard Collections ]]
- [[https://www.python.org/dev/peps/pep-0586/ ][PEP 586 -- Literal Types ]]
- [[https://www.python.org/dev/peps/pep-0589/ ][PEP 589 -- TypedDict: Type Hints for Dictionaries with a Fixed Set of Keys ]]
- [[https://www.python.org/dev/peps/pep-0591/ ][PEP 591 -- Adding a final qualifier to typing ]]
2020-10-19 22:21:54 +00:00
- [[https://www.python.org/dev/peps/pep-0593/ ][PEP 593 -- Flexible function and variable annotations ]]
2020-10-14 13:26:40 +00:00
- [[https://www.python.org/dev/peps/pep-0604/ ][PEP 604 -- Allow writing union types as X | Y ]]
- [[https://www.python.org/dev/peps/pep-0613/ ][PEP 613 -- Explicit Type Aliases ]]