{"id":2816,"date":"2021-11-10T08:46:26","date_gmt":"2021-11-10T08:46:26","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=2816"},"modified":"2025-04-02T09:50:11","modified_gmt":"2025-04-02T09:50:11","slug":"python-type-hints","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/python-basics\/python-type-hints\/","title":{"rendered":"Python Type Hints"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about the Python type hints and how to use the mypy tool to check types statically.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-python-type-hints'>Introduction to Python type hints <a href=\"#introduction-to-python-type-hints\" class=\"anchor\" id=\"introduction-to-python-type-hints\" title=\"Anchor for Introduction to Python type hints\">#<\/a><\/h2>\n\n\n\n<p>Some programming languages have static typing, such as C\/C++. It means you need to declare types of variables, parameters, and return values of a function upfront. The predefined types allow the compilers to check the code before compiling and running the program.<\/p>\n\n\n\n<p>Python uses dynamic typing, in which a function&#8217;s variables, parameters, and return values can be any type. Also, the types of variables can change while the program runs.<\/p>\n\n\n\n<p>Generally, dynamic typing makes it easy to program and causes unexpected errors that you can only discover until the program runs.<\/p>\n\n\n\n<p>Python&#8217;s type hints provide you with optional static typing to leverage the best of both static and dynamic typing.<\/p>\n\n\n\n<p>The following example defines a simple <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-functions\/\">function<\/a> that accepts a string and returns another string:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">say_hi<\/span><span class=\"hljs-params\">(name)<\/span>:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f'Hi <span class=\"hljs-subst\">{name}<\/span>'<\/span>\n\n\ngreeting = say_hi(<span class=\"hljs-string\">'John'<\/span>)\nprint(greeting)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here&#8217;s the syntax for adding type hints to a parameter and return value of a function:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">parameter: type\n-&gt; type<\/code><\/span><\/pre>\n\n\n<p>For example, the following shows how to use type hints for the <code>name<\/code> parameter and return value of the <code>say_hi()<\/code> function:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">say_hi<\/span><span class=\"hljs-params\">(name: str)<\/span> -&gt; str:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f'Hi <span class=\"hljs-subst\">{name}<\/span>'<\/span>\n\n\ngreeting = say_hi(<span class=\"hljs-string\">'John'<\/span>)\nprint(greeting)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Hi John<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this new syntax, the <code>name<\/code> parameter has the <code>str<\/code> type:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">name: str<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>And the return value of the <code>say_hi()<\/code> function also has the type <code>str<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">-&gt; str<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Besides the <code>str<\/code> type, you can use other built-in types such as <code>int<\/code>, <code>float<\/code>, <code>bool<\/code>, and <code>bytes<\/code> for type hintings.<\/p>\n\n\n\n<p>It&#8217;s important to note that the Python interpreter ignores type hints completely. If you pass a number to the <code>say_hi()<\/code> function, the program will run without any warning or error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">say_hi<\/span><span class=\"hljs-params\">(name: str)<\/span> -&gt; str:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-string\">f'Hi <span class=\"hljs-subst\">{name}<\/span>'<\/span>\n\n\ngreeting = say_hi(<span class=\"hljs-number\">123<\/span>)\nprint(greeting)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/playground\/?q=ZGVmIHNheV9oaShuYW1lOiBzdHIpIC0%2BIHN0cjoKICAgIHJldHVybiBmJ0hpIHtuYW1lfScKCgpncmVldGluZyA9IHNheV9oaSgxMjMpCnByaW50KGdyZWV0aW5nKQ%3D%3D\" target=\"_blank\" rel=\"noreferrer noopener\">Try it<\/a><\/p>\n\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Hi <span class=\"hljs-number\">123<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To check the syntax for type hints, you need to use a static type checker tool.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='using-a-static-type-checker-tool-mypy'>Using a static type checker tool: mypy <a href=\"#using-a-static-type-checker-tool-mypy\" class=\"anchor\" id=\"using-a-static-type-checker-tool-mypy\" title=\"Anchor for Using a static type checker tool: mypy\">#<\/a><\/h2>\n\n\n\n<p>Python doesn&#8217;t have an official static type checker tool. At the moment, the most popular third-party tool is Mypy. Since Mypy is a third-party package, you need to install it using the following <code>pip<\/code> command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">pip instal mypy<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Once installed <code>mypy<\/code>, you can use it to check the type before running the program by using the following command:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">mypy app.py<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It&#8217;ll show the following message:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">app.py:<span class=\"hljs-number\">5<\/span>: error: Argument <span class=\"hljs-number\">1<\/span> to <span class=\"hljs-string\">\"say_hi\"<\/span> has incompatible type <span class=\"hljs-string\">\"int\"<\/span>; expected <span class=\"hljs-string\">\"str\"<\/span>\nFound <span class=\"hljs-number\">1<\/span> error <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-number\">1<\/span> file (checked <span class=\"hljs-number\">1<\/span> source file)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The error indicates that the argument of the <code>say_hi<\/code> is <code>int<\/code> while the expected type is <code>str<\/code>.<\/p>\n\n\n\n<p>If you change back the argument to a string and run the <code>mypy<\/code> again, it&#8217;ll show a success message:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">Success: no issues found <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-number\">1<\/span> source file<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='type-hinting-type-inference'>Type hinting &amp; type inference <a href=\"#type-hinting-type-inference\" class=\"anchor\" id=\"type-hinting-type-inference\" title=\"Anchor for Type hinting &amp; type inference\">#<\/a><\/h2>\n\n\n\n<p>When defining a variable, you can add a type hint like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">name: str = <span class=\"hljs-string\">'John'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The type of  <code>name<\/code> variable is <code>str<\/code>. If you assign a value that is not a string to the <code>name<\/code> variable, the static type checker will issue an error. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">name: str = <span class=\"hljs-string\">'Hello'<\/span>\nname = <span class=\"hljs-number\">100<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">app.py:<span class=\"hljs-number\">2<\/span>: error: Incompatible types <span class=\"hljs-keyword\">in<\/span> assignment (expression has type <span class=\"hljs-string\">\"int\"<\/span>, variable has type <span class=\"hljs-string\">\"str\"<\/span>)\nFound <span class=\"hljs-number\">1<\/span> error <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-number\">1<\/span> file (checked <span class=\"hljs-number\">1<\/span> source file)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Adding a type to a variable is unnecessary because static type checkers typically can infer the type based on the value assigned to the variable.<\/p>\n\n\n\n<p>In this example, the value of the name is a literal string so that the static type checker will infer the type of the name variable as str. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">name = <span class=\"hljs-string\">'Hello'<\/span>\nname = <span class=\"hljs-number\">100<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>It&#8217;ll issue the same error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">app.py:<span class=\"hljs-number\">2<\/span>: error: Incompatible types <span class=\"hljs-keyword\">in<\/span> assignment (expression has type <span class=\"hljs-string\">\"int\"<\/span>, variable has type <span class=\"hljs-string\">\"str\"<\/span>)\nFound <span class=\"hljs-number\">1<\/span> error <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-number\">1<\/span> file (checked <span class=\"hljs-number\">1<\/span> source file)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='adding-type-hints-for-multiple-types'>Adding type hints for multiple types <a href=\"#adding-type-hints-for-multiple-types\" class=\"anchor\" id=\"adding-type-hints-for-multiple-types\" title=\"Anchor for Adding type hints for multiple types\">#<\/a><\/h2>\n\n\n\n<p>The following <code>add()<\/code> function returns the sum of two numbers:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x, y)<\/span>:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> x + y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The numbers can be integers or floats. You can use the module to set type hints for multiple types.<\/p>\n\n\n\n<p>First, import <code>Union<\/code> from <code>typing<\/code> module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Union<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, use the <code>Union<\/code> to create a union type that includes <code>int<\/code> and <code>float<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x: Union&#91;int, float], y: Union&#91;int, float])<\/span> -&gt; Union&#91;int, float]:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> x + y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Here is the complete source code:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Union\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x: Union&#91;int, float], y: Union&#91;int, float])<\/span> -&gt; Union&#91;int, float]:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> x + y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Starting from Python 3.10, you can use the X | Y  syntax to create a union type, for example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x: int | float, y: int | float)<\/span> -&gt; int | float:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> x + y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='type-aliases'>Type aliases <a href=\"#type-aliases\" class=\"anchor\" id=\"type-aliases\" title=\"Anchor for Type aliases\">#<\/a><\/h2>\n\n\n\n<p>Python allows you to assign an alias to a type and use the alias for type hintings. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Union\n\nnumber = Union&#91;int, float]\n\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">add<\/span><span class=\"hljs-params\">(x: number, y: number)<\/span> -&gt; number:<\/span>\n    <span class=\"hljs-keyword\">return<\/span> x + y<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, we assign the <code>Union[int, float]<\/code> type an alias <code>Number<\/code> and use the <code>Number<\/code> alias in the add() function.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='adding-type-hints-for-lists-dictionaries-and-sets'>Adding type hints for lists, dictionaries, and sets <a href=\"#adding-type-hints-for-lists-dictionaries-and-sets\" class=\"anchor\" id=\"adding-type-hints-for-lists-dictionaries-and-sets\" title=\"Anchor for Adding type hints for lists, dictionaries, and sets\">#<\/a><\/h2>\n\n\n\n<p>You can use the following built-in types to set the type hints for a <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-list\/\">list<\/a>, <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-dictionary\/\">dictionary<\/a>, and <a href=\"https:\/\/www.pythontutorial.net\/python-basics\/python-set\/\">set<\/a>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>list<\/li>\n\n\n\n<li>dict<\/li>\n\n\n\n<li>set<\/li>\n<\/ul>\n\n\n\n<p>If you type hints in a variable as a list but later assign a dictionary to it, you&#8217;ll get an error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">ratings: list = &#91;<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>]\nratings = {<span class=\"hljs-number\">1<\/span>: <span class=\"hljs-string\">'Bad'<\/span>, <span class=\"hljs-number\">2<\/span>: <span class=\"hljs-string\">'average'<\/span>, <span class=\"hljs-number\">3<\/span>: <span class=\"hljs-string\">'Good'<\/span>}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\">app.py:<span class=\"hljs-number\">3<\/span>: error: Incompatible types <span class=\"hljs-keyword\">in<\/span> assignment (expression has type <span class=\"hljs-string\">\"Dict&#91;int, str]\"<\/span>, variable has type <span class=\"hljs-string\">\"List&#91;Any]\"<\/span>)\nFound <span class=\"hljs-number\">1<\/span> error <span class=\"hljs-keyword\">in<\/span> <span class=\"hljs-number\">1<\/span> file (checked <span class=\"hljs-number\">1<\/span> source file)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>To specify the types of values in the list, dictionary, and sets, you can use type aliases from the typing module:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Type Alias<\/th><th>Built-in Type<\/th><\/tr><\/thead><tbody><tr><td>List<\/td><td>list<\/td><\/tr><tr><td>Tuple<\/td><td>tuple<\/td><\/tr><tr><td>Dict<\/td><td>dict<\/td><\/tr><tr><td>Set<\/td><td>set<\/td><\/tr><tr><td>Frozenset<\/td><td>frozenset<\/td><\/tr><tr><td>Sequence<\/td><td>For list, tuple, and any other sequence data type. <\/td><\/tr><tr><td>Mapping<\/td><td>For dictionary (dict), set, frozenset, and any other mapping data type <\/td><\/tr><tr><td>ByteString  <\/td><td> bytes, bytearray, and memoryview types. <\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>For example, the following defines a list of integers:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> List\n\nratings: List&#91;int] = &#91;<span class=\"hljs-number\">1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">3<\/span>]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='none-type'>None type <a href=\"#none-type\" class=\"anchor\" id=\"none-type\" title=\"Anchor for None type\">#<\/a><\/h2>\n\n\n\n<p>If a function doesn&#8217;t explicitly return a value, you can use None to type hint the return value. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">log<\/span><span class=\"hljs-params\">(message: str)<\/span> -&gt; <span class=\"hljs-keyword\">None<\/span>:<\/span>\n    print(message)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='literal-types'>Literal Types <a href=\"#literal-types\" class=\"anchor\" id=\"literal-types\" title=\"Anchor for Literal Types\">#<\/a><\/h2>\n\n\n\n<p>If you want to allow a variable or function parameter to accepts a specific list of literal values, you can use types. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Literal\n\ndef set_mode(mode: Literal&#91;<span class=\"hljs-string\">'read'<\/span>, <span class=\"hljs-string\">'write'<\/span>]) -&gt; None:\n    print(f<span class=\"hljs-string\">\"Setting mode to {mode}\"<\/span>)\n\nset_mode(<span class=\"hljs-string\">'write'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works:<\/p>\n\n\n\n<p>First, import the <code>Literal<\/code> form the typing module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Literal<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, define the <code>set_mode<\/code> function that accepts a parameter mode with the type <code>Literal<\/code>. The mode can accepts only one of two string literal <code>'read'<\/code> or <code>'write'<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">mode<\/span>: <span class=\"hljs-selector-tag\">Literal<\/span><span class=\"hljs-selector-attr\">&#91;<span class=\"hljs-string\">'read'<\/span>, <span class=\"hljs-string\">'write'<\/span>]<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Third, call the <code>set_mode<\/code> function and pass the <code>'write'<\/code> argument:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">set_mode(<span class=\"hljs-string\">'write'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you run <code>mypy<\/code> command, it&#8217;ll show output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\"><span class=\"hljs-attribute\">Success<\/span>: no issues found in 1 source file<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If you change the argument to a value that is not <code>'read'<\/code> or <code>'write'<\/code>, <code>mypy<\/code> will issue an error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">set_mode(<span class=\"hljs-string\">'execute'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">main<\/span><span class=\"hljs-selector-class\">.py<\/span><span class=\"hljs-selector-pseudo\">:8<\/span>: <span class=\"hljs-selector-tag\">error<\/span>: <span class=\"hljs-selector-tag\">Argument<\/span> 1 <span class=\"hljs-selector-tag\">to<\/span> \"<span class=\"hljs-selector-tag\">set_mode<\/span>\" <span class=\"hljs-selector-tag\">has<\/span> <span class=\"hljs-selector-tag\">incompatible<\/span> <span class=\"hljs-selector-tag\">type<\/span> \"<span class=\"hljs-selector-tag\">Literal<\/span><span class=\"hljs-selector-attr\">&#91;<span class=\"hljs-string\">'execute'<\/span>]<\/span>\"; <span class=\"hljs-selector-tag\">expected<\/span> \"<span class=\"hljs-selector-tag\">Literal<\/span><span class=\"hljs-selector-attr\">&#91;<span class=\"hljs-string\">'read'<\/span>, <span class=\"hljs-string\">'write'<\/span>]<\/span>\"  <span class=\"hljs-selector-attr\">&#91;arg-type]<\/span>\n<span class=\"hljs-selector-tag\">Found<\/span> 1 <span class=\"hljs-selector-tag\">error<\/span> <span class=\"hljs-selector-tag\">in<\/span> 1 <span class=\"hljs-selector-tag\">file<\/span> (<span class=\"hljs-selector-tag\">checked<\/span> 1 <span class=\"hljs-selector-tag\">source<\/span> <span class=\"hljs-selector-tag\">file<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='final-variables'>Final variables <a href=\"#final-variables\" class=\"anchor\" id=\"final-variables\" title=\"Anchor for Final variables\">#<\/a><\/h2>\n\n\n\n<p>You can assign a value to a final variable once. If you assign it a value again, you&#8217;ll encounter an error. Final variables help you prevent accidental modification of constants. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from typing import <span class=\"hljs-keyword\">Final<\/span>\n\nHTTPS : <span class=\"hljs-keyword\">Final<\/span>&#91;bool] = <span class=\"hljs-keyword\">True<\/span>\n\n<span class=\"hljs-keyword\">print<\/span>(HTTPS )<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>How it works.<\/p>\n\n\n\n<p>First, import <code>Final<\/code> from the <code>typing<\/code> module:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> typing <span class=\"hljs-keyword\">import<\/span> Final<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Second, define a constant <code>HTTPS<\/code> with the type <code>Final[bool]<\/code> and set its value to True:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">HTTPS : <span class=\"hljs-keyword\">Final<\/span>&#91;bool] = <span class=\"hljs-keyword\">True<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Besides <code>bool<\/code>, you can use other built-in type like <code>int<\/code>, <code>float<\/code>, <code>string<\/code>, etc., to store final values of various types.<\/p>\n\n\n\n<p>Third, show the value of the <code>HTTPS<\/code>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">print<\/span>(HTTPS)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The <code>mypy<\/code> will flag the program as success.<\/p>\n\n\n\n<p>If you attempt to change the <code>HTTPS<\/code> to <code>false<\/code>, the type checker (<code>mypy<\/code>) will flag the assignment as an error.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">from typing import <span class=\"hljs-keyword\">Final<\/span>\n\nHTTPS : <span class=\"hljs-keyword\">Final<\/span>&#91;bool] = <span class=\"hljs-keyword\">True<\/span>\nHTTPS = <span class=\"hljs-keyword\">False<\/span> <span class=\"hljs-comment\"># error<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Error:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">main<\/span><span class=\"hljs-selector-class\">.py<\/span><span class=\"hljs-selector-pseudo\">:4<\/span>: <span class=\"hljs-selector-tag\">error<\/span>: <span class=\"hljs-selector-tag\">Cannot<\/span> <span class=\"hljs-selector-tag\">assign<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-tag\">final<\/span> <span class=\"hljs-selector-tag\">name<\/span> \"<span class=\"hljs-selector-tag\">HTTPS<\/span>\"  <span class=\"hljs-selector-attr\">&#91;misc]<\/span>\n<span class=\"hljs-selector-tag\">Found<\/span> 1 <span class=\"hljs-selector-tag\">error<\/span> <span class=\"hljs-selector-tag\">in<\/span> 1 <span class=\"hljs-selector-tag\">file<\/span> (<span class=\"hljs-selector-tag\">checked<\/span> 1 <span class=\"hljs-selector-tag\">source<\/span> <span class=\"hljs-selector-tag\">file<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use type hints and static type checker tools to make your code more robust.<\/li>\n<\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"2816\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-basics\/python-type-hints\/\"\n\t\t\t\tdata-post-title=\"Python Type Hints\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"2816\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-basics\/python-type-hints\/\"\n\t\t\t\tdata-post-title=\"Python Type Hints\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summary: in this tutorial, you&#8217;ll learn about the Python type hints and how to use the mypy tool to check types statically. Introduction to Python type hints # Some programming languages have static typing, such as C\/C++. It means you need to declare types of variables, parameters, and return values of a function upfront. The [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":37,"menu_order":56,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2816","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2816","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=2816"}],"version-history":[{"count":4,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2816\/revisions"}],"predecessor-version":[{"id":7379,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/2816\/revisions\/7379"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/37"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=2816"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}