dev-notes/languages/python/python.html

8121 lines
No EOL
362 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="author" content="Marcello Lamonaca">
<link rel="canonical" href="http://m-lamonaca.github.io/dev-notes/languages/python/python.html">
<link rel="prev" href="../assembly/riscv.html">
<link rel="next" href="modules/argparse.html">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.34">
<title>Python - Dev Notes</title>
<link rel="stylesheet" href="../../assets/stylesheets/main.35f28582.min.css">
<link rel="stylesheet" href="../../assets/stylesheets/palette.06af60db.min.css">
<script src="https://unpkg.com/iframe-worker/shim"></script>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<meta property="og:type" content="website" >
<meta property="og:title" content="Python - Dev Notes" >
<meta property="og:description" content="None" >
<meta property="og:image" content="http://m-lamonaca.github.io/dev-notes/assets/images/social/languages/python/python.png" >
<meta property="og:image:type" content="image/png" >
<meta property="og:image:width" content="1200" >
<meta property="og:image:height" content="630" >
<meta property="og:url" content="http://m-lamonaca.github.io/dev-notes/languages/python/python.html" >
<meta name="twitter:card" content="summary_large_image" >
<meta name="twitter:title" content="Python - Dev Notes" >
<meta name="twitter:description" content="None" >
<meta name="twitter:image" content="http://m-lamonaca.github.io/dev-notes/assets/images/social/languages/python/python.png" >
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="deep-orange">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#python-notes" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow md-header--lifted" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href="../../index.html" title="Dev Notes" class="md-header__button md-logo" aria-label="Dev Notes" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6m80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3l89.3 89.4-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3"/></svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Dev Notes
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Python
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="orange" data-md-color-accent="deep-orange" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="orange" data-md-color-accent="deep-orange" aria-label="Switch to light mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12s-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12z"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/m-lamonaca/dev-notes" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
</nav>
<nav class="md-tabs" aria-label="Tabs" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item">
<a href="../../index.html" class="md-tabs__link">
Home
</a>
</li>
<li class="md-tabs__item">
<a href="../../containers/docker.html" class="md-tabs__link">
Containers
</a>
</li>
<li class="md-tabs__item">
<a href="../../databases/redis.html" class="md-tabs__link">
Databases
</a>
</li>
<li class="md-tabs__item md-tabs__item--active">
<a href="../html/html.html" class="md-tabs__link">
Languages
</a>
</li>
<li class="md-tabs__item">
<a href="../../misc/git.html" class="md-tabs__link">
Misc
</a>
</li>
<li class="md-tabs__item">
<a href="../../linux/filesystem/file-links.html" class="md-tabs__link">
Linux
</a>
</li>
</ul>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../index.html" title="Dev Notes" class="md-nav__button md-logo" aria-label="Dev Notes" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M392.8 1.2c-17-4.9-34.7 5-39.6 22l-128 448c-4.9 17 5 34.7 22 39.6s34.7-5 39.6-22l128-448c4.9-17-5-34.7-22-39.6m80.6 120.1c-12.5 12.5-12.5 32.8 0 45.3l89.3 89.4-89.4 89.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l112-112c12.5-12.5 12.5-32.8 0-45.3l-112-112c-12.5-12.5-32.8-12.5-45.3 0zm-306.7 0c-12.5-12.5-32.8-12.5-45.3 0l-112 112c-12.5 12.5-12.5 32.8 0 45.3l112 112c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L77.3 256l89.4-89.4c12.5-12.5 12.5-32.8 0-45.3"/></svg>
</a>
Dev Notes
</label>
<div class="md-nav__source">
<a href="https://github.com/m-lamonaca/dev-notes" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
</div>
<div class="md-source__repository">
GitHub
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../index.html" class="md-nav__link">
<span class="md-ellipsis">
Home
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
Containers
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
Containers
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../containers/docker.html" class="md-nav__link">
<span class="md-ellipsis">
Docker
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../containers/kubernetes.html" class="md-nav__link">
<span class="md-ellipsis">
Kubernetes
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" >
<label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
<span class="md-ellipsis">
Databases
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_3">
<span class="md-nav__icon md-icon"></span>
Databases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../databases/redis.html" class="md-nav__link">
<span class="md-ellipsis">
Redis
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../databases/sql.html" class="md-nav__link">
<span class="md-ellipsis">
SQL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../databases/mongo-db.html" class="md-nav__link">
<span class="md-ellipsis">
MongoDB
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="">
<span class="md-ellipsis">
Languages
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Languages
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../html/html.html" class="md-nav__link">
<span class="md-ellipsis">
HTML
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../markdown.html" class="md-nav__link">
<span class="md-ellipsis">
Markdown
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../css/css.html" class="md-nav__link">
<span class="md-ellipsis">
CSS
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../c/c.html" class="md-nav__link">
<span class="md-ellipsis">
C
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../kotlin/kotlin.html" class="md-nav__link">
<span class="md-ellipsis">
Kotlin
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../swift/swift.html" class="md-nav__link">
<span class="md-ellipsis">
Swift
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_7" >
<label class="md-nav__link" for="__nav_4_7" id="__nav_4_7_label" tabindex="">
<span class="md-ellipsis">
Assembly
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_7">
<span class="md-nav__icon md-icon"></span>
Assembly
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../assembly/intel.html" class="md-nav__link">
<span class="md-ellipsis">
Intel
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../assembly/riscv.html" class="md-nav__link">
<span class="md-ellipsis">
RISC-V
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_8" checked>
<label class="md-nav__link" for="__nav_4_8" id="__nav_4_8_label" tabindex="">
<span class="md-ellipsis">
Python
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_8_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4_8">
<span class="md-nav__icon md-icon"></span>
Python
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
Python
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="python.html" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
Python
</span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#basics" class="md-nav__link">
<span class="md-ellipsis">
Basics
</span>
</a>
<nav class="md-nav" aria-label="Basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#naming-convention" class="md-nav__link">
<span class="md-ellipsis">
Naming Convention
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assignment-operation" class="md-nav__link">
<span class="md-ellipsis">
Assignment Operation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variable-type-conversion" class="md-nav__link">
<span class="md-ellipsis">
Variable Type Conversion
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#expression-assignment" class="md-nav__link">
<span class="md-ellipsis">
Expression Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variable-comparison-vs-is" class="md-nav__link">
<span class="md-ellipsis">
Variable Comparison (== vs is)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#on-screen-output" class="md-nav__link">
<span class="md-ellipsis">
On Screen Output
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#format-specification-mini-language" class="md-nav__link">
<span class="md-ellipsis">
Format Specification Mini-Language
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#keyboard-input" class="md-nav__link">
<span class="md-ellipsis">
Keyboard Input
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#numeric-types" class="md-nav__link">
<span class="md-ellipsis">
Numeric Types
</span>
</a>
<nav class="md-nav" aria-label="Numeric Types">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#comparison-of-decimal-numbers" class="md-nav__link">
<span class="md-ellipsis">
Comparison of Decimal Numbers
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#strings" class="md-nav__link">
<span class="md-ellipsis">
Strings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lists" class="md-nav__link">
<span class="md-ellipsis">
Lists
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tuple" class="md-nav__link">
<span class="md-ellipsis">
Tuple
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set" class="md-nav__link">
<span class="md-ellipsis">
Set
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bytes-e-bytearray" class="md-nav__link">
<span class="md-ellipsis">
Bytes e Bytearray
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#encoding-decoding-unicode" class="md-nav__link">
<span class="md-ellipsis">
Encoding-Decoding &amp; Unicode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#memoryview" class="md-nav__link">
<span class="md-ellipsis">
Memoryview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dictionaries" class="md-nav__link">
<span class="md-ellipsis">
Dictionaries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operators" class="md-nav__link">
<span class="md-ellipsis">
Operators
</span>
</a>
<nav class="md-nav" aria-label="Operators">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mathematical-operators" class="md-nav__link">
<span class="md-ellipsis">
Mathematical Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#relational-operators" class="md-nav__link">
<span class="md-ellipsis">
Relational Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assignment" class="md-nav__link">
<span class="md-ellipsis">
Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bitwise-operators" class="md-nav__link">
<span class="md-ellipsis">
Bitwise Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#logical-operators" class="md-nav__link">
<span class="md-ellipsis">
Logical Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#identity-operators" class="md-nav__link">
<span class="md-ellipsis">
Identity Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#membership-operators" class="md-nav__link">
<span class="md-ellipsis">
Membership Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operator-precedence" class="md-nav__link">
<span class="md-ellipsis">
OPerator Precedence
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#conditional-statements" class="md-nav__link">
<span class="md-ellipsis">
Conditional Statements
</span>
</a>
<nav class="md-nav" aria-label="Conditional Statements">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#if-else" class="md-nav__link">
<span class="md-ellipsis">
if-else
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#context-manager" class="md-nav__link">
<span class="md-ellipsis">
Context Manager
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#loops" class="md-nav__link">
<span class="md-ellipsis">
Loops
</span>
</a>
<nav class="md-nav" aria-label="Loops">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#while" class="md-nav__link">
<span class="md-ellipsis">
while
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#for" class="md-nav__link">
<span class="md-ellipsis">
for
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#break-continue" class="md-nav__link">
<span class="md-ellipsis">
break &amp; continue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#range" class="md-nav__link">
<span class="md-ellipsis">
range
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enumerate" class="md-nav__link">
<span class="md-ellipsis">
enumerate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zip" class="md-nav__link">
<span class="md-ellipsis">
zip
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#shuffle-randint" class="md-nav__link">
<span class="md-ellipsis">
shuffle &amp; randint
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#in" class="md-nav__link">
<span class="md-ellipsis">
in
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#function-definition" class="md-nav__link">
<span class="md-ellipsis">
Function Definition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#specify-type-parameters-in-functions" class="md-nav__link">
<span class="md-ellipsis">
Specify Type Parameters In Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#docstring-style" class="md-nav__link">
<span class="md-ellipsis">
Docstring Style
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#args-kwargs" class="md-nav__link">
<span class="md-ellipsis">
args *kwargs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#function-with-default-parameters" class="md-nav__link">
<span class="md-ellipsis">
Function with default parameters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#global-and-local-variables" class="md-nav__link">
<span class="md-ellipsis">
Global And Local Variables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#iterables-iterators-generators" class="md-nav__link">
<span class="md-ellipsis">
Iterables, Iterators &amp; Generators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#next-iter" class="md-nav__link">
<span class="md-ellipsis">
next() &amp; iter()
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#customs-generators" class="md-nav__link">
<span class="md-ellipsis">
Customs Generators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#termination-generator-and-exception-handling" class="md-nav__link">
<span class="md-ellipsis">
Termination Generator And Exception Handling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generator-comprehensions" class="md-nav__link">
<span class="md-ellipsis">
Generator Comprehensions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#coroutines" class="md-nav__link">
<span class="md-ellipsis">
Coroutines
</span>
</a>
<nav class="md-nav" aria-label="Coroutines">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#yield-from-iterabile" class="md-nav__link">
<span class="md-ellipsis">
yield from &lt;iterabile&gt;
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lambda-functions" class="md-nav__link">
<span class="md-ellipsis">
LAMBDA Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#object-oriented-programming" class="md-nav__link">
<span class="md-ellipsis">
Object Oriented Programming
</span>
</a>
<nav class="md-nav" aria-label="Object Oriented Programming">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#class-definition" class="md-nav__link">
<span class="md-ellipsis">
Class Definition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setter-getter-with-property" class="md-nav__link">
<span class="md-ellipsis">
Setter &amp; Getter with @Property
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#__slots__" class="md-nav__link">
<span class="md-ellipsis">
__slots__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#inner-classes" class="md-nav__link">
<span class="md-ellipsis">
Inner Classes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#special-methods" class="md-nav__link">
<span class="md-ellipsis">
Special Methods
</span>
</a>
<nav class="md-nav" aria-label="Special Methods">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#special-methods-list" class="md-nav__link">
<span class="md-ellipsis">
Special Methods List
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#inheritance" class="md-nav__link">
<span class="md-ellipsis">
Inheritance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#polymorphism" class="md-nav__link">
<span class="md-ellipsis">
Polymorphism
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operator-overloading" class="md-nav__link">
<span class="md-ellipsis">
Operator Overloading
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#astrazione" class="md-nav__link">
<span class="md-ellipsis">
Astrazione
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#exception-handling" class="md-nav__link">
<span class="md-ellipsis">
Exception Handling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#file" class="md-nav__link">
<span class="md-ellipsis">
File
</span>
</a>
<nav class="md-nav" aria-label="File">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#opening-a-file" class="md-nav__link">
<span class="md-ellipsis">
Opening A File
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#copy" class="md-nav__link">
<span class="md-ellipsis">
COPY
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_8_2" >
<label class="md-nav__link" for="__nav_4_8_2" id="__nav_4_8_2_label" tabindex="0">
<span class="md-ellipsis">
Modules
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_8_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_8_2">
<span class="md-nav__icon md-icon"></span>
Modules
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="modules/argparse.html" class="md-nav__link">
<span class="md-ellipsis">
argparse
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/collections.html" class="md-nav__link">
<span class="md-ellipsis">
collection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/csv.html" class="md-nav__link">
<span class="md-ellipsis">
csv
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/ftplib.html" class="md-nav__link">
<span class="md-ellipsis">
ftplib
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/itertools.html" class="md-nav__link">
<span class="md-ellipsis">
itertools
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/json.html" class="md-nav__link">
<span class="md-ellipsis">
json
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/logging.html" class="md-nav__link">
<span class="md-ellipsis">
logging
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/shutil.html" class="md-nav__link">
<span class="md-ellipsis">
shutil
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/smtplib.html" class="md-nav__link">
<span class="md-ellipsis">
smtplib
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/socket.html" class="md-nav__link">
<span class="md-ellipsis">
socket
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/sqlite.html" class="md-nav__link">
<span class="md-ellipsis">
sqlite
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/time-datetime.html" class="md-nav__link">
<span class="md-ellipsis">
time & datetime
</span>
</a>
</li>
<li class="md-nav__item">
<a href="modules/unittest.html" class="md-nav__link">
<span class="md-ellipsis">
unittest
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_8_3" >
<label class="md-nav__link" for="__nav_4_8_3" id="__nav_4_8_3_label" tabindex="0">
<span class="md-ellipsis">
Libraries
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_8_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_8_3">
<span class="md-nav__icon md-icon"></span>
Libraries
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="libs/tkinter.html" class="md-nav__link">
<span class="md-ellipsis">
TKinter
</span>
</a>
</li>
<li class="md-nav__item">
<a href="libs/numpy.html" class="md-nav__link">
<span class="md-ellipsis">
Numpy
</span>
</a>
</li>
<li class="md-nav__item">
<a href="libs/pandas.html" class="md-nav__link">
<span class="md-ellipsis">
Pandas
</span>
</a>
</li>
<li class="md-nav__item">
<a href="libs/seaborn.html" class="md-nav__link">
<span class="md-ellipsis">
Seaborn
</span>
</a>
</li>
<li class="md-nav__item">
<a href="libs/requests.html" class="md-nav__link">
<span class="md-ellipsis">
Requests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="libs/beautiful-soup.html" class="md-nav__link">
<span class="md-ellipsis">
Beatiful Soup
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_9" >
<label class="md-nav__link" for="__nav_4_9" id="__nav_4_9_label" tabindex="">
<span class="md-ellipsis">
.NET
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_9">
<span class="md-nav__icon md-icon"></span>
.NET
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_9_1" >
<label class="md-nav__link" for="__nav_4_9_1" id="__nav_4_9_1_label" tabindex="0">
<span class="md-ellipsis">
C#
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_9_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_9_1">
<span class="md-nav__icon md-icon"></span>
C#
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dotnet/csharp/csharp.html" class="md-nav__link">
<span class="md-ellipsis">
C#
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/csharp/linq.html" class="md-nav__link">
<span class="md-ellipsis">
Linq
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/csharp/collections.html" class="md-nav__link">
<span class="md-ellipsis">
Collections
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/csharp/reactive-extensions.html" class="md-nav__link">
<span class="md-ellipsis">
Reactive Extensions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/csharp/async-programming.html" class="md-nav__link">
<span class="md-ellipsis">
Async Programming
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/csharp/unit-tests.html" class="md-nav__link">
<span class="md-ellipsis">
Unit Tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_9_2" >
<label class="md-nav__link" for="__nav_4_9_2" id="__nav_4_9_2_label" tabindex="0">
<span class="md-ellipsis">
ASP.NET
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_9_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_9_2">
<span class="md-nav__icon md-icon"></span>
ASP.NET
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dotnet/asp.net/minimal-api.html" class="md-nav__link">
<span class="md-ellipsis">
Minimal API
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/filters.html" class="md-nav__link">
<span class="md-ellipsis">
FIlters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/middleware.html" class="md-nav__link">
<span class="md-ellipsis">
Middleware
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/razor-syntax.html" class="md-nav__link">
<span class="md-ellipsis">
Razor Syntax
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/blazor.html" class="md-nav__link">
<span class="md-ellipsis">
Blazor
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/signalr.html" class="md-nav__link">
<span class="md-ellipsis">
SignalR
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/asp.net/web-forms.html" class="md-nav__link">
<span class="md-ellipsis">
Web Forms
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_9_3" >
<label class="md-nav__link" for="__nav_4_9_3" id="__nav_4_9_3_label" tabindex="0">
<span class="md-ellipsis">
Database
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_9_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_9_3">
<span class="md-nav__icon md-icon"></span>
Database
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../dotnet/database/ado.net.html" class="md-nav__link">
<span class="md-ellipsis">
ADO.NET
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../dotnet/database/entity-framework.html" class="md-nav__link">
<span class="md-ellipsis">
Entity Framework
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_10" >
<label class="md-nav__link" for="__nav_4_10" id="__nav_4_10_label" tabindex="">
<span class="md-ellipsis">
Java
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_10_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_10">
<span class="md-nav__icon md-icon"></span>
Java
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../java/java.html" class="md-nav__link">
<span class="md-ellipsis">
Java
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java/java-collection-framework.html" class="md-nav__link">
<span class="md-ellipsis">
Java Collection Framework
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java/dao.html" class="md-nav__link">
<span class="md-ellipsis">
DAO
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_10_4" >
<label class="md-nav__link" for="__nav_4_10_4" id="__nav_4_10_4_label" tabindex="0">
<span class="md-ellipsis">
Web
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_10_4_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_10_4">
<span class="md-nav__icon md-icon"></span>
Web
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../java/web/servlet.html" class="md-nav__link">
<span class="md-ellipsis">
Serverlet
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_10_4_2" >
<label class="md-nav__link" for="__nav_4_10_4_2" id="__nav_4_10_4_2_label" tabindex="0">
<span class="md-ellipsis">
Spring
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="4" aria-labelledby="__nav_4_10_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_10_4_2">
<span class="md-nav__icon md-icon"></span>
Spring
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../java/spring/pom.xml.html" class="md-nav__link">
<span class="md-ellipsis">
POM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../java/spring/spring-project.html" class="md-nav__link">
<span class="md-ellipsis">
Project Structure
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_11" >
<label class="md-nav__link" for="__nav_4_11" id="__nav_4_11_label" tabindex="">
<span class="md-ellipsis">
PHP
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_11_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_11">
<span class="md-nav__icon md-icon"></span>
PHP
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../php/php.html" class="md-nav__link">
<span class="md-ellipsis">
PHP
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/database.html" class="md-nav__link">
<span class="md-ellipsis">
Database
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/web.html" class="md-nav__link">
<span class="md-ellipsis">
Web
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/dependency-injection.html" class="md-nav__link">
<span class="md-ellipsis">
Dependency Injection
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/unit-tests.html" class="md-nav__link">
<span class="md-ellipsis">
Unit Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/composer.html" class="md-nav__link">
<span class="md-ellipsis">
Composer
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/psr-7.html" class="md-nav__link">
<span class="md-ellipsis">
PSR 7
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/plates-templating.html" class="md-nav__link">
<span class="md-ellipsis">
Plates
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_11_9" >
<label class="md-nav__link" for="__nav_4_11_9" id="__nav_4_11_9_label" tabindex="0">
<span class="md-ellipsis">
Simple MVC
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_11_9_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_11_9">
<span class="md-nav__icon md-icon"></span>
Simple MVC
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../php/simple-mvc/simple-mvc.html" class="md-nav__link">
<span class="md-ellipsis">
Simple MVC
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../php/simple-mvc/rest-api.html" class="md-nav__link">
<span class="md-ellipsis">
REST API
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_12" >
<label class="md-nav__link" for="__nav_4_12" id="__nav_4_12_label" tabindex="">
<span class="md-ellipsis">
Rust
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_12_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_12">
<span class="md-nav__icon md-icon"></span>
Rust
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../rust/rust.html" class="md-nav__link">
<span class="md-ellipsis">
Rust
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust/macros.html" class="md-nav__link">
<span class="md-ellipsis">
Macros
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust/cargo.html" class="md-nav__link">
<span class="md-ellipsis">
Cargo
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust/concurrency.html" class="md-nav__link">
<span class="md-ellipsis">
Concurrency
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../rust/unit-tests.html" class="md-nav__link">
<span class="md-ellipsis">
Unit Tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_13" >
<label class="md-nav__link" for="__nav_4_13" id="__nav_4_13_label" tabindex="">
<span class="md-ellipsis">
Javascript
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_13_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_13">
<span class="md-nav__icon md-icon"></span>
Javascript
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../javascript/javascript.html" class="md-nav__link">
<span class="md-ellipsis">
Javascript
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/dom.html" class="md-nav__link">
<span class="md-ellipsis">
DOM
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/events-animation.html" class="md-nav__link">
<span class="md-ellipsis">
Events & Animation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/ajax.html" class="md-nav__link">
<span class="md-ellipsis">
AJAX
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/jquery.html" class="md-nav__link">
<span class="md-ellipsis">
jQuery
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_13_6" >
<label class="md-nav__link" for="__nav_4_13_6" id="__nav_4_13_6_label" tabindex="0">
<span class="md-ellipsis">
React
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="3" aria-labelledby="__nav_4_13_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_13_6">
<span class="md-nav__icon md-icon"></span>
React
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../javascript/react/react.html" class="md-nav__link">
<span class="md-ellipsis">
React
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/react/react-router.html" class="md-nav__link">
<span class="md-ellipsis">
React Router
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/react/react-tests.html" class="md-nav__link">
<span class="md-ellipsis">
React Tests
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/react/redux.html" class="md-nav__link">
<span class="md-ellipsis">
Redux
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../javascript/react/redux-tests.html" class="md-nav__link">
<span class="md-ellipsis">
Redux Tests
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../javascript/svelte/svelte.html" class="md-nav__link">
<span class="md-ellipsis">
Svelte
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_14" >
<label class="md-nav__link" for="__nav_4_14" id="__nav_4_14_label" tabindex="">
<span class="md-ellipsis">
PowerShell
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_14_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_14">
<span class="md-nav__icon md-icon"></span>
PowerShell
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../powershell/scripting.html" class="md-nav__link">
<span class="md-ellipsis">
Scripting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../powershell/commands.html" class="md-nav__link">
<span class="md-ellipsis">
Commands
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_15" >
<label class="md-nav__link" for="__nav_4_15" id="__nav_4_15_label" tabindex="">
<span class="md-ellipsis">
Bash
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_15_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_15">
<span class="md-nav__icon md-icon"></span>
Bash
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../bash/scripting.html" class="md-nav__link">
<span class="md-ellipsis">
Scripting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../bash/commands.html" class="md-nav__link">
<span class="md-ellipsis">
Commands
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-ellipsis">
Misc
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
Misc
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../misc/git.html" class="md-nav__link">
<span class="md-ellipsis">
Git
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../misc/graph-ql.html" class="md-nav__link">
<span class="md-ellipsis">
GraphQL
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../misc/regular-expressions.html" class="md-nav__link">
<span class="md-ellipsis">
RegEx
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../misc/ssh.html" class="md-nav__link">
<span class="md-ellipsis">
SSH
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../misc/web-components.html" class="md-nav__link">
<span class="md-ellipsis">
WebComponents
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
Linux
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
Linux
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_1" >
<label class="md-nav__link" for="__nav_6_1" id="__nav_6_1_label" tabindex="0">
<span class="md-ellipsis">
Filesystem
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_1">
<span class="md-nav__icon md-icon"></span>
Filesystem
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../linux/filesystem/file-links.html" class="md-nav__link">
<span class="md-ellipsis">
File Links
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../linux/filesystem/procfs.html" class="md-nav__link">
<span class="md-ellipsis">
/proc
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../linux/filesystem/sysfs.html" class="md-nav__link">
<span class="md-ellipsis">
/sys
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_6_2" >
<label class="md-nav__link" for="__nav_6_2" id="__nav_6_2_label" tabindex="0">
<span class="md-ellipsis">
System Init
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_6_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6_2">
<span class="md-nav__icon md-icon"></span>
System Init
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../linux/init/systemd.html" class="md-nav__link">
<span class="md-ellipsis">
Systemd
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../linux/init/open-rc.html" class="md-nav__link">
<span class="md-ellipsis">
OpenRC
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#basics" class="md-nav__link">
<span class="md-ellipsis">
Basics
</span>
</a>
<nav class="md-nav" aria-label="Basics">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#naming-convention" class="md-nav__link">
<span class="md-ellipsis">
Naming Convention
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assignment-operation" class="md-nav__link">
<span class="md-ellipsis">
Assignment Operation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variable-type-conversion" class="md-nav__link">
<span class="md-ellipsis">
Variable Type Conversion
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#expression-assignment" class="md-nav__link">
<span class="md-ellipsis">
Expression Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#variable-comparison-vs-is" class="md-nav__link">
<span class="md-ellipsis">
Variable Comparison (== vs is)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#on-screen-output" class="md-nav__link">
<span class="md-ellipsis">
On Screen Output
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#format-specification-mini-language" class="md-nav__link">
<span class="md-ellipsis">
Format Specification Mini-Language
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#keyboard-input" class="md-nav__link">
<span class="md-ellipsis">
Keyboard Input
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#numeric-types" class="md-nav__link">
<span class="md-ellipsis">
Numeric Types
</span>
</a>
<nav class="md-nav" aria-label="Numeric Types">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#comparison-of-decimal-numbers" class="md-nav__link">
<span class="md-ellipsis">
Comparison of Decimal Numbers
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#strings" class="md-nav__link">
<span class="md-ellipsis">
Strings
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#lists" class="md-nav__link">
<span class="md-ellipsis">
Lists
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#tuple" class="md-nav__link">
<span class="md-ellipsis">
Tuple
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#set" class="md-nav__link">
<span class="md-ellipsis">
Set
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bytes-e-bytearray" class="md-nav__link">
<span class="md-ellipsis">
Bytes e Bytearray
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#encoding-decoding-unicode" class="md-nav__link">
<span class="md-ellipsis">
Encoding-Decoding &amp; Unicode
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#memoryview" class="md-nav__link">
<span class="md-ellipsis">
Memoryview
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#dictionaries" class="md-nav__link">
<span class="md-ellipsis">
Dictionaries
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operators" class="md-nav__link">
<span class="md-ellipsis">
Operators
</span>
</a>
<nav class="md-nav" aria-label="Operators">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#mathematical-operators" class="md-nav__link">
<span class="md-ellipsis">
Mathematical Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#relational-operators" class="md-nav__link">
<span class="md-ellipsis">
Relational Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#assignment" class="md-nav__link">
<span class="md-ellipsis">
Assignment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#bitwise-operators" class="md-nav__link">
<span class="md-ellipsis">
Bitwise Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#logical-operators" class="md-nav__link">
<span class="md-ellipsis">
Logical Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#identity-operators" class="md-nav__link">
<span class="md-ellipsis">
Identity Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#membership-operators" class="md-nav__link">
<span class="md-ellipsis">
Membership Operators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operator-precedence" class="md-nav__link">
<span class="md-ellipsis">
OPerator Precedence
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#conditional-statements" class="md-nav__link">
<span class="md-ellipsis">
Conditional Statements
</span>
</a>
<nav class="md-nav" aria-label="Conditional Statements">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#if-else" class="md-nav__link">
<span class="md-ellipsis">
if-else
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#context-manager" class="md-nav__link">
<span class="md-ellipsis">
Context Manager
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#loops" class="md-nav__link">
<span class="md-ellipsis">
Loops
</span>
</a>
<nav class="md-nav" aria-label="Loops">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#while" class="md-nav__link">
<span class="md-ellipsis">
while
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#for" class="md-nav__link">
<span class="md-ellipsis">
for
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#break-continue" class="md-nav__link">
<span class="md-ellipsis">
break &amp; continue
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#range" class="md-nav__link">
<span class="md-ellipsis">
range
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#enumerate" class="md-nav__link">
<span class="md-ellipsis">
enumerate
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#zip" class="md-nav__link">
<span class="md-ellipsis">
zip
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#shuffle-randint" class="md-nav__link">
<span class="md-ellipsis">
shuffle &amp; randint
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#in" class="md-nav__link">
<span class="md-ellipsis">
in
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#functions" class="md-nav__link">
<span class="md-ellipsis">
Functions
</span>
</a>
<nav class="md-nav" aria-label="Functions">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#function-definition" class="md-nav__link">
<span class="md-ellipsis">
Function Definition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#specify-type-parameters-in-functions" class="md-nav__link">
<span class="md-ellipsis">
Specify Type Parameters In Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#docstring-style" class="md-nav__link">
<span class="md-ellipsis">
Docstring Style
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#args-kwargs" class="md-nav__link">
<span class="md-ellipsis">
args *kwargs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#function-with-default-parameters" class="md-nav__link">
<span class="md-ellipsis">
Function with default parameters
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#global-and-local-variables" class="md-nav__link">
<span class="md-ellipsis">
Global And Local Variables
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#iterables-iterators-generators" class="md-nav__link">
<span class="md-ellipsis">
Iterables, Iterators &amp; Generators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#next-iter" class="md-nav__link">
<span class="md-ellipsis">
next() &amp; iter()
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#customs-generators" class="md-nav__link">
<span class="md-ellipsis">
Customs Generators
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#termination-generator-and-exception-handling" class="md-nav__link">
<span class="md-ellipsis">
Termination Generator And Exception Handling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#generator-comprehensions" class="md-nav__link">
<span class="md-ellipsis">
Generator Comprehensions
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#coroutines" class="md-nav__link">
<span class="md-ellipsis">
Coroutines
</span>
</a>
<nav class="md-nav" aria-label="Coroutines">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#yield-from-iterabile" class="md-nav__link">
<span class="md-ellipsis">
yield from &lt;iterabile&gt;
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#lambda-functions" class="md-nav__link">
<span class="md-ellipsis">
LAMBDA Functions
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#object-oriented-programming" class="md-nav__link">
<span class="md-ellipsis">
Object Oriented Programming
</span>
</a>
<nav class="md-nav" aria-label="Object Oriented Programming">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#class-definition" class="md-nav__link">
<span class="md-ellipsis">
Class Definition
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#setter-getter-with-property" class="md-nav__link">
<span class="md-ellipsis">
Setter &amp; Getter with @Property
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#__slots__" class="md-nav__link">
<span class="md-ellipsis">
__slots__
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#inner-classes" class="md-nav__link">
<span class="md-ellipsis">
Inner Classes
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#special-methods" class="md-nav__link">
<span class="md-ellipsis">
Special Methods
</span>
</a>
<nav class="md-nav" aria-label="Special Methods">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#special-methods-list" class="md-nav__link">
<span class="md-ellipsis">
Special Methods List
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#inheritance" class="md-nav__link">
<span class="md-ellipsis">
Inheritance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#polymorphism" class="md-nav__link">
<span class="md-ellipsis">
Polymorphism
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#operator-overloading" class="md-nav__link">
<span class="md-ellipsis">
Operator Overloading
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#astrazione" class="md-nav__link">
<span class="md-ellipsis">
Astrazione
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#exception-handling" class="md-nav__link">
<span class="md-ellipsis">
Exception Handling
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#file" class="md-nav__link">
<span class="md-ellipsis">
File
</span>
</a>
<nav class="md-nav" aria-label="File">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#opening-a-file" class="md-nav__link">
<span class="md-ellipsis">
Opening A File
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#copy" class="md-nav__link">
<span class="md-ellipsis">
COPY
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1 id="python-notes">Python Notes</h1>
<h2 id="basics">Basics</h2>
<h3 id="naming-convention">Naming Convention</h3>
<p>Class -&gt; PascalCase<br />
Method, Function -&gt; snake_case<br />
Variable -&gt; snake_case</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-0-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-0-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-0-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-0-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-0-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-0-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-0-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-0-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-0-10">10</a></span>
<span class="normal"><a href="#__codelineno-0-11">11</a></span>
<span class="normal"><a href="#__codelineno-0-12">12</a></span>
<span class="normal"><a href="#__codelineno-0-13">13</a></span>
<span class="normal"><a href="#__codelineno-0-14">14</a></span>
<span class="normal"><a href="#__codelineno-0-15">15</a></span>
<span class="normal"><a href="#__codelineno-0-16">16</a></span>
<span class="normal"><a href="#__codelineno-0-17">17</a></span>
<span class="normal"><a href="#__codelineno-0-18">18</a></span>
<span class="normal"><a href="#__codelineno-0-19">19</a></span>
<span class="normal"><a href="#__codelineno-0-20">20</a></span>
<span class="normal"><a href="#__codelineno-0-21">21</a></span>
<span class="normal"><a href="#__codelineno-0-22">22</a></span>
<span class="normal"><a href="#__codelineno-0-23">23</a></span>
<span class="normal"><a href="#__codelineno-0-24">24</a></span>
<span class="normal"><a href="#__codelineno-0-25">25</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="c1"># standard comment</span>
<a id="__codelineno-0-2" name="__codelineno-0-2"></a><span class="sd">&#39;&#39;&#39;multiline comment&#39;&#39;&#39;</span>
<a id="__codelineno-0-3" name="__codelineno-0-3"></a><span class="sd">&quot;&quot;&quot;DOCSTRING&quot;&quot;&quot;</span>
<a id="__codelineno-0-4" name="__codelineno-0-4"></a>
<a id="__codelineno-0-5" name="__codelineno-0-5"></a><span class="n">help</span><span class="p">(</span><span class="nb">object</span><span class="o">.</span><span class="n">method</span><span class="p">)</span> <span class="c1"># return method explanation</span>
<a id="__codelineno-0-6" name="__codelineno-0-6"></a><span class="nb">dir</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="c1"># return an alphabetized list of names comprising (some of) the attributes of the given object</span>
<a id="__codelineno-0-7" name="__codelineno-0-7"></a>
<a id="__codelineno-0-8" name="__codelineno-0-8"></a><span class="kn">import</span> <span class="nn">sys</span> <span class="c1"># import module</span>
<a id="__codelineno-0-9" name="__codelineno-0-9"></a><span class="kn">from</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="n">argv</span> <span class="c1"># import single item from a module</span>
<a id="__codelineno-0-10" name="__codelineno-0-10"></a><span class="kn">from</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="o">*</span> <span class="c1"># import all elements of a module (no module syntax.method needed)</span>
<a id="__codelineno-0-11" name="__codelineno-0-11"></a><span class="kn">import</span> <span class="nn">sys</span> <span class="k">as</span> <span class="nn">alias</span> <span class="c1"># import the module with an alias, I use alias.method</span>
<a id="__codelineno-0-12" name="__codelineno-0-12"></a>
<a id="__codelineno-0-13" name="__codelineno-0-13"></a><span class="c1"># CHARACTER SET</span>
<a id="__codelineno-0-14" name="__codelineno-0-14"></a><span class="kn">import</span> <span class="nn">string</span>
<a id="__codelineno-0-15" name="__codelineno-0-15"></a><span class="n">string</span><span class="o">.</span><span class="n">ascii_lowercase</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyz&#39;</span>
<a id="__codelineno-0-16" name="__codelineno-0-16"></a><span class="n">string</span><span class="o">.</span><span class="n">asci_uppercase</span> <span class="o">=</span> <span class="s1">&#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;</span>
<a id="__codelineno-0-17" name="__codelineno-0-17"></a><span class="n">string</span><span class="o">.</span><span class="n">asci_letters</span> <span class="o">=</span> <span class="s1">&#39;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;</span>
<a id="__codelineno-0-18" name="__codelineno-0-18"></a><span class="n">string</span><span class="o">.</span><span class="n">digits</span> <span class="o">=</span> <span class="s1">&#39;0123456789&#39;</span>
<a id="__codelineno-0-19" name="__codelineno-0-19"></a><span class="n">string</span><span class="o">.</span><span class="n">hexdigits</span> <span class="o">=</span> <span class="s1">&#39;0123456789abcdefABCDEF&#39;</span>
<a id="__codelineno-0-20" name="__codelineno-0-20"></a><span class="n">string</span><span class="o">.</span><span class="n">octdigits</span> <span class="o">=</span> <span class="s1">&#39;01234567&#39;</span>
<a id="__codelineno-0-21" name="__codelineno-0-21"></a><span class="n">string</span><span class="o">.</span><span class="n">punctuation</span>
<a id="__codelineno-0-22" name="__codelineno-0-22"></a><span class="n">string</span><span class="o">.</span><span class="n">whitespace</span>
<a id="__codelineno-0-23" name="__codelineno-0-23"></a>
<a id="__codelineno-0-24" name="__codelineno-0-24"></a><span class="c1"># SPECIAL CHARACTERS</span>
<a id="__codelineno-0-25" name="__codelineno-0-25"></a><span class="c1"># (\a, \b, \f, \n, \r, \t, \u, \U, \v, \x, \\)</span>
</code></pre></div></td></tr></table></div>
<h3 id="assignment-operation">Assignment Operation</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1">1</a></span>
<span class="normal"><a href="#__codelineno-1-2">2</a></span>
<span class="normal"><a href="#__codelineno-1-3">3</a></span>
<span class="normal"><a href="#__codelineno-1-4">4</a></span>
<span class="normal"><a href="#__codelineno-1-5">5</a></span>
<span class="normal"><a href="#__codelineno-1-6">6</a></span>
<span class="normal"><a href="#__codelineno-1-7">7</a></span>
<span class="normal"><a href="#__codelineno-1-8">8</a></span>
<span class="normal"><a href="#__codelineno-1-9">9</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="sd">&quot;&quot;&quot;instructions to the right of = executed before instructions to the left of =&quot;&quot;&quot;</span>
<a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="n">variable</span> <span class="o">=</span> <span class="n">expression</span> <span class="c1"># the type of the variable is dynamically decided by python based on the content</span>
<a id="__codelineno-1-3" name="__codelineno-1-3"></a><span class="n">var_1</span><span class="p">,</span> <span class="n">var_2</span> <span class="o">=</span> <span class="n">value1</span><span class="p">,</span> <span class="n">value2</span> <span class="c1"># parallel assignment</span>
<a id="__codelineno-1-4" name="__codelineno-1-4"></a><span class="n">var_1</span><span class="p">,</span> <span class="n">var_2</span> <span class="o">=</span> <span class="n">var_2</span><span class="p">,</span> <span class="n">var_1</span> <span class="c1"># swap values</span>
<a id="__codelineno-1-5" name="__codelineno-1-5"></a>
<a id="__codelineno-1-6" name="__codelineno-1-6"></a><span class="c1"># conditional assignment</span>
<a id="__codelineno-1-7" name="__codelineno-1-7"></a><span class="n">x</span> <span class="o">=</span> <span class="n">a</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">b</span>
<a id="__codelineno-1-8" name="__codelineno-1-8"></a><span class="n">x</span> <span class="o">=</span> <span class="n">a</span> <span class="ow">or</span> <span class="n">b</span> <span class="c1"># If bool (a) returns False, then x is assigned the value of b</span>
<a id="__codelineno-1-9" name="__codelineno-1-9"></a><span class="c1"># a series of OR expressions has the effect of returning the first item that evaluates True, or the last item (last item should be a literal).</span>
</code></pre></div></td></tr></table></div>
<h3 id="variable-type-conversion">Variable Type Conversion</h3>
<p><code>type(expression)</code></p>
<h3 id="expression-assignment">Expression Assignment</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-2-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1"></a><span class="p">(</span><span class="n">var</span><span class="p">:</span> <span class="o">=</span> <span class="n">expression</span><span class="p">)</span> <span class="c1"># assign an expression to a variable to avoid repeating the expression</span>
</code></pre></div></td></tr></table></div>
<h3 id="variable-comparison-vs-is">Variable Comparison (<code>==</code> vs <code>is</code>)</h3>
<p><code>==</code> compares the values of objects
<code>is</code> compares the identities of objects</p>
<h3 id="on-screen-output">On Screen Output</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-3-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-3-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-3-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-3-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-3-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-3-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-3-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-3-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-3-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-3-10">10</a></span>
<span class="normal"><a href="#__codelineno-3-11">11</a></span>
<span class="normal"><a href="#__codelineno-3-12">12</a></span>
<span class="normal"><a href="#__codelineno-3-13">13</a></span>
<span class="normal"><a href="#__codelineno-3-14">14</a></span>
<span class="normal"><a href="#__codelineno-3-15">15</a></span>
<span class="normal"><a href="#__codelineno-3-16">16</a></span>
<span class="normal"><a href="#__codelineno-3-17">17</a></span>
<span class="normal"><a href="#__codelineno-3-18">18</a></span>
<span class="normal"><a href="#__codelineno-3-19">19</a></span>
<span class="normal"><a href="#__codelineno-3-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1"></a><span class="nb">print</span><span class="p">()</span> <span class="c1"># print blank line and wrap</span>
<a id="__codelineno-3-2" name="__codelineno-3-2"></a><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;string&#39;</span> <span class="o">*</span> <span class="n">n</span><span class="p">)</span> <span class="c1"># print string n times</span>
<a id="__codelineno-3-3" name="__codelineno-3-3"></a><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;string1 \ n string2&#39;</span><span class="p">)</span> <span class="c1"># wrap with \ n</span>
<a id="__codelineno-3-4" name="__codelineno-3-4"></a><span class="nb">print</span><span class="p">(</span><span class="n">variable</span><span class="p">)</span> <span class="c1"># print variable content</span>
<a id="__codelineno-3-5" name="__codelineno-3-5"></a><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;string&#39;</span><span class="p">,</span> <span class="n">end</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="c1"># print without wrapping</span>
<a id="__codelineno-3-6" name="__codelineno-3-6"></a>
<a id="__codelineno-3-7" name="__codelineno-3-7"></a><span class="c1"># FORMATTING</span>
<a id="__codelineno-3-8" name="__codelineno-3-8"></a><span class="n">name</span> <span class="o">=</span> <span class="s1">&#39;Alex&#39;</span>
<a id="__codelineno-3-9" name="__codelineno-3-9"></a><span class="n">marks</span> <span class="o">=</span> <span class="mf">94.5</span>
<a id="__codelineno-3-10" name="__codelineno-3-10"></a><span class="nb">print</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">marks</span><span class="p">)</span>
<a id="__codelineno-3-11" name="__codelineno-3-11"></a><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Name is&#39;</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="s1">&#39;\ nMarks are&#39;</span><span class="p">,</span> <span class="n">marks</span><span class="p">)</span>
<a id="__codelineno-3-12" name="__codelineno-3-12"></a><span class="c1"># expand the rest of the expression and write tense before = in output</span>
<a id="__codelineno-3-13" name="__codelineno-3-13"></a><span class="nb">print</span><span class="p">(</span><span class="n">f</span> <span class="s1">&#39;{name =}, {marks =}&#39;</span><span class="p">)</span> <span class="c1"># OUTPUT: name = Alex, marks = 94.5</span>
<a id="__codelineno-3-14" name="__codelineno-3-14"></a>
<a id="__codelineno-3-15" name="__codelineno-3-15"></a><span class="c1"># USE OF PLACEHOLDERS</span>
<a id="__codelineno-3-16" name="__codelineno-3-16"></a><span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Name is</span><span class="si">% s</span><span class="s1">, Marks are</span><span class="si">% 3.2f</span><span class="s1">&#39;</span><span class="o">%</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">marks</span><span class="p">))</span> <span class="c1"># method inherited from C. Variable is substituted for% ..</span>
<a id="__codelineno-3-17" name="__codelineno-3-17"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Name is </span><span class="si">{}</span><span class="s2">, Marks are </span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span> <span class="nb">format</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">marks</span><span class="p">))</span>
<a id="__codelineno-3-18" name="__codelineno-3-18"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Name is </span><span class="si">{1}</span><span class="s2">, Marks are </span><span class="si">{2}</span><span class="s2">&quot;</span><span class="o">.</span> <span class="nb">format</span><span class="p">(</span><span class="n">marks</span><span class="p">,</span> <span class="n">name</span><span class="p">))</span> <span class="c1"># indices in brackets sort elements in .format</span>
<a id="__codelineno-3-19" name="__codelineno-3-19"></a><span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Name is </span><span class="si">{n}</span><span class="s2">, Marks are </span><span class="si">{m}</span><span class="s2">&quot;</span><span class="o">.</span> <span class="nb">format</span><span class="p">(</span><span class="n">m</span> <span class="o">=</span> <span class="s1">&#39;94 .5 &#39;</span><span class="p">,</span> <span class="n">n</span> <span class="o">=</span><span class="s1">&#39; Alex &#39;</span><span class="p">))</span> <span class="c1"># indices in brackets sort elements in .format</span>
<a id="__codelineno-3-20" name="__codelineno-3-20"></a><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Name is </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s1">, Marks are </span><span class="si">{</span><span class="n">marks</span><span class="si">}</span><span class="s1"> &#39;</span><span class="p">)</span> <span class="c1"># formatting with f-strings</span>
</code></pre></div></td></tr></table></div>
<h3 id="format-specification-mini-language">Format Specification Mini-Language</h3>
<p><code>{value:width.precision symbol}</code></p>
<p>Format: <code>[[fill]align] [sign] [#] [width] [grouping] [.precision] [type]</code></p>
<table>
<thead>
<tr>
<th><code>[align]</code></th>
<th>Alignment</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>:&lt;</code></td>
<td>left alignment</td>
</tr>
<tr>
<td><code>:&gt;</code></td>
<td>right alignment</td>
</tr>
<tr>
<td><code>:=</code></td>
<td>padding after the mark</td>
</tr>
<tr>
<td><code>:^</code></td>
<td>centered</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th><code>[sign]</code></th>
<th>NUMBER SIGNS</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>:+</code></td>
<td>sign for both positive and negative numbers</td>
</tr>
<tr>
<td><code>:-</code></td>
<td>sign only for negative numbers</td>
</tr>
<tr>
<td><code>:</code></td>
<td>space for num &gt; 0, '-' for num &lt; 0</td>
</tr>
<tr>
<td><code>:#</code></td>
<td>alternative form:prefix integers type (0x, 0b, 0o), floats and complexes always have at least one decimal place</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th><code>[grouping]</code></th>
<th>GROUPING</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>:,</code></td>
<td>use comma to separate thousands</td>
</tr>
<tr>
<td><code>:_</code></td>
<td>use underscore to separate thousands</td>
</tr>
</tbody>
</table>
<table>
<thead>
<tr>
<th><code>[type]</code></th>
<th>OUTPUT TYPE</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>:s</code></td>
<td>output is string</td>
</tr>
<tr>
<td><code>:b</code></td>
<td>output is binary</td>
</tr>
<tr>
<td><code>:c</code></td>
<td>output is character</td>
</tr>
<tr>
<td><code>:d</code></td>
<td>output is a decimal integer (base 10)</td>
</tr>
<tr>
<td><code>:or</code></td>
<td>output is octal integer (base 8)</td>
</tr>
<tr>
<td><code>:x</code></td>
<td>output is hexadecimal integer (base 16)</td>
</tr>
<tr>
<td><code>:X</code></td>
<td>output is hexadecimal integer (base 16) with uppercase</td>
</tr>
<tr>
<td><code>:e</code></td>
<td>output is exponential notation (6-digit base precision)</td>
</tr>
<tr>
<td><code>:E</code></td>
<td>output is exponential notation (6-digit base precision) uppercase separator</td>
</tr>
<tr>
<td><code>:f</code></td>
<td>output is float (6-digit base precision)</td>
</tr>
<tr>
<td><code>:%</code></td>
<td>output is percentage (multiplies * 100, displays as:f)</td>
</tr>
</tbody>
</table>
<h3 id="keyboard-input">Keyboard Input</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-4-1">1</a></span>
<span class="normal"><a href="#__codelineno-4-2">2</a></span>
<span class="normal"><a href="#__codelineno-4-3">3</a></span>
<span class="normal"><a href="#__codelineno-4-4">4</a></span>
<span class="normal"><a href="#__codelineno-4-5">5</a></span>
<span class="normal"><a href="#__codelineno-4-6">6</a></span>
<span class="normal"><a href="#__codelineno-4-7">7</a></span>
<span class="normal"><a href="#__codelineno-4-8">8</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="c1"># input always returns a STRING</span>
<a id="__codelineno-4-2" name="__codelineno-4-2"></a><span class="n">s</span> <span class="o">=</span> <span class="nb">input</span><span class="p">()</span> <span class="c1"># input request without message</span>
<a id="__codelineno-4-3" name="__codelineno-4-3"></a><span class="n">s</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s1">&#39;Prompt&#39;</span><span class="p">)</span> <span class="c1"># request input</span>
<a id="__codelineno-4-4" name="__codelineno-4-4"></a><span class="n">i</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">input</span><span class="p">(</span><span class="s1">&#39;prompt&#39;</span><span class="p">))</span> <span class="c1"># request input with type conversion</span>
<a id="__codelineno-4-5" name="__codelineno-4-5"></a>
<a id="__codelineno-4-6" name="__codelineno-4-6"></a><span class="c1"># MULTIPLE INPUTS</span>
<a id="__codelineno-4-7" name="__codelineno-4-7"></a><span class="nb">list</span> <span class="o">=</span> <span class="p">[</span><span class="nb">int</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">input</span><span class="p">(</span><span class="s1">&#39;prompt&#39;</span><span class="p">)</span><span class="o">.</span> <span class="n">split</span><span class="p">(</span><span class="s1">&#39;separator&#39;</span><span class="p">)]</span>
<a id="__codelineno-4-8" name="__codelineno-4-8"></a><span class="c1"># save multiple inputs in a list(.split separates values and defines separator</span>
</code></pre></div></td></tr></table></div>
<h2 id="numeric-types">Numeric Types</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-5-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-5-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-5-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-5-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-5-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-5-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-5-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-5-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-5-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-5-10">10</a></span>
<span class="normal"><a href="#__codelineno-5-11">11</a></span>
<span class="normal"><a href="#__codelineno-5-12">12</a></span>
<span class="normal"><a href="#__codelineno-5-13">13</a></span>
<span class="normal"><a href="#__codelineno-5-14">14</a></span>
<span class="normal"><a href="#__codelineno-5-15">15</a></span>
<span class="normal"><a href="#__codelineno-5-16">16</a></span>
<span class="normal"><a href="#__codelineno-5-17">17</a></span>
<span class="normal"><a href="#__codelineno-5-18">18</a></span>
<span class="normal"><a href="#__codelineno-5-19">19</a></span>
<span class="normal"><a href="#__codelineno-5-20">20</a></span>
<span class="normal"><a href="#__codelineno-5-21">21</a></span>
<span class="normal"><a href="#__codelineno-5-22">22</a></span>
<span class="normal"><a href="#__codelineno-5-23">23</a></span>
<span class="normal"><a href="#__codelineno-5-24">24</a></span>
<span class="normal"><a href="#__codelineno-5-25">25</a></span>
<span class="normal"><a href="#__codelineno-5-26">26</a></span>
<span class="normal"><a href="#__codelineno-5-27">27</a></span>
<span class="normal"><a href="#__codelineno-5-28">28</a></span>
<span class="normal"><a href="#__codelineno-5-29">29</a></span>
<span class="normal"><a href="#__codelineno-5-30">30</a></span>
<span class="normal"><a href="#__codelineno-5-31">31</a></span>
<span class="normal"><a href="#__codelineno-5-32">32</a></span>
<span class="normal"><a href="#__codelineno-5-33">33</a></span>
<span class="normal"><a href="#__codelineno-5-34">34</a></span>
<span class="normal"><a href="#__codelineno-5-35">35</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="n">a</span> <span class="o">=</span> <span class="mi">77</span>
<a id="__codelineno-5-2" name="__codelineno-5-2"></a><span class="n">b</span> <span class="o">=</span> <span class="mi">1_000_000</span> <span class="c1"># underscore can be used to separate groups of digits</span>
<a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="n">c</span> <span class="o">=</span> <span class="o">-</span><span class="mi">69</span>
<a id="__codelineno-5-4" name="__codelineno-5-4"></a>
<a id="__codelineno-5-5" name="__codelineno-5-5"></a><span class="c1"># float numbers</span>
<a id="__codelineno-5-6" name="__codelineno-5-6"></a><span class="n">x</span> <span class="o">=</span> <span class="mf">3.15</span>
<a id="__codelineno-5-7" name="__codelineno-5-7"></a><span class="n">y</span> <span class="o">=</span> <span class="mf">2.71</span>
<a id="__codelineno-5-8" name="__codelineno-5-8"></a><span class="n">z</span> <span class="o">=</span> <span class="mf">25.0</span>
<a id="__codelineno-5-9" name="__codelineno-5-9"></a>
<a id="__codelineno-5-10" name="__codelineno-5-10"></a><span class="n">d</span> <span class="o">=</span> <span class="mi">6</span> <span class="o">+</span> <span class="mi">9</span><span class="n">j</span> <span class="c1"># complex number</span>
<a id="__codelineno-5-11" name="__codelineno-5-11"></a><span class="c1"># returns a complex number starting with two reals</span>
<a id="__codelineno-5-12" name="__codelineno-5-12"></a><span class="nb">complex</span><span class="p">(</span><span class="n">real</span><span class="p">,</span> <span class="n">imag</span><span class="p">)</span> <span class="c1"># -&gt; complex #(real + imag * 1j)</span>
<a id="__codelineno-5-13" name="__codelineno-5-13"></a>
<a id="__codelineno-5-14" name="__codelineno-5-14"></a><span class="n">e</span> <span class="o">=</span> <span class="mb">0B1101</span> <span class="c1"># BINARY TYPE(0B ...)</span>
<a id="__codelineno-5-15" name="__codelineno-5-15"></a><span class="n">f</span> <span class="o">=</span> <span class="mh">0xFF</span> <span class="c1"># EXADECIMAL TYPE(0X ...)</span>
<a id="__codelineno-5-16" name="__codelineno-5-16"></a><span class="n">o</span> <span class="o">=</span> <span class="mo">0o77</span> <span class="c1"># OCTAL TYPE</span>
<a id="__codelineno-5-17" name="__codelineno-5-17"></a><span class="n">g</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># BOOLEAN TYPE</span>
<a id="__codelineno-5-18" name="__codelineno-5-18"></a>
<a id="__codelineno-5-19" name="__codelineno-5-19"></a><span class="c1"># VARIABLE TYPE CONVERSION</span>
<a id="__codelineno-5-20" name="__codelineno-5-20"></a><span class="n">h</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
<a id="__codelineno-5-21" name="__codelineno-5-21"></a><span class="n">i</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="s1">&#39;22 .5 &#39;</span><span class="p">)</span>
<a id="__codelineno-5-22" name="__codelineno-5-22"></a>
<a id="__codelineno-5-23" name="__codelineno-5-23"></a><span class="c1"># NUMERIC BASIC CONVERSION</span>
<a id="__codelineno-5-24" name="__codelineno-5-24"></a><span class="nb">bin</span><span class="p">(</span><span class="mi">3616544</span><span class="p">)</span>
<a id="__codelineno-5-25" name="__codelineno-5-25"></a><span class="nb">hex</span><span class="p">(</span><span class="mi">589</span><span class="p">)</span>
<a id="__codelineno-5-26" name="__codelineno-5-26"></a><span class="nb">oct</span><span class="p">(</span><span class="mi">265846</span><span class="p">)</span>
<a id="__codelineno-5-27" name="__codelineno-5-27"></a>
<a id="__codelineno-5-28" name="__codelineno-5-28"></a><span class="c1"># UNICODE CONVERSION</span>
<a id="__codelineno-5-29" name="__codelineno-5-29"></a><span class="nb">ord</span><span class="p">(</span><span class="n">c</span><span class="p">)</span> <span class="c1"># Given a string representing one Unicode character, return an integer representing the Unicode code point of that character</span>
<a id="__codelineno-5-30" name="__codelineno-5-30"></a><span class="nb">chr</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="c1"># Return the string representing a character whose Unicode code point is the integer i</span>
<a id="__codelineno-5-31" name="__codelineno-5-31"></a>
<a id="__codelineno-5-32" name="__codelineno-5-32"></a>
<a id="__codelineno-5-33" name="__codelineno-5-33"></a><span class="nb">pow</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="c1"># x ^ y</span>
<a id="__codelineno-5-34" name="__codelineno-5-34"></a><span class="nb">abs</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="c1"># returns absolute value of num(| num |)</span>
<a id="__codelineno-5-35" name="__codelineno-5-35"></a><span class="nb">round</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">precision</span><span class="p">)</span> <span class="c1"># rounds number to given precision, does not convert float to int</span>
</code></pre></div></td></tr></table></div>
<h3 id="comparison-of-decimal-numbers">Comparison of Decimal Numbers</h3>
<p>Do not use <code>==</code> or <code>! =</code> To compare floating point numbers. They are approximations or have several digits.
It is worth checking if the difference between the numbers is small enough.</p>
<h2 id="strings">Strings</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-6-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-6-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-6-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-6-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-6-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-6-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-6-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-6-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-6-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-6-10">10</a></span>
<span class="normal"><a href="#__codelineno-6-11">11</a></span>
<span class="normal"><a href="#__codelineno-6-12">12</a></span>
<span class="normal"><a href="#__codelineno-6-13">13</a></span>
<span class="normal"><a href="#__codelineno-6-14">14</a></span>
<span class="normal"><a href="#__codelineno-6-15">15</a></span>
<span class="normal"><a href="#__codelineno-6-16">16</a></span>
<span class="normal"><a href="#__codelineno-6-17">17</a></span>
<span class="normal"><a href="#__codelineno-6-18">18</a></span>
<span class="normal"><a href="#__codelineno-6-19">19</a></span>
<span class="normal"><a href="#__codelineno-6-20">20</a></span>
<span class="normal"><a href="#__codelineno-6-21">21</a></span>
<span class="normal"><a href="#__codelineno-6-22">22</a></span>
<span class="normal"><a href="#__codelineno-6-23">23</a></span>
<span class="normal"><a href="#__codelineno-6-24">24</a></span>
<span class="normal"><a href="#__codelineno-6-25">25</a></span>
<span class="normal"><a href="#__codelineno-6-26">26</a></span>
<span class="normal"><a href="#__codelineno-6-27">27</a></span>
<span class="normal"><a href="#__codelineno-6-28">28</a></span>
<span class="normal"><a href="#__codelineno-6-29">29</a></span>
<span class="normal"><a href="#__codelineno-6-30">30</a></span>
<span class="normal"><a href="#__codelineno-6-31">31</a></span>
<span class="normal"><a href="#__codelineno-6-32">32</a></span>
<span class="normal"><a href="#__codelineno-6-33">33</a></span>
<span class="normal"><a href="#__codelineno-6-34">34</a></span>
<span class="normal"><a href="#__codelineno-6-35">35</a></span>
<span class="normal"><a href="#__codelineno-6-36">36</a></span>
<span class="normal"><a href="#__codelineno-6-37">37</a></span>
<span class="normal"><a href="#__codelineno-6-38">38</a></span>
<span class="normal"><a href="#__codelineno-6-39">39</a></span>
<span class="normal"><a href="#__codelineno-6-40">40</a></span>
<span class="normal"><a href="#__codelineno-6-41">41</a></span>
<span class="normal"><a href="#__codelineno-6-42">42</a></span>
<span class="normal"><a href="#__codelineno-6-43">43</a></span>
<span class="normal"><a href="#__codelineno-6-44">44</a></span>
<span class="normal"><a href="#__codelineno-6-45">45</a></span>
<span class="normal"><a href="#__codelineno-6-46">46</a></span>
<span class="normal"><a href="#__codelineno-6-47">47</a></span>
<span class="normal"><a href="#__codelineno-6-48">48</a></span>
<span class="normal"><a href="#__codelineno-6-49">49</a></span>
<span class="normal"><a href="#__codelineno-6-50">50</a></span>
<span class="normal"><a href="#__codelineno-6-51">51</a></span>
<span class="normal"><a href="#__codelineno-6-52">52</a></span>
<span class="normal"><a href="#__codelineno-6-53">53</a></span>
<span class="normal"><a href="#__codelineno-6-54">54</a></span>
<span class="normal"><a href="#__codelineno-6-55">55</a></span>
<span class="normal"><a href="#__codelineno-6-56">56</a></span>
<span class="normal"><a href="#__codelineno-6-57">57</a></span>
<span class="normal"><a href="#__codelineno-6-58">58</a></span>
<span class="normal"><a href="#__codelineno-6-59">59</a></span>
<span class="normal"><a href="#__codelineno-6-60">60</a></span>
<span class="normal"><a href="#__codelineno-6-61">61</a></span>
<span class="normal"><a href="#__codelineno-6-62">62</a></span>
<span class="normal"><a href="#__codelineno-6-63">63</a></span>
<span class="normal"><a href="#__codelineno-6-64">64</a></span>
<span class="normal"><a href="#__codelineno-6-65">65</a></span>
<span class="normal"><a href="#__codelineno-6-66">66</a></span>
<span class="normal"><a href="#__codelineno-6-67">67</a></span>
<span class="normal"><a href="#__codelineno-6-68">68</a></span>
<span class="normal"><a href="#__codelineno-6-69">69</a></span>
<span class="normal"><a href="#__codelineno-6-70">70</a></span>
<span class="normal"><a href="#__codelineno-6-71">71</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="n">string</span> <span class="o">=</span> <span class="s1">&#39;string content&#39;</span> <span class="c1"># assignment and creation of string variable</span>
<a id="__codelineno-6-2" name="__codelineno-6-2"></a><span class="n">string</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;multi</span>
<a id="__codelineno-6-3" name="__codelineno-6-3"></a><span class="s1">line</span>
<a id="__codelineno-6-4" name="__codelineno-6-4"></a><span class="s1">string&#39;&#39;&#39;</span>
<a id="__codelineno-6-5" name="__codelineno-6-5"></a>
<a id="__codelineno-6-6" name="__codelineno-6-6"></a><span class="n">string3</span> <span class="o">=</span> <span class="n">string1</span> <span class="o">+</span> <span class="n">string2</span> <span class="c1"># string concatenation(operator polymorphism +)</span>
<a id="__codelineno-6-7" name="__codelineno-6-7"></a>
<a id="__codelineno-6-8" name="__codelineno-6-8"></a><span class="c1"># INDEXING(selection of a character in the string)</span>
<a id="__codelineno-6-9" name="__codelineno-6-9"></a><span class="n">string</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<a id="__codelineno-6-10" name="__codelineno-6-10"></a><span class="n">string</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<a id="__codelineno-6-11" name="__codelineno-6-11"></a><span class="n">string</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">]</span> <span class="c1"># selection starting from the bottom(negative index)</span>
<a id="__codelineno-6-12" name="__codelineno-6-12"></a>
<a id="__codelineno-6-13" name="__codelineno-6-13"></a><span class="c1"># REPETITION (repeat string output)</span>
<a id="__codelineno-6-14" name="__codelineno-6-14"></a><span class="nb">print</span><span class="p">(</span><span class="n">string</span> <span class="o">*</span> <span class="n">n</span><span class="p">)</span>
<a id="__codelineno-6-15" name="__codelineno-6-15"></a>
<a id="__codelineno-6-16" name="__codelineno-6-16"></a><span class="nb">len</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="c1"># show the length of a string</span>
<a id="__codelineno-6-17" name="__codelineno-6-17"></a>
<a id="__codelineno-6-18" name="__codelineno-6-18"></a><span class="c1"># SLICING (extraction of sub-strings, does not include the position of the last index)</span>
<a id="__codelineno-6-19" name="__codelineno-6-19"></a><span class="n">string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="mi">5</span><span class="p">]</span>
<a id="__codelineno-6-20" name="__codelineno-6-20"></a><span class="n">string</span><span class="p">[:</span> <span class="mi">6</span><span class="p">]</span>
<a id="__codelineno-6-21" name="__codelineno-6-21"></a><span class="n">string</span><span class="p">[</span><span class="o">-</span><span class="mi">3</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-6-22" name="__codelineno-6-22"></a>
<a id="__codelineno-6-23" name="__codelineno-6-23"></a><span class="c1"># SLICING WITH STEP</span>
<a id="__codelineno-6-24" name="__codelineno-6-24"></a><span class="n">string</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span> <span class="mi">12</span><span class="p">:</span> <span class="mi">3</span><span class="p">]</span>
<a id="__codelineno-6-25" name="__codelineno-6-25"></a><span class="n">string</span><span class="p">[</span><span class="mi">15</span> <span class="p">::</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<a id="__codelineno-6-26" name="__codelineno-6-26"></a><span class="n">string</span><span class="p">[::</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="c1"># selection in reverse order (negative step)</span>
<a id="__codelineno-6-27" name="__codelineno-6-27"></a>
<a id="__codelineno-6-28" name="__codelineno-6-28"></a><span class="c1"># STRIPPING (elimination of spaces before and after string)</span>
<a id="__codelineno-6-29" name="__codelineno-6-29"></a><span class="n">string</span> <span class="o">=</span> <span class="s1">&#39;stripping test&#39;</span>
<a id="__codelineno-6-30" name="__codelineno-6-30"></a><span class="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<a id="__codelineno-6-31" name="__codelineno-6-31"></a><span class="n">string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span> <span class="c1"># only left spaces removed</span>
<a id="__codelineno-6-32" name="__codelineno-6-32"></a><span class="n">string</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> <span class="c1"># only right spaces removed</span>
<a id="__codelineno-6-33" name="__codelineno-6-33"></a><span class="n">string</span><span class="o">.</span><span class="n">removeprefix</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="c1"># If the string starts with the prefix string, return string [len (prefix):]</span>
<a id="__codelineno-6-34" name="__codelineno-6-34"></a><span class="n">string</span><span class="o">.</span><span class="n">removesuffix</span><span class="p">(</span><span class="n">suffix</span><span class="p">)</span> <span class="c1"># If the string ends with the suffix string and that suffix is not empty, return string [: - len (suffix)]</span>
<a id="__codelineno-6-35" name="__codelineno-6-35"></a>
<a id="__codelineno-6-36" name="__codelineno-6-36"></a><span class="c1"># SUBSTRING IDENTIFICATION</span>
<a id="__codelineno-6-37" name="__codelineno-6-37"></a><span class="c1">#returns starting index of the substring or -1 if it is not present</span>
<a id="__codelineno-6-38" name="__codelineno-6-38"></a><span class="n">string</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="s1">&#39;substring&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="nb">len</span> <span class="p">(</span><span class="n">string</span><span class="p">))</span> <span class="c1"># you can specify the start and end index of the search</span>
<a id="__codelineno-6-39" name="__codelineno-6-39"></a>
<a id="__codelineno-6-40" name="__codelineno-6-40"></a><span class="c1"># COUNT OF APPARITIONS</span>
<a id="__codelineno-6-41" name="__codelineno-6-41"></a><span class="n">string</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="s1">&#39;t&#39;</span><span class="p">)</span>
<a id="__codelineno-6-42" name="__codelineno-6-42"></a>
<a id="__codelineno-6-43" name="__codelineno-6-43"></a><span class="c1"># REPLACEMENT</span>
<a id="__codelineno-6-44" name="__codelineno-6-44"></a><span class="n">string</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;multi&#39;</span><span class="p">,</span> <span class="s1">&#39;multiple&#39;</span><span class="p">)</span>
<a id="__codelineno-6-45" name="__codelineno-6-45"></a>
<a id="__codelineno-6-46" name="__codelineno-6-46"></a><span class="c1"># UPPER CASE CONVERSION</span>
<a id="__codelineno-6-47" name="__codelineno-6-47"></a><span class="n">string</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<a id="__codelineno-6-48" name="__codelineno-6-48"></a><span class="n">string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<a id="__codelineno-6-49" name="__codelineno-6-49"></a><span class="n">string</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
<a id="__codelineno-6-50" name="__codelineno-6-50"></a><span class="n">string</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span>
<a id="__codelineno-6-51" name="__codelineno-6-51"></a>
<a id="__codelineno-6-52" name="__codelineno-6-52"></a><span class="c1"># SEPARATION IN LIST ELEMENTS</span>
<a id="__codelineno-6-53" name="__codelineno-6-53"></a><span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
<a id="__codelineno-6-54" name="__codelineno-6-54"></a><span class="n">string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;separator&#39;</span><span class="p">)</span> <span class="c1"># separate using separator (separator omitted in list)</span>
<a id="__codelineno-6-55" name="__codelineno-6-55"></a><span class="n">string</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;char&#39;</span><span class="p">)</span> <span class="c1"># -&gt; tuple # separates the string from the 3 parts at the first occurrence of separator</span>
<a id="__codelineno-6-56" name="__codelineno-6-56"></a>
<a id="__codelineno-6-57" name="__codelineno-6-57"></a><span class="c1"># IS_CHECK METHODS -&gt; bool</span>
<a id="__codelineno-6-58" name="__codelineno-6-58"></a><span class="n">string</span><span class="o">.</span><span class="n">isalnum</span><span class="p">()</span>
<a id="__codelineno-6-59" name="__codelineno-6-59"></a><span class="n">string</span><span class="o">.</span><span class="n">isalpha</span><span class="p">()</span>
<a id="__codelineno-6-60" name="__codelineno-6-60"></a><span class="n">string</span><span class="o">.</span><span class="n">islower</span><span class="p">()</span>
<a id="__codelineno-6-61" name="__codelineno-6-61"></a><span class="n">string</span><span class="o">.</span><span class="n">isspace</span><span class="p">()</span>
<a id="__codelineno-6-62" name="__codelineno-6-62"></a><span class="n">string</span><span class="o">.</span><span class="n">istitle</span><span class="p">()</span>
<a id="__codelineno-6-63" name="__codelineno-6-63"></a><span class="n">string</span><span class="o">.</span><span class="n">isupper</span><span class="p">()</span>
<a id="__codelineno-6-64" name="__codelineno-6-64"></a><span class="n">string</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;char&#39;</span><span class="p">)</span>
<a id="__codelineno-6-65" name="__codelineno-6-65"></a>
<a id="__codelineno-6-66" name="__codelineno-6-66"></a><span class="c1"># JOIN INSTRUCTION()</span>
<a id="__codelineno-6-67" name="__codelineno-6-67"></a><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># merges all elements of the iterable into the new string</span>
<a id="__codelineno-6-68" name="__codelineno-6-68"></a>
<a id="__codelineno-6-69" name="__codelineno-6-69"></a><span class="c1"># FORMATTING</span>
<a id="__codelineno-6-70" name="__codelineno-6-70"></a><span class="n">string</span><span class="o">.</span><span class="n">center</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="s1">&#39;char&#39;</span><span class="p">)</span> <span class="c1"># stretch the string with char to width</span>
<a id="__codelineno-6-71" name="__codelineno-6-71"></a><span class="s1">&#39;...</span><span class="se">\t</span><span class="s1">...&#39;</span><span class="o">.</span><span class="n">expandtabs</span><span class="p">()</span> <span class="c1"># transform tabs into spaces</span>
</code></pre></div></td></tr></table></div>
<h2 id="lists">Lists</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-7-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-7-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-7-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-7-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-7-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-7-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-7-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-7-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-7-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-7-10">10</a></span>
<span class="normal"><a href="#__codelineno-7-11">11</a></span>
<span class="normal"><a href="#__codelineno-7-12">12</a></span>
<span class="normal"><a href="#__codelineno-7-13">13</a></span>
<span class="normal"><a href="#__codelineno-7-14">14</a></span>
<span class="normal"><a href="#__codelineno-7-15">15</a></span>
<span class="normal"><a href="#__codelineno-7-16">16</a></span>
<span class="normal"><a href="#__codelineno-7-17">17</a></span>
<span class="normal"><a href="#__codelineno-7-18">18</a></span>
<span class="normal"><a href="#__codelineno-7-19">19</a></span>
<span class="normal"><a href="#__codelineno-7-20">20</a></span>
<span class="normal"><a href="#__codelineno-7-21">21</a></span>
<span class="normal"><a href="#__codelineno-7-22">22</a></span>
<span class="normal"><a href="#__codelineno-7-23">23</a></span>
<span class="normal"><a href="#__codelineno-7-24">24</a></span>
<span class="normal"><a href="#__codelineno-7-25">25</a></span>
<span class="normal"><a href="#__codelineno-7-26">26</a></span>
<span class="normal"><a href="#__codelineno-7-27">27</a></span>
<span class="normal"><a href="#__codelineno-7-28">28</a></span>
<span class="normal"><a href="#__codelineno-7-29">29</a></span>
<span class="normal"><a href="#__codelineno-7-30">30</a></span>
<span class="normal"><a href="#__codelineno-7-31">31</a></span>
<span class="normal"><a href="#__codelineno-7-32">32</a></span>
<span class="normal"><a href="#__codelineno-7-33">33</a></span>
<span class="normal"><a href="#__codelineno-7-34">34</a></span>
<span class="normal"><a href="#__codelineno-7-35">35</a></span>
<span class="normal"><a href="#__codelineno-7-36">36</a></span>
<span class="normal"><a href="#__codelineno-7-37">37</a></span>
<span class="normal"><a href="#__codelineno-7-38">38</a></span>
<span class="normal"><a href="#__codelineno-7-39">39</a></span>
<span class="normal"><a href="#__codelineno-7-40">40</a></span>
<span class="normal"><a href="#__codelineno-7-41">41</a></span>
<span class="normal"><a href="#__codelineno-7-42">42</a></span>
<span class="normal"><a href="#__codelineno-7-43">43</a></span>
<span class="normal"><a href="#__codelineno-7-44">44</a></span>
<span class="normal"><a href="#__codelineno-7-45">45</a></span>
<span class="normal"><a href="#__codelineno-7-46">46</a></span>
<span class="normal"><a href="#__codelineno-7-47">47</a></span>
<span class="normal"><a href="#__codelineno-7-48">48</a></span>
<span class="normal"><a href="#__codelineno-7-49">49</a></span>
<span class="normal"><a href="#__codelineno-7-50">50</a></span>
<span class="normal"><a href="#__codelineno-7-51">51</a></span>
<span class="normal"><a href="#__codelineno-7-52">52</a></span>
<span class="normal"><a href="#__codelineno-7-53">53</a></span>
<span class="normal"><a href="#__codelineno-7-54">54</a></span>
<span class="normal"><a href="#__codelineno-7-55">55</a></span>
<span class="normal"><a href="#__codelineno-7-56">56</a></span>
<span class="normal"><a href="#__codelineno-7-57">57</a></span>
<span class="normal"><a href="#__codelineno-7-58">58</a></span>
<span class="normal"><a href="#__codelineno-7-59">59</a></span>
<span class="normal"><a href="#__codelineno-7-60">60</a></span>
<span class="normal"><a href="#__codelineno-7-61">61</a></span>
<span class="normal"><a href="#__codelineno-7-62">62</a></span>
<span class="normal"><a href="#__codelineno-7-63">63</a></span>
<span class="normal"><a href="#__codelineno-7-64">64</a></span>
<span class="normal"><a href="#__codelineno-7-65">65</a></span>
<span class="normal"><a href="#__codelineno-7-66">66</a></span>
<span class="normal"><a href="#__codelineno-7-67">67</a></span>
<span class="normal"><a href="#__codelineno-7-68">68</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1"></a><span class="nb">list</span> <span class="o">=</span> <span class="p">[</span><span class="mi">9</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="s1">&#39;WTC&#39;</span><span class="p">,</span> <span class="o">-</span><span class="mf">5.6</span><span class="p">,</span> <span class="kc">True</span><span class="p">]</span> <span class="c1"># lists can contain data of different types</span>
<a id="__codelineno-7-2" name="__codelineno-7-2"></a>
<a id="__codelineno-7-3" name="__codelineno-7-3"></a><span class="nb">list</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="c1"># indexing</span>
<a id="__codelineno-7-4" name="__codelineno-7-4"></a><span class="nb">list</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span> <span class="mi">5</span><span class="p">]</span> <span class="c1"># slicing</span>
<a id="__codelineno-7-5" name="__codelineno-7-5"></a><span class="nb">list</span> <span class="o">*</span> <span class="mi">3</span> <span class="c1"># repetition</span>
<a id="__codelineno-7-6" name="__codelineno-7-6"></a><span class="nb">len</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span> <span class="c1"># length</span>
<a id="__codelineno-7-7" name="__codelineno-7-7"></a><span class="n">list3</span> <span class="o">=</span> <span class="n">list1</span> <span class="o">+</span> <span class="n">list2</span> <span class="c1"># list concatenation (operator + polymorphism)</span>
<a id="__codelineno-7-8" name="__codelineno-7-8"></a><span class="nb">list</span><span class="p">[</span><span class="n">index</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> <span class="c1"># modify list element</span>
<a id="__codelineno-7-9" name="__codelineno-7-9"></a><span class="k">del</span> <span class="p">(</span><span class="nb">list</span> <span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="c1"># remove by index (INBUILT IN PYTHON)</span>
<a id="__codelineno-7-10" name="__codelineno-7-10"></a><span class="c1"># modify the list between the start and stop indices by reassigning the elements of the iterable</span>
<a id="__codelineno-7-11" name="__codelineno-7-11"></a><span class="nb">list</span><span class="p">[</span><span class="n">start</span><span class="p">:</span> <span class="n">stop</span><span class="p">]</span> <span class="o">=</span> <span class="n">iterable</span>
<a id="__codelineno-7-12" name="__codelineno-7-12"></a>
<a id="__codelineno-7-13" name="__codelineno-7-13"></a><span class="c1"># LIST METHODS</span>
<a id="__codelineno-7-14" name="__codelineno-7-14"></a><span class="nb">list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="c1"># add object to background</span>
<a id="__codelineno-7-15" name="__codelineno-7-15"></a><span class="nb">list</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># counts the number of occurrences of item</span>
<a id="__codelineno-7-16" name="__codelineno-7-16"></a><span class="nb">list</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="c1"># add sequence elements to the list</span>
<a id="__codelineno-7-17" name="__codelineno-7-17"></a><span class="nb">list</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">position</span><span class="p">,</span> <span class="nb">object</span><span class="p">)</span> <span class="c1"># insert object in list [position]</span>
<a id="__codelineno-7-18" name="__codelineno-7-18"></a><span class="nb">list</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># returns the index of item</span>
<a id="__codelineno-7-19" name="__codelineno-7-19"></a><span class="nb">list</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># remove item</span>
<a id="__codelineno-7-20" name="__codelineno-7-20"></a><span class="n">poplist</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># delete item and return it</span>
<a id="__codelineno-7-21" name="__codelineno-7-21"></a><span class="nb">list</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span> <span class="c1"># remove all elements</span>
<a id="__codelineno-7-22" name="__codelineno-7-22"></a>
<a id="__codelineno-7-23" name="__codelineno-7-23"></a><span class="nb">list</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> <span class="c1"># sorts in ascending order (in place)</span>
<a id="__codelineno-7-24" name="__codelineno-7-24"></a><span class="nb">list</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">reverse</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span> <span class="c1"># sorts in descending order (in place)</span>
<a id="__codelineno-7-25" name="__codelineno-7-25"></a><span class="nb">list</span><span class="o">.</span><span class="n">reverse</span><span class="p">()</span> <span class="c1"># invert the string (in place)</span>
<a id="__codelineno-7-26" name="__codelineno-7-26"></a>
<a id="__codelineno-7-27" name="__codelineno-7-27"></a><span class="c1"># CLONING</span>
<a id="__codelineno-7-28" name="__codelineno-7-28"></a><span class="n">list1</span> <span class="o">=</span> <span class="p">[</span><span class="o">...</span><span class="p">]</span>
<a id="__codelineno-7-29" name="__codelineno-7-29"></a><span class="n">list2</span> <span class="o">=</span> <span class="n">list1</span> <span class="c1"># list2 points to the same object of list 1 (changes are shared)</span>
<a id="__codelineno-7-30" name="__codelineno-7-30"></a><span class="n">list3</span> <span class="o">=</span> <span class="n">list1</span> <span class="p">[:]</span> <span class="c1"># list3 is a clone of list1 (no shared changes)</span>
<a id="__codelineno-7-31" name="__codelineno-7-31"></a>
<a id="__codelineno-7-32" name="__codelineno-7-32"></a><span class="c1"># NESTED LISTS (MATRICES)</span>
<a id="__codelineno-7-33" name="__codelineno-7-33"></a><span class="n">list_1</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<a id="__codelineno-7-34" name="__codelineno-7-34"></a><span class="n">list_2</span> <span class="o">=</span> <span class="p">[</span><span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">]</span>
<a id="__codelineno-7-35" name="__codelineno-7-35"></a><span class="n">list_3</span> <span class="o">=</span> <span class="p">[</span><span class="mi">7</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">9</span><span class="p">]</span>
<a id="__codelineno-7-36" name="__codelineno-7-36"></a>
<a id="__codelineno-7-37" name="__codelineno-7-37"></a><span class="n">matrix</span> <span class="o">=</span> <span class="p">[</span><span class="n">list_1</span><span class="p">,</span> <span class="n">list_2</span><span class="p">,</span> <span class="n">list_3</span><span class="p">]</span>
<a id="__codelineno-7-38" name="__codelineno-7-38"></a><span class="n">matrix</span> <span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">]</span> <span class="c1"># identify element of list_i index j</span>
<a id="__codelineno-7-39" name="__codelineno-7-39"></a>
<a id="__codelineno-7-40" name="__codelineno-7-40"></a><span class="c1"># MAXIMUM AND MINIMUM</span>
<a id="__codelineno-7-41" name="__codelineno-7-41"></a><span class="nb">max</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-7-42" name="__codelineno-7-42"></a><span class="nb">min</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-7-43" name="__codelineno-7-43"></a>
<a id="__codelineno-7-44" name="__codelineno-7-44"></a><span class="c1"># ALL () &amp; ANY ()</span>
<a id="__codelineno-7-45" name="__codelineno-7-45"></a><span class="nb">all</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="c1"># returns TRUE if all elements of the sequence are true</span>
<a id="__codelineno-7-46" name="__codelineno-7-46"></a><span class="nb">any</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="c1"># returns TRUE if at least one element of the sequence has the value True</span>
<a id="__codelineno-7-47" name="__codelineno-7-47"></a>
<a id="__codelineno-7-48" name="__codelineno-7-48"></a><span class="c1"># MAP INSTRUCTION</span>
<a id="__codelineno-7-49" name="__codelineno-7-49"></a><span class="c1"># apply function to iterable and create new list (map object)</span>
<a id="__codelineno-7-50" name="__codelineno-7-50"></a><span class="c1"># function can be lambda</span>
<a id="__codelineno-7-51" name="__codelineno-7-51"></a><span class="nb">map</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">iterable</span><span class="p">)</span> <span class="c1"># -&gt; map object</span>
<a id="__codelineno-7-52" name="__codelineno-7-52"></a>
<a id="__codelineno-7-53" name="__codelineno-7-53"></a><span class="c1"># FILTER INSTRUCTION ()</span>
<a id="__codelineno-7-54" name="__codelineno-7-54"></a><span class="c1"># create a new list composed of the iterable elements for which the function returns TRUE</span>
<a id="__codelineno-7-55" name="__codelineno-7-55"></a><span class="nb">filter</span><span class="p">(</span><span class="n">function</span><span class="p">,</span> <span class="n">iterable</span><span class="p">)</span> <span class="c1"># -&gt; filter object</span>
<a id="__codelineno-7-56" name="__codelineno-7-56"></a>
<a id="__codelineno-7-57" name="__codelineno-7-57"></a><span class="c1"># ZIP INSTRUCTION ()</span>
<a id="__codelineno-7-58" name="__codelineno-7-58"></a><span class="c1"># create a tuple generator by joining two or more iterables</span>
<a id="__codelineno-7-59" name="__codelineno-7-59"></a><span class="c1"># [(seq_1 [0], seq_2 [0], ...), (seq_1 [1], seq_2 [1], ...), ...]</span>
<a id="__codelineno-7-60" name="__codelineno-7-60"></a><span class="c1"># truncate the sequence to the length of the shortest input sequence</span>
<a id="__codelineno-7-61" name="__codelineno-7-61"></a><span class="nb">zip</span><span class="p">(</span><span class="n">seq_1</span><span class="p">,</span> <span class="n">seq_2</span><span class="p">,</span> <span class="o">...</span><span class="p">)</span> <span class="c1"># -&gt; zip object (tuple generator)</span>
<a id="__codelineno-7-62" name="__codelineno-7-62"></a>
<a id="__codelineno-7-63" name="__codelineno-7-63"></a><span class="c1"># LIST COMPREHENSIONS</span>
<a id="__codelineno-7-64" name="__codelineno-7-64"></a><span class="n">var</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">condition</span><span class="p">]</span> <span class="c1"># create list from pre-existing list (instead of map, filter, reduce) applying any manipulations</span>
<a id="__codelineno-7-65" name="__codelineno-7-65"></a><span class="c1"># expression can be lambda, if is optional</span>
<a id="__codelineno-7-66" name="__codelineno-7-66"></a><span class="n">var</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression</span> <span class="k">if</span> <span class="n">condition</span> <span class="k">else</span> <span class="n">statement</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]</span> <span class="c1"># list comprehension with IF-ELSE</span>
<a id="__codelineno-7-67" name="__codelineno-7-67"></a><span class="n">var</span> <span class="o">=</span> <span class="p">[</span><span class="n">expression_1</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="p">[</span><span class="n">expression_2</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">]]</span> <span class="c1"># nested list comprehension</span>
<a id="__codelineno-7-68" name="__codelineno-7-68"></a><span class="n">var</span> <span class="o">=</span> <span class="p">[(</span><span class="n">exp_1</span><span class="p">,</span> <span class="n">exp_2</span><span class="p">)</span> <span class="k">for</span> <span class="n">item_1</span> <span class="ow">in</span> <span class="n">seq_1</span> <span class="k">for</span> <span class="n">item_2</span> <span class="ow">in</span> <span class="n">seq_2</span><span class="p">]</span> <span class="c1"># -&gt; [(..., ...), (..., ...), ...]</span>
</code></pre></div></td></tr></table></div>
<h2 id="tuple">Tuple</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-8-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-8-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-8-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-8-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-8-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-8-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-8-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-8-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-8-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-8-10">10</a></span>
<span class="normal"><a href="#__codelineno-8-11">11</a></span>
<span class="normal"><a href="#__codelineno-8-12">12</a></span>
<span class="normal"><a href="#__codelineno-8-13">13</a></span>
<span class="normal"><a href="#__codelineno-8-14">14</a></span>
<span class="normal"><a href="#__codelineno-8-15">15</a></span>
<span class="normal"><a href="#__codelineno-8-16">16</a></span>
<span class="normal"><a href="#__codelineno-8-17">17</a></span>
<span class="normal"><a href="#__codelineno-8-18">18</a></span>
<span class="normal"><a href="#__codelineno-8-19">19</a></span>
<span class="normal"><a href="#__codelineno-8-20">20</a></span>
<span class="normal"><a href="#__codelineno-8-21">21</a></span>
<span class="normal"><a href="#__codelineno-8-22">22</a></span>
<span class="normal"><a href="#__codelineno-8-23">23</a></span>
<span class="normal"><a href="#__codelineno-8-24">24</a></span>
<span class="normal"><a href="#__codelineno-8-25">25</a></span>
<span class="normal"><a href="#__codelineno-8-26">26</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="c1"># TUPLES CANNOT BE MODIFIED</span>
<a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">69</span><span class="p">,</span> <span class="mi">420</span><span class="p">,</span> <span class="mi">69</span><span class="p">,</span> <span class="s1">&#39;abc&#39;</span><span class="p">)</span> <span class="c1"># tuple assignment</span>
<a id="__codelineno-8-3" name="__codelineno-8-3"></a><span class="nb">tuple</span> <span class="o">=</span> <span class="p">(</span><span class="mi">44</span><span class="p">,)</span> <span class="c1"># single element tuples need a comma</span>
<a id="__codelineno-8-4" name="__codelineno-8-4"></a>
<a id="__codelineno-8-5" name="__codelineno-8-5"></a><span class="nb">tuple</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="c1"># indexing</span>
<a id="__codelineno-8-6" name="__codelineno-8-6"></a><span class="nb">tuple</span> <span class="o">*</span> <span class="mi">3</span> <span class="c1"># repetition</span>
<a id="__codelineno-8-7" name="__codelineno-8-7"></a><span class="nb">tuple</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="mi">69</span><span class="p">)</span> <span class="c1"># counting</span>
<a id="__codelineno-8-8" name="__codelineno-8-8"></a><span class="nb">tuple</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="mi">420</span><span class="p">)</span> <span class="c1"># find index</span>
<a id="__codelineno-8-9" name="__codelineno-8-9"></a><span class="nb">len</span><span class="p">(</span><span class="nb">tuple</span><span class="p">)</span> <span class="c1"># length tuple</span>
<a id="__codelineno-8-10" name="__codelineno-8-10"></a>
<a id="__codelineno-8-11" name="__codelineno-8-11"></a><span class="c1"># CONVERSION FROM TUPLE TO LIST</span>
<a id="__codelineno-8-12" name="__codelineno-8-12"></a><span class="nb">tuple</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-8-13" name="__codelineno-8-13"></a>
<a id="__codelineno-8-14" name="__codelineno-8-14"></a><span class="c1"># TUPLE UNPACKING</span>
<a id="__codelineno-8-15" name="__codelineno-8-15"></a><span class="n">tup</span> <span class="o">=</span> <span class="p">(</span><span class="n">item_1</span><span class="p">,</span> <span class="n">item_2</span><span class="p">,</span> <span class="n">etc</span><span class="p">)</span>
<a id="__codelineno-8-16" name="__codelineno-8-16"></a><span class="n">var_1</span><span class="p">,</span> <span class="n">var_2</span><span class="p">,</span> <span class="n">etc</span> <span class="o">=</span> <span class="n">tup</span>
<a id="__codelineno-8-17" name="__codelineno-8-17"></a><span class="c1"># var_1 = item_1, var_2 = item_2, ...</span>
<a id="__codelineno-8-18" name="__codelineno-8-18"></a>
<a id="__codelineno-8-19" name="__codelineno-8-19"></a><span class="n">tup</span> <span class="o">=</span> <span class="p">(</span><span class="n">item_1</span><span class="p">,</span> <span class="p">(</span><span class="n">item_2</span><span class="p">,</span> <span class="n">item_3</span><span class="p">))</span>
<a id="__codelineno-8-20" name="__codelineno-8-20"></a><span class="n">var_1</span><span class="p">,</span> <span class="p">(</span><span class="n">var_2</span><span class="p">,</span> <span class="n">var_3</span><span class="p">)</span> <span class="o">=</span> <span class="n">tup</span>
<a id="__codelineno-8-21" name="__codelineno-8-21"></a><span class="c1"># var_1 = item_1, var_2 = item_2, var_3 = item_3</span>
<a id="__codelineno-8-22" name="__codelineno-8-22"></a>
<a id="__codelineno-8-23" name="__codelineno-8-23"></a><span class="c1">#OPERATOR * VAR (tuple unpacking)</span>
<a id="__codelineno-8-24" name="__codelineno-8-24"></a><span class="n">var_1</span><span class="p">,</span> <span class="n">var_2</span><span class="p">,</span> <span class="o">*</span> <span class="n">rest</span> <span class="o">=</span> <span class="n">sequence</span> <span class="c1"># var_1 = seq [0], var_2 = seq [1], rest = seq [2:]</span>
<a id="__codelineno-8-25" name="__codelineno-8-25"></a><span class="n">var_1</span><span class="p">,</span> <span class="o">*</span> <span class="n">body</span><span class="p">,</span> <span class="n">var_2</span><span class="p">,</span> <span class="n">var_3</span> <span class="o">=</span> <span class="n">sequence</span> <span class="c1"># var_1 = seq [0], body = seq [1: -2], var_2 = sequence [-2], var_3 = seq [-1]</span>
<a id="__codelineno-8-26" name="__codelineno-8-26"></a><span class="c1"># * var retrieves the excess items, if in parallel assignment usable max once but in any position</span>
</code></pre></div></td></tr></table></div>
<h2 id="set">Set</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-9-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-9-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-9-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-9-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-9-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-9-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-9-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-9-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-9-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-9-10">10</a></span>
<span class="normal"><a href="#__codelineno-9-11">11</a></span>
<span class="normal"><a href="#__codelineno-9-12">12</a></span>
<span class="normal"><a href="#__codelineno-9-13">13</a></span>
<span class="normal"><a href="#__codelineno-9-14">14</a></span>
<span class="normal"><a href="#__codelineno-9-15">15</a></span>
<span class="normal"><a href="#__codelineno-9-16">16</a></span>
<span class="normal"><a href="#__codelineno-9-17">17</a></span>
<span class="normal"><a href="#__codelineno-9-18">18</a></span>
<span class="normal"><a href="#__codelineno-9-19">19</a></span>
<span class="normal"><a href="#__codelineno-9-20">20</a></span>
<span class="normal"><a href="#__codelineno-9-21">21</a></span>
<span class="normal"><a href="#__codelineno-9-22">22</a></span>
<span class="normal"><a href="#__codelineno-9-23">23</a></span>
<span class="normal"><a href="#__codelineno-9-24">24</a></span>
<span class="normal"><a href="#__codelineno-9-25">25</a></span>
<span class="normal"><a href="#__codelineno-9-26">26</a></span>
<span class="normal"><a href="#__codelineno-9-27">27</a></span>
<span class="normal"><a href="#__codelineno-9-28">28</a></span>
<span class="normal"><a href="#__codelineno-9-29">29</a></span>
<span class="normal"><a href="#__codelineno-9-30">30</a></span>
<span class="normal"><a href="#__codelineno-9-31">31</a></span>
<span class="normal"><a href="#__codelineno-9-32">32</a></span>
<span class="normal"><a href="#__codelineno-9-33">33</a></span>
<span class="normal"><a href="#__codelineno-9-34">34</a></span>
<span class="normal"><a href="#__codelineno-9-35">35</a></span>
<span class="normal"><a href="#__codelineno-9-36">36</a></span>
<span class="normal"><a href="#__codelineno-9-37">37</a></span>
<span class="normal"><a href="#__codelineno-9-38">38</a></span>
<span class="normal"><a href="#__codelineno-9-39">39</a></span>
<span class="normal"><a href="#__codelineno-9-40">40</a></span>
<span class="normal"><a href="#__codelineno-9-41">41</a></span>
<span class="normal"><a href="#__codelineno-9-42">42</a></span>
<span class="normal"><a href="#__codelineno-9-43">43</a></span>
<span class="normal"><a href="#__codelineno-9-44">44</a></span>
<span class="normal"><a href="#__codelineno-9-45">45</a></span>
<span class="normal"><a href="#__codelineno-9-46">46</a></span>
<span class="normal"><a href="#__codelineno-9-47">47</a></span>
<span class="normal"><a href="#__codelineno-9-48">48</a></span>
<span class="normal"><a href="#__codelineno-9-49">49</a></span>
<span class="normal"><a href="#__codelineno-9-50">50</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1"></a><span class="c1"># SETS MAY NOT CONTAIN REPEATED ELEMENTS (THEY ARE OMITTED)</span>
<a id="__codelineno-9-2" name="__codelineno-9-2"></a><span class="c1"># THE ORDER DOES NOT MATTER (NO SLICING, INDEXING, REPETITION, ...)</span>
<a id="__codelineno-9-3" name="__codelineno-9-3"></a><span class="nb">set</span> <span class="o">=</span> <span class="p">{</span><span class="mi">10</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="s1">&#39;abc&#39;</span><span class="p">,</span> <span class="mi">20</span><span class="p">}</span>
<a id="__codelineno-9-4" name="__codelineno-9-4"></a><span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span> <span class="c1"># length set</span>
<a id="__codelineno-9-5" name="__codelineno-9-5"></a><span class="nb">set</span><span class="p">()</span> <span class="c1"># create empty set ({} create empty dictionary)</span>
<a id="__codelineno-9-6" name="__codelineno-9-6"></a><span class="c1"># FREEZING SETS (no longer editable)</span>
<a id="__codelineno-9-7" name="__codelineno-9-7"></a><span class="n">fset</span> <span class="o">=</span> <span class="nb">frozenset</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
<a id="__codelineno-9-8" name="__codelineno-9-8"></a>
<a id="__codelineno-9-9" name="__codelineno-9-9"></a><span class="c1"># OPERATORS</span>
<a id="__codelineno-9-10" name="__codelineno-9-10"></a><span class="n">set_1</span> <span class="o">-</span> <span class="n">set_2</span> <span class="c1"># elements in set_1 but not in set_2</span>
<a id="__codelineno-9-11" name="__codelineno-9-11"></a><span class="n">set_1</span> <span class="o">|</span> <span class="n">set_2</span> <span class="c1"># elements in set_1 or set_2</span>
<a id="__codelineno-9-12" name="__codelineno-9-12"></a><span class="n">set_1</span> <span class="o">&amp;</span> <span class="n">set_2</span> <span class="c1"># elements in set_1 and set_2</span>
<a id="__codelineno-9-13" name="__codelineno-9-13"></a><span class="n">set_1</span> <span class="o">^</span> <span class="n">set_1</span> <span class="c1"># elements in either set_1 or set_2</span>
<a id="__codelineno-9-14" name="__codelineno-9-14"></a><span class="n">set_1</span> <span class="o">&lt;=</span> <span class="n">set_2</span> <span class="c1"># elements set_1 also in set_2</span>
<a id="__codelineno-9-15" name="__codelineno-9-15"></a><span class="n">set_1</span> <span class="o">&lt;</span> <span class="n">set_2</span> <span class="c1"># set_1 &lt;= set_2 and set_1! = set_2</span>
<a id="__codelineno-9-16" name="__codelineno-9-16"></a><span class="n">set_1</span> <span class="o">&gt;=</span> <span class="n">set_2</span> <span class="c1"># elements set_2 also in set_1</span>
<a id="__codelineno-9-17" name="__codelineno-9-17"></a><span class="n">set_1</span> <span class="o">&gt;</span> <span class="n">set_2</span> <span class="c1"># set_1&gt; = set_2 and set_1! = set_2</span>
<a id="__codelineno-9-18" name="__codelineno-9-18"></a>
<a id="__codelineno-9-19" name="__codelineno-9-19"></a><span class="c1"># METHODS SET</span>
<a id="__codelineno-9-20" name="__codelineno-9-20"></a><span class="nb">set</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># remove and return item</span>
<a id="__codelineno-9-21" name="__codelineno-9-21"></a><span class="nb">set</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># add item to set</span>
<a id="__codelineno-9-22" name="__codelineno-9-22"></a>
<a id="__codelineno-9-23" name="__codelineno-9-23"></a><span class="nb">set</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="c1"># -&gt; set # returns a copy of the set</span>
<a id="__codelineno-9-24" name="__codelineno-9-24"></a><span class="nb">set</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span> <span class="c1"># remove all elements from the set</span>
<a id="__codelineno-9-25" name="__codelineno-9-25"></a><span class="nb">set</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># remove item from set if present, otherwise raise KeyError</span>
<a id="__codelineno-9-26" name="__codelineno-9-26"></a><span class="nb">set</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="c1"># remove item from set if present, otherwise do nothing</span>
<a id="__codelineno-9-27" name="__codelineno-9-27"></a><span class="nb">set</span><span class="o">.</span><span class="n">difference</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># -&gt; set # returns elements in set that are absent in * sets</span>
<a id="__codelineno-9-28" name="__codelineno-9-28"></a><span class="nb">set</span><span class="o">.</span><span class="n">difference_update</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># remove differences from set_2</span>
<a id="__codelineno-9-29" name="__codelineno-9-29"></a><span class="nb">set</span><span class="o">.</span><span class="n">union</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># -&gt; set # returns all elements of sets</span>
<a id="__codelineno-9-30" name="__codelineno-9-30"></a><span class="nb">set</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># add * sets elements to set</span>
<a id="__codelineno-9-31" name="__codelineno-9-31"></a><span class="nb">set</span><span class="o">.</span><span class="n">intersection</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># -&gt; set # returns the elements common to sets</span>
<a id="__codelineno-9-32" name="__codelineno-9-32"></a><span class="nb">set</span><span class="o">.</span><span class="n">intersection_update</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># remove all elements except those common to sets</span>
<a id="__codelineno-9-33" name="__codelineno-9-33"></a><span class="nb">set</span><span class="o">.</span><span class="n">symmetric_difference</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># -&gt; set # returns elements not common to sets</span>
<a id="__codelineno-9-34" name="__codelineno-9-34"></a><span class="nb">set</span><span class="o">.</span><span class="n">symmetric_difference_update</span><span class="p">(</span><span class="o">*</span> <span class="n">sets</span><span class="p">)</span> <span class="c1"># remove all elements common to sets (leave only uncommon elements)</span>
<a id="__codelineno-9-35" name="__codelineno-9-35"></a>
<a id="__codelineno-9-36" name="__codelineno-9-36"></a><span class="n">set_1</span><span class="o">.</span><span class="n">isdisjoint</span><span class="p">(</span><span class="n">set_2</span><span class="p">)</span> <span class="c1"># -&gt; bool # True if there are no common elements (intersection is empty)</span>
<a id="__codelineno-9-37" name="__codelineno-9-37"></a><span class="n">set_1</span><span class="o">.</span><span class="n">issubset</span><span class="p">(</span><span class="n">set_2</span><span class="p">)</span> <span class="c1"># -&gt; bool # True if every element of set_1 is also in set_2</span>
<a id="__codelineno-9-38" name="__codelineno-9-38"></a><span class="n">set_1</span><span class="o">.</span><span class="n">issuperset</span><span class="p">(</span><span class="n">set_2</span><span class="p">)</span> <span class="c1"># -&gt; bool # True if every element of set_2 is also in set_1</span>
<a id="__codelineno-9-39" name="__codelineno-9-39"></a>
<a id="__codelineno-9-40" name="__codelineno-9-40"></a><span class="c1"># SET COMPREHENSIONS</span>
<a id="__codelineno-9-41" name="__codelineno-9-41"></a><span class="n">var</span> <span class="o">=</span> <span class="p">{</span><span class="n">expression</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">condition</span><span class="p">}</span>
<a id="__codelineno-9-42" name="__codelineno-9-42"></a>
<a id="__codelineno-9-43" name="__codelineno-9-43"></a><span class="c1"># SLICE OBJECT</span>
<a id="__codelineno-9-44" name="__codelineno-9-44"></a><span class="c1"># [start: stop: step] -&gt; slice object (start, stop, step)</span>
<a id="__codelineno-9-45" name="__codelineno-9-45"></a><span class="n">var_1</span> <span class="o">=</span> <span class="nb">slice</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">stop</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> <span class="c1"># assignment to variable</span>
<a id="__codelineno-9-46" name="__codelineno-9-46"></a><span class="n">var_2</span><span class="p">[</span><span class="n">var_1</span><span class="p">]</span> <span class="c1"># same as var_2 [start: stop: step]</span>
<a id="__codelineno-9-47" name="__codelineno-9-47"></a>
<a id="__codelineno-9-48" name="__codelineno-9-48"></a><span class="c1"># ELLIPSIS OBJECT</span>
<a id="__codelineno-9-49" name="__codelineno-9-49"></a><span class="n">var</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="o">...</span><span class="p">]</span> <span class="c1"># -&gt; shortcut for var [i,:,:,:,]</span>
<a id="__codelineno-9-50" name="__codelineno-9-50"></a><span class="c1"># used for multidimensional slices (NumPy, ...)</span>
</code></pre></div></td></tr></table></div>
<h2 id="bytes-e-bytearray">Bytes e Bytearray</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-10-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-10-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-10-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-10-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-10-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-10-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-10-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-10-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-10-10">10</a></span>
<span class="normal"><a href="#__codelineno-10-11">11</a></span>
<span class="normal"><a href="#__codelineno-10-12">12</a></span>
<span class="normal"><a href="#__codelineno-10-13">13</a></span>
<span class="normal"><a href="#__codelineno-10-14">14</a></span>
<span class="normal"><a href="#__codelineno-10-15">15</a></span>
<span class="normal"><a href="#__codelineno-10-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="c1"># THE BYTES CANNOT BE MODIFIED OR INDEXED</span>
<a id="__codelineno-10-2" name="__codelineno-10-2"></a><span class="c1"># THE BYTEARRAYS CAN BE MODIFIED AND INDEXED</span>
<a id="__codelineno-10-3" name="__codelineno-10-3"></a><span class="c1"># YOU CANNOT DO REPETITION AND SLICING ON BYTE OR BYTEARRAY</span>
<a id="__codelineno-10-4" name="__codelineno-10-4"></a>
<a id="__codelineno-10-5" name="__codelineno-10-5"></a><span class="n">b</span> <span class="o">=</span> <span class="nb">bytes</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-10-6" name="__codelineno-10-6"></a><span class="n">ba</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<a id="__codelineno-10-7" name="__codelineno-10-7"></a>
<a id="__codelineno-10-8" name="__codelineno-10-8"></a><span class="c1"># item of bytes and bytearray is always integer between 0 and 255</span>
<a id="__codelineno-10-9" name="__codelineno-10-9"></a><span class="c1"># slice of bytes and bytearray is binary sequence (even if len = 1)</span>
<a id="__codelineno-10-10" name="__codelineno-10-10"></a>
<a id="__codelineno-10-11" name="__codelineno-10-11"></a><span class="c1"># BYTES AND BYTEARRAY METHODS</span>
<a id="__codelineno-10-12" name="__codelineno-10-12"></a><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">pair_hex_digits</span><span class="p">)</span> <span class="c1"># -&gt; byte literal</span>
<a id="__codelineno-10-13" name="__codelineno-10-13"></a><span class="sa">b</span><span class="s1">&#39;bite_literal&#39;</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span> <span class="c1"># -&gt; str # returns a string containing hex digit pairs</span>
<a id="__codelineno-10-14" name="__codelineno-10-14"></a><span class="nb">bytearray</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">pair_hex_digits</span><span class="p">)</span> <span class="c1"># -&gt; byte literal</span>
<a id="__codelineno-10-15" name="__codelineno-10-15"></a><span class="nb">bytes</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">subseq</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span> <span class="c1"># returns subseq appearance count between start and end positions</span>
<a id="__codelineno-10-16" name="__codelineno-10-16"></a><span class="nb">bytearray</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">subseq</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span> <span class="c1"># returns subseq appearance count between start and end positions</span>
</code></pre></div></td></tr></table></div>
<h2 id="encoding-decoding-unicode">Encoding-Decoding &amp; Unicode</h2>
<p>Unicode Literals:</p>
<ul>
<li><code>\u0041</code> &rarr; 'A'</li>
<li><code>\U00000041</code> &rarr; 'A'</li>
<li><code>\x41</code> &rarr; 'A'</li>
</ul>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-11-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-11-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-11-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-11-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-11-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-11-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-11-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-11-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-11-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-11-10">10</a></span>
<span class="normal"><a href="#__codelineno-11-11">11</a></span>
<span class="normal"><a href="#__codelineno-11-12">12</a></span>
<span class="normal"><a href="#__codelineno-11-13">13</a></span>
<span class="normal"><a href="#__codelineno-11-14">14</a></span>
<span class="normal"><a href="#__codelineno-11-15">15</a></span>
<span class="normal"><a href="#__codelineno-11-16">16</a></span>
<span class="normal"><a href="#__codelineno-11-17">17</a></span>
<span class="normal"><a href="#__codelineno-11-18">18</a></span>
<span class="normal"><a href="#__codelineno-11-19">19</a></span>
<span class="normal"><a href="#__codelineno-11-20">20</a></span>
<span class="normal"><a href="#__codelineno-11-21">21</a></span>
<span class="normal"><a href="#__codelineno-11-22">22</a></span>
<span class="normal"><a href="#__codelineno-11-23">23</a></span>
<span class="normal"><a href="#__codelineno-11-24">24</a></span>
<span class="normal"><a href="#__codelineno-11-25">25</a></span>
<span class="normal"><a href="#__codelineno-11-26">26</a></span>
<span class="normal"><a href="#__codelineno-11-27">27</a></span>
<span class="normal"><a href="#__codelineno-11-28">28</a></span>
<span class="normal"><a href="#__codelineno-11-29">29</a></span>
<span class="normal"><a href="#__codelineno-11-30">30</a></span>
<span class="normal"><a href="#__codelineno-11-31">31</a></span>
<span class="normal"><a href="#__codelineno-11-32">32</a></span>
<span class="normal"><a href="#__codelineno-11-33">33</a></span>
<span class="normal"><a href="#__codelineno-11-34">34</a></span>
<span class="normal"><a href="#__codelineno-11-35">35</a></span>
<span class="normal"><a href="#__codelineno-11-36">36</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1"></a><span class="c1"># ENCODING</span>
<a id="__codelineno-11-2" name="__codelineno-11-2"></a><span class="c1"># transform string into literal byte</span>
<a id="__codelineno-11-3" name="__codelineno-11-3"></a><span class="c1"># UnicodeEncodeError on error</span>
<a id="__codelineno-11-4" name="__codelineno-11-4"></a><span class="c1"># errors = ignore -&gt; skip error-causing characters</span>
<a id="__codelineno-11-5" name="__codelineno-11-5"></a><span class="c1"># errors = replace -&gt; replace? to characters causing error</span>
<a id="__codelineno-11-6" name="__codelineno-11-6"></a><span class="c1"># errors = xmlcharrefreplace -&gt; substitutes XML entities for error-causing characters</span>
<a id="__codelineno-11-7" name="__codelineno-11-7"></a><span class="n">string</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="s1">&#39;replace&#39;</span><span class="p">)</span> <span class="c1"># -&gt; b&#39;byte literals&#39;</span>
<a id="__codelineno-11-8" name="__codelineno-11-8"></a>
<a id="__codelineno-11-9" name="__codelineno-11-9"></a><span class="c1"># BOM (BYTE ORDER MARK)</span>
<a id="__codelineno-11-10" name="__codelineno-11-10"></a><span class="c1"># byte literal given to indicate byte ordering (little-endian vs big-endian)</span>
<a id="__codelineno-11-11" name="__codelineno-11-11"></a><span class="c1"># in little-endian the least significant bytes come first (e.g. U + 0045 -&gt; DEC 069 -&gt; encoded as 69 and 0)</span>
<a id="__codelineno-11-12" name="__codelineno-11-12"></a><span class="c1"># U + FEFF (ZERO WIDTH NO-BREAK SPACE) -&gt; b &#39;\ xff \ xfe&#39; indicates little-endian</span>
<a id="__codelineno-11-13" name="__codelineno-11-13"></a>
<a id="__codelineno-11-14" name="__codelineno-11-14"></a><span class="c1"># DECODING</span>
<a id="__codelineno-11-15" name="__codelineno-11-15"></a><span class="c1"># transform byte literal to string</span>
<a id="__codelineno-11-16" name="__codelineno-11-16"></a><span class="c1"># error = &#39;replace&#39; replaces errors (byte literals not belonging to decoding format) with U + FFFD &quot;REPLACEMENT CHARACTER&quot;</span>
<a id="__codelineno-11-17" name="__codelineno-11-17"></a><span class="nb">bytes</span><span class="o">.</span><span class="n">decode</span> <span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="s1">&#39;replace&#39;</span><span class="p">)</span> <span class="c1"># -&gt; str</span>
<a id="__codelineno-11-18" name="__codelineno-11-18"></a>
<a id="__codelineno-11-19" name="__codelineno-11-19"></a><span class="c1"># UNICODE NORMALIZATION</span>
<a id="__codelineno-11-20" name="__codelineno-11-20"></a><span class="c1"># handling canonical unicode equivalents (e.g. é, and \ u0301 are equivalent for unicode)</span>
<a id="__codelineno-11-21" name="__codelineno-11-21"></a><span class="n">unicodedata</span><span class="o">.</span><span class="n">normalize</span><span class="p">(</span><span class="n">form</span><span class="p">,</span> <span class="n">unicode_string</span><span class="p">)</span> <span class="c1"># FORM: NFC, NFD, NFCK, NFDK</span>
<a id="__codelineno-11-22" name="__codelineno-11-22"></a><span class="c1"># NFC -&gt; &quot;Normalization Form C&quot; -&gt; produces the shortest equivalent string</span>
<a id="__codelineno-11-23" name="__codelineno-11-23"></a><span class="c1"># NFD -&gt; &quot;Normalization Form D&quot; -&gt; produces the longest equivalent string</span>
<a id="__codelineno-11-24" name="__codelineno-11-24"></a>
<a id="__codelineno-11-25" name="__codelineno-11-25"></a><span class="c1"># CASE FOLDING UNICODE</span>
<a id="__codelineno-11-26" name="__codelineno-11-26"></a><span class="c1"># transform to lowercase with some differences (116 differences, 0.11% of Unicode 6.3)</span>
<a id="__codelineno-11-27" name="__codelineno-11-27"></a><span class="n">string</span><span class="o">.</span><span class="n">casefold</span><span class="p">()</span>
<a id="__codelineno-11-28" name="__codelineno-11-28"></a>
<a id="__codelineno-11-29" name="__codelineno-11-29"></a><span class="c1"># USEFUL FUNCTIONS FOR NORMALIZED EQUIVALENCE (Source: Fluent Python p. 121, Luciano Ramalho)</span>
<a id="__codelineno-11-30" name="__codelineno-11-30"></a><span class="kn">from</span> <span class="nn">unicodedata</span> <span class="kn">import</span> <span class="n">normalize</span>
<a id="__codelineno-11-31" name="__codelineno-11-31"></a>
<a id="__codelineno-11-32" name="__codelineno-11-32"></a><span class="k">def</span> <span class="nf">nfc_eual</span><span class="p">(</span><span class="n">str_1</span><span class="p">,</span> <span class="n">str_2</span><span class="p">):</span>
<a id="__codelineno-11-33" name="__codelineno-11-33"></a> <span class="k">return</span> <span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="s1">&#39;NFC&#39;</span><span class="p">,</span> <span class="n">str1</span><span class="p">)</span> <span class="o">==</span> <span class="n">normalize</span><span class="p">(</span><span class="s1">&#39;NFC&#39;</span><span class="p">,</span> <span class="n">str2</span><span class="p">))</span>
<a id="__codelineno-11-34" name="__codelineno-11-34"></a><span class="k">def</span> <span class="nf">fold_equal</span> <span class="p">(</span><span class="n">str_1</span><span class="p">,</span> <span class="n">str_2</span><span class="p">):</span>
<a id="__codelineno-11-35" name="__codelineno-11-35"></a> <span class="k">return</span> <span class="p">(</span><span class="n">normalize</span><span class="p">(</span><span class="s1">&#39;NFC&#39;</span><span class="p">,</span> <span class="n">str_1</span><span class="p">)</span><span class="o">.</span><span class="n">casefold</span><span class="p">()</span> <span class="o">==</span>
<a id="__codelineno-11-36" name="__codelineno-11-36"></a> <span class="n">normalize</span><span class="p">(</span><span class="s1">&#39;NFC&#39;</span><span class="p">,</span> <span class="n">st_2</span><span class="p">)</span><span class="o">.</span><span class="n">casefold</span><span class="p">())</span>
</code></pre></div></td></tr></table></div>
<h2 id="memoryview">Memoryview</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-12-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-12-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-12-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-12-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-12-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-12-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-12-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-12-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-12-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-12-10">10</a></span>
<span class="normal"><a href="#__codelineno-12-11">11</a></span>
<span class="normal"><a href="#__codelineno-12-12">12</a></span>
<span class="normal"><a href="#__codelineno-12-13">13</a></span>
<span class="normal"><a href="#__codelineno-12-14">14</a></span>
<span class="normal"><a href="#__codelineno-12-15">15</a></span>
<span class="normal"><a href="#__codelineno-12-16">16</a></span>
<span class="normal"><a href="#__codelineno-12-17">17</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1"></a><span class="c1"># memoryview objects allow python to access the data inside the object</span>
<a id="__codelineno-12-2" name="__codelineno-12-2"></a><span class="c1"># without copy if it supports the buffer protocol</span>
<a id="__codelineno-12-3" name="__codelineno-12-3"></a><span class="n">v</span> <span class="o">=</span> <span class="nb">memoryview</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="c1"># create a memoryview with reference to object</span>
<a id="__codelineno-12-4" name="__codelineno-12-4"></a><span class="c1"># slice of memoryview produces new memoryview</span>
<a id="__codelineno-12-5" name="__codelineno-12-5"></a>
<a id="__codelineno-12-6" name="__codelineno-12-6"></a><span class="c1"># MEMORYVIEW METHODS</span>
<a id="__codelineno-12-7" name="__codelineno-12-7"></a><span class="n">v</span><span class="o">.</span><span class="n">tobytes</span><span class="p">()</span> <span class="c1"># return data as bytestring, equivalent to bytes (v)</span>
<a id="__codelineno-12-8" name="__codelineno-12-8"></a><span class="n">v</span><span class="o">.</span><span class="n">hex</span><span class="p">()</span> <span class="c1"># returns string containing two hex digits for each byte in the buffer</span>
<a id="__codelineno-12-9" name="__codelineno-12-9"></a><span class="n">v</span><span class="o">.</span><span class="n">tolist</span><span class="p">()</span> <span class="c1"># returns the data in the buffer as a list of elements</span>
<a id="__codelineno-12-10" name="__codelineno-12-10"></a><span class="n">v</span><span class="o">.</span><span class="n">toreadonly</span><span class="p">()</span>
<a id="__codelineno-12-11" name="__codelineno-12-11"></a><span class="n">v</span><span class="o">.</span><span class="n">release</span><span class="p">()</span> <span class="c1"># release the buffer below</span>
<a id="__codelineno-12-12" name="__codelineno-12-12"></a><span class="n">v</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="nb">format</span><span class="p">,</span> <span class="n">shape</span><span class="p">)</span> <span class="c1"># change the format or shape of the memoryview</span>
<a id="__codelineno-12-13" name="__codelineno-12-13"></a><span class="n">see</span> <span class="nb">object</span> <span class="c1"># object of the memoryview</span>
<a id="__codelineno-12-14" name="__codelineno-12-14"></a><span class="n">v</span><span class="o">.</span><span class="n">format</span> <span class="c1"># format of the memoryview</span>
<a id="__codelineno-12-15" name="__codelineno-12-15"></a><span class="n">v</span><span class="o">.</span><span class="n">itemsize</span> <span class="c1"># size in bytes of each element of the memoryview</span>
<a id="__codelineno-12-16" name="__codelineno-12-16"></a><span class="n">v</span><span class="o">.</span><span class="n">ndim</span> <span class="c1"># integer indicating the size of the multidimensional array represented</span>
<a id="__codelineno-12-17" name="__codelineno-12-17"></a><span class="n">v</span><span class="o">.</span><span class="n">shape</span> <span class="c1"># tuple of integers indicating the shape of the memoryview</span>
</code></pre></div></td></tr></table></div>
<table>
<thead>
<tr>
<th>Format String</th>
<th>C Type</th>
<th>Python Type</th>
<th>Standard Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>x</code></td>
<td><code>pad byte</code></td>
<td><code>no value</code></td>
<td></td>
</tr>
<tr>
<td><code>c</code></td>
<td><code>char</code></td>
<td><code>bytes</code></td>
<td><code>1</code></td>
</tr>
<tr>
<td><code>b</code></td>
<td><code>signed char</code></td>
<td><code>integer</code></td>
<td><code>1</code></td>
</tr>
<tr>
<td><code>B</code></td>
<td><code>unsigned char</code></td>
<td><code>integer</code></td>
<td><code>1</code></td>
</tr>
<tr>
<td><code>?</code></td>
<td><code>_Bool</code></td>
<td><code>bool</code></td>
<td><code>1</code></td>
</tr>
<tr>
<td><code>h</code></td>
<td><code>short</code></td>
<td><code>integer</code></td>
<td><code>2</code></td>
</tr>
<tr>
<td><code>H</code></td>
<td><code>unsigned short</code></td>
<td><code>integer</code></td>
<td><code>2</code></td>
</tr>
<tr>
<td><code>i</code></td>
<td><code>int</code></td>
<td><code>integer</code></td>
<td><code>4</code></td>
</tr>
<tr>
<td><code>I</code></td>
<td><code>unsigned int</code></td>
<td><code>integer</code></td>
<td><code>4</code></td>
</tr>
<tr>
<td><code>l</code></td>
<td><code>long</code></td>
<td><code>integer</code></td>
<td><code>4</code></td>
</tr>
<tr>
<td><code>L</code></td>
<td><code>unsigned long</code></td>
<td><code>integer</code></td>
<td><code>4</code></td>
</tr>
<tr>
<td><code>q</code></td>
<td><code>long long</code></td>
<td><code>integer</code></td>
<td><code>8</code></td>
</tr>
<tr>
<td><code>Q</code></td>
<td><code>unsigned long long</code></td>
<td><code>integer</code></td>
<td><code>8</code></td>
</tr>
<tr>
<td><code>n</code></td>
<td><code>ssize_t</code></td>
<td><code>integer</code></td>
<td></td>
</tr>
<tr>
<td><code>N</code></td>
<td><code>size_t</code></td>
<td><code>integer</code></td>
<td></td>
</tr>
<tr>
<td><code>f</code></td>
<td><code>float</code></td>
<td><code>float</code></td>
<td><code>4</code></td>
</tr>
<tr>
<td><code>F</code></td>
<td><code>double</code></td>
<td><code>float</code></td>
<td><code>8</code></td>
</tr>
<tr>
<td><code>s</code></td>
<td><code>char[]</code></td>
<td><code>bytes</code></td>
<td></td>
</tr>
<tr>
<td><code>P</code></td>
<td><code>char[]</code></td>
<td><code>bytes</code></td>
<td></td>
</tr>
</tbody>
</table>
<h2 id="dictionaries">Dictionaries</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-13-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-13-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-13-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-13-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-13-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-13-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-13-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-13-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-13-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-13-10">10</a></span>
<span class="normal"><a href="#__codelineno-13-11">11</a></span>
<span class="normal"><a href="#__codelineno-13-12">12</a></span>
<span class="normal"><a href="#__codelineno-13-13">13</a></span>
<span class="normal"><a href="#__codelineno-13-14">14</a></span>
<span class="normal"><a href="#__codelineno-13-15">15</a></span>
<span class="normal"><a href="#__codelineno-13-16">16</a></span>
<span class="normal"><a href="#__codelineno-13-17">17</a></span>
<span class="normal"><a href="#__codelineno-13-18">18</a></span>
<span class="normal"><a href="#__codelineno-13-19">19</a></span>
<span class="normal"><a href="#__codelineno-13-20">20</a></span>
<span class="normal"><a href="#__codelineno-13-21">21</a></span>
<span class="normal"><a href="#__codelineno-13-22">22</a></span>
<span class="normal"><a href="#__codelineno-13-23">23</a></span>
<span class="normal"><a href="#__codelineno-13-24">24</a></span>
<span class="normal"><a href="#__codelineno-13-25">25</a></span>
<span class="normal"><a href="#__codelineno-13-26">26</a></span>
<span class="normal"><a href="#__codelineno-13-27">27</a></span>
<span class="normal"><a href="#__codelineno-13-28">28</a></span>
<span class="normal"><a href="#__codelineno-13-29">29</a></span>
<span class="normal"><a href="#__codelineno-13-30">30</a></span>
<span class="normal"><a href="#__codelineno-13-31">31</a></span>
<span class="normal"><a href="#__codelineno-13-32">32</a></span>
<span class="normal"><a href="#__codelineno-13-33">33</a></span>
<span class="normal"><a href="#__codelineno-13-34">34</a></span>
<span class="normal"><a href="#__codelineno-13-35">35</a></span>
<span class="normal"><a href="#__codelineno-13-36">36</a></span>
<span class="normal"><a href="#__codelineno-13-37">37</a></span>
<span class="normal"><a href="#__codelineno-13-38">38</a></span>
<span class="normal"><a href="#__codelineno-13-39">39</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1"></a><span class="c1"># SET OF KEY-VALUE PAIRS</span>
<a id="__codelineno-13-2" name="__codelineno-13-2"></a><span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="mi">1</span><span class="p">:</span> <span class="s1">&#39;Alex&#39;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s1">&#39;Bob&#39;</span><span class="p">,</span> <span class="mi">3</span><span class="p">:</span> <span class="s1">&#39;Carl&#39;</span><span class="p">}</span>
<a id="__codelineno-13-3" name="__codelineno-13-3"></a><span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span> <span class="p">(</span><span class="n">one</span> <span class="o">=</span> <span class="s1">&#39;Alex&#39;</span><span class="p">,</span> <span class="n">two</span> <span class="o">=</span> <span class="s1">&#39;Bob&#39;</span><span class="p">,</span> <span class="n">three</span> <span class="o">=</span> <span class="s1">&#39;Carl&#39;</span><span class="p">)</span>
<a id="__codelineno-13-4" name="__codelineno-13-4"></a><span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span> <span class="p">(</span><span class="nb">zip</span> <span class="p">([</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">],</span> <span class="p">[</span><span class="s1">&#39;Alex&#39;</span><span class="p">,</span> <span class="s1">&#39;Bob&#39;</span><span class="p">,</span> <span class="s1">&#39;Carl&#39;</span><span class="p">]))</span>
<a id="__codelineno-13-5" name="__codelineno-13-5"></a><span class="n">d</span> <span class="o">=</span> <span class="nb">dict</span> <span class="p">([(</span><span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;Alex&#39;</span><span class="p">),</span> <span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;Bob&#39;</span><span class="p">),</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s1">&#39;Carl&#39;</span><span class="p">)])</span>
<a id="__codelineno-13-6" name="__codelineno-13-6"></a>
<a id="__codelineno-13-7" name="__codelineno-13-7"></a><span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="c1"># returns value associated with key</span>
<a id="__codelineno-13-8" name="__codelineno-13-8"></a><span class="n">d</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;Dan&#39;</span> <span class="c1"># add or change element</span>
<a id="__codelineno-13-9" name="__codelineno-13-9"></a><span class="nb">list</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="c1"># returns a list of all elements</span>
<a id="__codelineno-13-10" name="__codelineno-13-10"></a><span class="nb">len</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> <span class="c1"># returns the number of elements</span>
<a id="__codelineno-13-11" name="__codelineno-13-11"></a><span class="k">del</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> <span class="c1"># delete element</span>
<a id="__codelineno-13-12" name="__codelineno-13-12"></a>
<a id="__codelineno-13-13" name="__codelineno-13-13"></a><span class="c1"># DICTIONARY METHODS</span>
<a id="__codelineno-13-14" name="__codelineno-13-14"></a><span class="n">d</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span> <span class="c1"># remove all elements</span>
<a id="__codelineno-13-15" name="__codelineno-13-15"></a><span class="n">d</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="c1"># shallow copy of the dictionary</span>
<a id="__codelineno-13-16" name="__codelineno-13-16"></a><span class="n">d</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># returns the value associated with key</span>
<a id="__codelineno-13-17" name="__codelineno-13-17"></a><span class="n">d</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="c1"># return key-value pairs (view object)</span>
<a id="__codelineno-13-18" name="__codelineno-13-18"></a><span class="n">d</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="c1"># return dictionary keys (view object)</span>
<a id="__codelineno-13-19" name="__codelineno-13-19"></a><span class="n">d</span><span class="o">.</span><span class="n">values</span><span class="err"></span><span class="p">()</span> <span class="c1"># returns dictionary values (view object)</span>
<a id="__codelineno-13-20" name="__codelineno-13-20"></a><span class="n">d</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="c1"># remove and return the value associated with key</span>
<a id="__codelineno-13-21" name="__codelineno-13-21"></a><span class="n">d</span><span class="o">.</span><span class="n">popitem</span><span class="p">()</span> <span class="c1"># remove and return the last key-value pair</span>
<a id="__codelineno-13-22" name="__codelineno-13-22"></a><span class="n">d</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="p">)</span> <span class="c1"># if the key is present in the dictionary it returns it, otherwise it inserts it with the default value and returns default</span>
<a id="__codelineno-13-23" name="__codelineno-13-23"></a>
<a id="__codelineno-13-24" name="__codelineno-13-24"></a><span class="n">d</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># add or modify dictionary elements, argument must be key-value pair</span>
<a id="__codelineno-13-25" name="__codelineno-13-25"></a>
<a id="__codelineno-13-26" name="__codelineno-13-26"></a><span class="c1"># DICT UNION</span>
<a id="__codelineno-13-27" name="__codelineno-13-27"></a><span class="n">d</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;spam&#39;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s1">&#39;eggs&#39;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s1">&#39;cheese&#39;</span><span class="p">:</span> <span class="mi">3</span><span class="p">}</span>
<a id="__codelineno-13-28" name="__codelineno-13-28"></a><span class="n">e</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;cheese&#39;</span><span class="p">:</span> <span class="s1">&#39;cheddar&#39;</span><span class="p">,</span> <span class="s1">&#39;aardvark&#39;</span><span class="p">:</span> <span class="s1">&#39;Ethel&#39;</span><span class="p">}</span>
<a id="__codelineno-13-29" name="__codelineno-13-29"></a>
<a id="__codelineno-13-30" name="__codelineno-13-30"></a><span class="n">d</span> <span class="o">|</span> <span class="n">e</span> <span class="c1"># {&#39;spam&#39;: 1, &#39;eggs&#39;: 2, &#39;cheese&#39;: &#39;cheddar&#39;, &#39;aardvark&#39;: &#39;Ethel&#39;}</span>
<a id="__codelineno-13-31" name="__codelineno-13-31"></a><span class="n">e</span> <span class="o">|</span> <span class="n">d</span> <span class="c1"># {&#39;aardvark&#39;: &#39;Ethel&#39;, &#39;spam&#39;: 1, &#39;eggs&#39;: 2, &#39;cheese&#39;: 3}</span>
<a id="__codelineno-13-32" name="__codelineno-13-32"></a><span class="n">d</span> <span class="o">|=</span> <span class="n">e</span> <span class="c1"># {&#39;spam&#39;: 1, &#39;eggs&#39;: 2, &#39;cheese&#39;: &#39;cheddar&#39;, &#39;aardvark&#39;: &#39;Ethel&#39;}</span>
<a id="__codelineno-13-33" name="__codelineno-13-33"></a>
<a id="__codelineno-13-34" name="__codelineno-13-34"></a><span class="c1"># NESTED DICTIONARIES (it is possible to nest dictionaries within dictionaries)</span>
<a id="__codelineno-13-35" name="__codelineno-13-35"></a><span class="n">my_dict</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;key_1&#39;</span><span class="p">:</span> <span class="mi">123</span><span class="p">,</span> <span class="s1">&#39;key_2&#39;</span><span class="p">:</span> <span class="p">[</span><span class="mi">12</span><span class="p">,</span> <span class="mi">23</span><span class="p">,</span> <span class="mi">33</span><span class="p">],</span> <span class="s1">&#39;key_3&#39;</span><span class="p">:</span> <span class="p">[</span><span class="s1">&#39;item_0&#39;</span><span class="p">,</span> <span class="s1">&#39;item_1&#39;</span><span class="p">,</span> <span class="s1">&#39;item_2&#39;</span><span class="p">]}</span>
<a id="__codelineno-13-36" name="__codelineno-13-36"></a><span class="n">my_dict</span> <span class="p">[</span><span class="s1">&#39;key&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># returns nested element</span>
<a id="__codelineno-13-37" name="__codelineno-13-37"></a>
<a id="__codelineno-13-38" name="__codelineno-13-38"></a><span class="c1"># DICT COMPREHENSIONS</span>
<a id="__codelineno-13-39" name="__codelineno-13-39"></a><span class="n">var</span> <span class="o">=</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">value</span> <span class="k">for</span> <span class="n">element</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">}</span>
</code></pre></div></td></tr></table></div>
<h2 id="operators">Operators</h2>
<h3 id="mathematical-operators">Mathematical Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td>x <code>+</code> y</td>
<td>addition, string concatenation</td>
</tr>
<tr>
<td>x <code>-</code> y</td>
<td>subtraction</td>
</tr>
<tr>
<td>x <code>*</code> y</td>
<td>multiplication</td>
</tr>
<tr>
<td>x <code>*+</code> y</td>
<td>exponentiation</td>
</tr>
<tr>
<td>x <code>/</code> y</td>
<td>division (result always float)</td>
</tr>
<tr>
<td>x <code>//</code> y</td>
<td>integer division</td>
</tr>
<tr>
<td>x <code>%</code> y</td>
<td>modulo, remainder</td>
</tr>
</tbody>
</table>
<h3 id="relational-operators">Relational Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td>x <code>&lt;</code> y</td>
<td>less than</td>
</tr>
<tr>
<td>x <code>&lt;=</code> y</td>
<td>less or equal to</td>
</tr>
<tr>
<td>x <code>&gt;</code> y</td>
<td>greater than</td>
</tr>
<tr>
<td>x <code>&gt;=</code> y</td>
<td>greater or equal to</td>
</tr>
<tr>
<td>x <code>==</code> y</td>
<td>equality</td>
</tr>
<tr>
<td>x <code>!=</code> y</td>
<td>inequality</td>
</tr>
</tbody>
</table>
<h3 id="assignment">Assignment</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td>x <code>+=</code> y</td>
<td>x = x + y</td>
</tr>
<tr>
<td>x <code>-=</code> y</td>
<td>x = x - y</td>
</tr>
<tr>
<td>x <code>*=</code> y</td>
<td>x = x * y</td>
</tr>
<tr>
<td>x <code>/=</code> y</td>
<td>x = x / y</td>
</tr>
<tr>
<td>x <code>//=</code> y</td>
<td>x = x // y</td>
</tr>
<tr>
<td>x <code>%=</code> y</td>
<td>x = x % y</td>
</tr>
<tr>
<td>x <code>&lt;&lt;=</code> y</td>
<td>x = x &lt;&lt; y</td>
</tr>
<tr>
<td>x <code>&gt;&gt;=</code> y</td>
<td>x = x &gt;&gt; y</td>
</tr>
<tr>
<td>x <code>&amp;=</code> y</td>
<td>x = x &amp; y</td>
</tr>
<tr>
<td>x <code>| =</code> y</td>
<td>x = x</td>
</tr>
<tr>
<td>x <code>^=</code> y</td>
<td>x = x ^ y</td>
</tr>
</tbody>
</table>
<h3 id="bitwise-operators">Bitwise Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>~</code>x</td>
<td>bitwise NOT</td>
</tr>
<tr>
<td>x <code>&amp;</code> y</td>
<td>bitwise AND</td>
</tr>
<tr>
<td>x <code>^</code> y</td>
<td>bitwise XOR</td>
</tr>
<tr>
<td>x <code>|</code> y</td>
<td>bitwise OR</td>
</tr>
<tr>
<td>x <code>&lt;&lt;</code> y</td>
<td>left bit shift</td>
</tr>
<tr>
<td>x <code>&gt;&gt;</code> y</td>
<td>right bit shift</td>
</tr>
</tbody>
</table>
<h3 id="logical-operators">Logical Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>and</code></td>
<td>logical AND</td>
</tr>
<tr>
<td><code>or</code></td>
<td>logical OR</td>
</tr>
<tr>
<td><code>not</code></td>
<td>logical NOT</td>
</tr>
</tbody>
</table>
<h3 id="identity-operators">Identity Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>is</code></td>
<td>reference equality</td>
</tr>
<tr>
<td><code>is not</code></td>
<td>reference inequality</td>
</tr>
</tbody>
</table>
<h3 id="membership-operators">Membership Operators</h3>
<table>
<thead>
<tr>
<th>Operator</th>
<th>Operation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>in</code></td>
<td>item in collection</td>
</tr>
<tr>
<td><code>not in</code></td>
<td>item not in collection</td>
</tr>
</tbody>
</table>
<h3 id="operator-precedence">OPerator Precedence</h3>
<ol>
<li>assignment operators <code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code>, <code>%=</code>, <code>**=</code>, <code>//=</code></li>
<li>binary arithmetic operators <code>*</code>, <code>/</code>, <code>%</code>, <code>//</code> (floor division)</li>
<li>binary arithmetic operators <code>+</code>, <code>-</code></li>
<li>boolean operators <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code></li>
<li>boolean operators <code>==</code>, <code>!=</code></li>
<li>boolean operator <code>and</code></li>
<li>boolean operator <code>or</code></li>
<li>boolean operator <code>not</code></li>
</ol>
<h2 id="conditional-statements">Conditional Statements</h2>
<p>Any object can be tested for truth value for use in an if or while condition or as operand of the Boolean operations.</p>
<p>built-in objects considered <em>false</em>:</p>
<ul>
<li>constants defined to be false: <code>None</code> and <code>False</code>.</li>
<li>zero of any numeric type: <code>0</code>, <code>0.0</code>, <code>0j</code>, <code>Decimal(0)</code>, <code>Fraction(0, 1)</code></li>
<li>empty sequences and collections: <code>''</code>, <code>()</code>, <code>[]</code>, <code>{}</code>, <code>set()</code>, <code>range(0)</code></li>
</ul>
<h3 id="if-else"><code>if-else</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-14-1">1</a></span>
<span class="normal"><a href="#__codelineno-14-2">2</a></span>
<span class="normal"><a href="#__codelineno-14-3">3</a></span>
<span class="normal"><a href="#__codelineno-14-4">4</a></span>
<span class="normal"><a href="#__codelineno-14-5">5</a></span>
<span class="normal"><a href="#__codelineno-14-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1"></a><span class="k">if</span> <span class="p">(</span><span class="n">condition</span><span class="p">):</span>
<a id="__codelineno-14-2" name="__codelineno-14-2"></a> <span class="c1"># code here</span>
<a id="__codelineno-14-3" name="__codelineno-14-3"></a><span class="k">elif</span> <span class="p">(</span><span class="n">condition</span><span class="p">):</span>
<a id="__codelineno-14-4" name="__codelineno-14-4"></a> <span class="c1"># code here</span>
<a id="__codelineno-14-5" name="__codelineno-14-5"></a><span class="k">else</span><span class="p">:</span>
<a id="__codelineno-14-6" name="__codelineno-14-6"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="context-manager">Context Manager</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-15-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-15-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-15-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-15-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-15-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-15-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-15-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-15-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-15-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-15-10">10</a></span>
<span class="normal"><a href="#__codelineno-15-11">11</a></span>
<span class="normal"><a href="#__codelineno-15-12">12</a></span>
<span class="normal"><a href="#__codelineno-15-13">13</a></span>
<span class="normal"><a href="#__codelineno-15-14">14</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1"></a><span class="k">with</span> <span class="n">resource</span> <span class="k">as</span> <span class="n">target</span><span class="p">:</span>
<a id="__codelineno-15-2" name="__codelineno-15-2"></a> <span class="c1"># code here</span>
<a id="__codelineno-15-3" name="__codelineno-15-3"></a>
<a id="__codelineno-15-4" name="__codelineno-15-4"></a><span class="c1"># start context manager and bind resource returned by method to target using as operator</span>
<a id="__codelineno-15-5" name="__codelineno-15-5"></a><span class="n">contextmanager</span><span class="o">.</span><span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-15-6" name="__codelineno-15-6"></a>
<a id="__codelineno-15-7" name="__codelineno-15-7"></a><span class="c1"># exit runtime context</span>
<a id="__codelineno-15-8" name="__codelineno-15-8"></a><span class="c1"># returns exc_type, exc_value, traceback</span>
<a id="__codelineno-15-9" name="__codelineno-15-9"></a><span class="n">contextmanager</span><span class="o">.</span><span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">)</span>
<a id="__codelineno-15-10" name="__codelineno-15-10"></a><span class="c1"># exc_type: exception class</span>
<a id="__codelineno-15-11" name="__codelineno-15-11"></a><span class="c1"># exc_value: exception instance</span>
<a id="__codelineno-15-12" name="__codelineno-15-12"></a><span class="c1"># traceback: traceback object</span>
<a id="__codelineno-15-13" name="__codelineno-15-13"></a><span class="c1"># NO EXCEPTION -&gt; returns None, None, None</span>
<a id="__codelineno-15-14" name="__codelineno-15-14"></a><span class="c1"># SUPPRESSION EXCEPTION: Must return True value</span>
</code></pre></div></td></tr></table></div>
<h2 id="loops">Loops</h2>
<h3 id="while"><code>while</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-16-1">1</a></span>
<span class="normal"><a href="#__codelineno-16-2">2</a></span>
<span class="normal"><a href="#__codelineno-16-3">3</a></span>
<span class="normal"><a href="#__codelineno-16-4">4</a></span>
<span class="normal"><a href="#__codelineno-16-5">5</a></span>
<span class="normal"><a href="#__codelineno-16-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1"></a><span class="k">while</span><span class="p">(</span><span class="n">condition</span><span class="p">):</span>
<a id="__codelineno-16-2" name="__codelineno-16-2"></a> <span class="c1"># code here</span>
<a id="__codelineno-16-3" name="__codelineno-16-3"></a><span class="k">else</span><span class="p">:</span>
<a id="__codelineno-16-4" name="__codelineno-16-4"></a> <span class="c1"># executed only if condition becomes False</span>
<a id="__codelineno-16-5" name="__codelineno-16-5"></a> <span class="c1"># break, continue, return in block while do not perform else block</span>
<a id="__codelineno-16-6" name="__codelineno-16-6"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="for"><code>for</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-17-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-17-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-17-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-17-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-17-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-17-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-17-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-17-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-17-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-17-10">10</a></span>
<span class="normal"><a href="#__codelineno-17-11">11</a></span>
<span class="normal"><a href="#__codelineno-17-12">12</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1"></a><span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">sequence</span><span class="p">:</span> <span class="c1"># sequence can be a list, set, tuple, etc ..</span>
<a id="__codelineno-17-2" name="__codelineno-17-2"></a> <span class="c1"># code here</span>
<a id="__codelineno-17-3" name="__codelineno-17-3"></a><span class="k">else</span><span class="p">:</span>
<a id="__codelineno-17-4" name="__codelineno-17-4"></a> <span class="c1"># executed only if for reaches the end of the loop</span>
<a id="__codelineno-17-5" name="__codelineno-17-5"></a> <span class="c1"># break, continue, return in block for do not perform else block</span>
<a id="__codelineno-17-6" name="__codelineno-17-6"></a> <span class="c1"># code here</span>
<a id="__codelineno-17-7" name="__codelineno-17-7"></a>
<a id="__codelineno-17-8" name="__codelineno-17-8"></a><span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span> <span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">):</span>
<a id="__codelineno-17-9" name="__codelineno-17-9"></a> <span class="c1"># code here</span>
<a id="__codelineno-17-10" name="__codelineno-17-10"></a>
<a id="__codelineno-17-11" name="__codelineno-17-11"></a><span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">dict</span><span class="o">.</span><span class="n">items</span> <span class="p">():</span>
<a id="__codelineno-17-12" name="__codelineno-17-12"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="break-continue"><code>break</code> &amp; <code>continue</code></h3>
<p><code>break</code>: causes the loop to exit immediately without executing subsequent iterations
<code>continue</code>: skip the remaining iteration statements and continue the loop</p>
<h3 id="range"><code>range</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-18-1">1</a></span>
<span class="normal"><a href="#__codelineno-18-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1"></a><span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">)</span> <span class="c1"># generate sequence num integers (does not include num stops) with possible step</span>
<a id="__codelineno-18-2" name="__codelineno-18-2"></a><span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">,</span> <span class="n">step</span><span class="p">))</span> <span class="c1"># return sequence of integers in a list</span>
</code></pre></div></td></tr></table></div>
<h3 id="enumerate"><code>enumerate</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-19-1">1</a></span>
<span class="normal"><a href="#__codelineno-19-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1"></a><span class="nb">enumerate</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># iterable of item &amp; index pairs</span>
<a id="__codelineno-19-2" name="__codelineno-19-2"></a><span class="nb">list</span><span class="p">(</span><span class="nb">enumerate</span><span class="p">(</span><span class="n">iterable</span><span class="p">))</span> <span class="c1"># returns list of tuples [(1, iterable [0]), (2, iterable [1]), (3, iterable [2])]</span>
</code></pre></div></td></tr></table></div>
<h3 id="zip"><code>zip</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-20-1">1</a></span>
<span class="normal"><a href="#__codelineno-20-2">2</a></span>
<span class="normal"><a href="#__codelineno-20-3">3</a></span>
<span class="normal"><a href="#__codelineno-20-4">4</a></span>
<span class="normal"><a href="#__codelineno-20-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1"></a><span class="n">list_1</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">]</span>
<a id="__codelineno-20-2" name="__codelineno-20-2"></a><span class="n">list_2</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;b&#39;</span><span class="p">,</span> <span class="s1">&#39;c&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">]</span>
<a id="__codelineno-20-3" name="__codelineno-20-3"></a>
<a id="__codelineno-20-4" name="__codelineno-20-4"></a><span class="nb">zip</span><span class="p">(</span><span class="n">list_1</span><span class="p">,</span> <span class="n">list_2</span><span class="p">)</span> <span class="c1"># return zip object</span>
<a id="__codelineno-20-5" name="__codelineno-20-5"></a><span class="nb">list</span><span class="p">(</span><span class="nb">zip</span><span class="p">(</span><span class="n">list_1</span><span class="p">,</span> <span class="n">list_2</span><span class="p">))</span> <span class="c1"># returns list of tuples by merging list [(list_1 [0], list_2 [0]), (list_1 [1], list_2 [1]), ...]</span>
</code></pre></div></td></tr></table></div>
<h3 id="shuffle-randint"><code>shuffle</code> &amp; <code>randint</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-21-1">1</a></span>
<span class="normal"><a href="#__codelineno-21-2">2</a></span>
<span class="normal"><a href="#__codelineno-21-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-21-1" name="__codelineno-21-1"></a><span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">shuffle</span><span class="p">,</span> <span class="n">randint</span>
<a id="__codelineno-21-2" name="__codelineno-21-2"></a><span class="n">shuffle</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># shuffle the list</span>
<a id="__codelineno-21-3" name="__codelineno-21-3"></a><span class="n">randint</span><span class="p">(</span><span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span> <span class="c1"># returns a random integer between start and end</span>
</code></pre></div></td></tr></table></div>
<h3 id="in"><code>in</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-22-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-22-1" name="__codelineno-22-1"></a><span class="n">item</span> <span class="ow">in</span> <span class="n">iterable</span> <span class="c1"># check for the presence of item in iterable (returns True or False)</span>
</code></pre></div></td></tr></table></div>
<h2 id="functions">Functions</h2>
<h3 id="function-definition">Function Definition</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-23-1">1</a></span>
<span class="normal"><a href="#__codelineno-23-2">2</a></span>
<span class="normal"><a href="#__codelineno-23-3">3</a></span>
<span class="normal"><a href="#__codelineno-23-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-23-1" name="__codelineno-23-1"></a><span class="k">def</span> <span class="nf">function_name</span> <span class="p">(</span><span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-23-2" name="__codelineno-23-2"></a> <span class="s2">&quot;&quot;</span> <span class="s2">&quot;DOCSTRING&quot;</span> <span class="s2">&quot;&quot;</span>
<a id="__codelineno-23-3" name="__codelineno-23-3"></a> <span class="c1"># code here</span>
<a id="__codelineno-23-4" name="__codelineno-23-4"></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># if return id missing the function returns None</span>
</code></pre></div></td></tr></table></div>
<h3 id="specify-type-parameters-in-functions">Specify Type Parameters In Functions</h3>
<ul>
<li>parameters before <code>/</code> can only be <em>positional</em></li>
<li>parameters between <code>/</code> and <code>*</code> can be <em>positional</em> or <em>keyworded</em></li>
<li>parameters after <code>*</code> can only be <em>keyworded</em></li>
</ul>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-24-1">1</a></span>
<span class="normal"><a href="#__codelineno-24-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-24-1" name="__codelineno-24-1"></a><span class="k">def</span> <span class="nf">func</span> <span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">f</span><span class="p">):</span>
<a id="__codelineno-24-2" name="__codelineno-24-2"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="docstring-style">Docstring Style</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-25-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-25-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-25-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-25-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-25-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-25-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-25-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-25-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-25-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-25-10">10</a></span>
<span class="normal"><a href="#__codelineno-25-11">11</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-25-1" name="__codelineno-25-1"></a><span class="sd">&quot;&quot;&quot;function description</span>
<a id="__codelineno-25-2" name="__codelineno-25-2"></a>
<a id="__codelineno-25-3" name="__codelineno-25-3"></a><span class="sd">Args:</span>
<a id="__codelineno-25-4" name="__codelineno-25-4"></a><span class="sd"> argument: Type - description of the parameter</span>
<a id="__codelineno-25-5" name="__codelineno-25-5"></a>
<a id="__codelineno-25-6" name="__codelineno-25-6"></a><span class="sd">Returns:</span>
<a id="__codelineno-25-7" name="__codelineno-25-7"></a><span class="sd"> Type - description of &lt;expr&gt;</span>
<a id="__codelineno-25-8" name="__codelineno-25-8"></a>
<a id="__codelineno-25-9" name="__codelineno-25-9"></a><span class="sd">Raises:</span>
<a id="__codelineno-25-10" name="__codelineno-25-10"></a><span class="sd"> Exception: Cause of the exception</span>
<a id="__codelineno-25-11" name="__codelineno-25-11"></a><span class="sd">&quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
<h3 id="args-kwargs"><em>args </em>*kwargs</h3>
<p><code>*args</code> allows the function to accept a variable number of parameters (parameters stored in a tuple)
<code>**kwargs</code> allows the function to accept a variable number of key-value parameters (parameters stored in a dictionary)</p>
<p>When used in combination <code>*args</code> always goes before<code>**kwargs</code> (in def function and in function call)</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-26-1">1</a></span>
<span class="normal"><a href="#__codelineno-26-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-26-1" name="__codelineno-26-1"></a><span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<a id="__codelineno-26-2" name="__codelineno-26-2"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="function-with-default-parameters">Function with default parameters</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-27-1">1</a></span>
<span class="normal"><a href="#__codelineno-27-2">2</a></span>
<span class="normal"><a href="#__codelineno-27-3">3</a></span>
<span class="normal"><a href="#__codelineno-27-4">4</a></span>
<span class="normal"><a href="#__codelineno-27-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-27-1" name="__codelineno-27-1"></a><span class="k">def</span> <span class="nf">function</span><span class="p">(</span><span class="n">parameter1</span> <span class="o">=</span> <span class="n">value1</span><span class="p">,</span> <span class="n">parameter2</span> <span class="o">=</span> <span class="n">value3</span><span class="p">):</span> <span class="c1"># default values in case of omitted use of arguments in the call</span>
<a id="__codelineno-27-2" name="__codelineno-27-2"></a> <span class="c1"># code here</span>
<a id="__codelineno-27-3" name="__codelineno-27-3"></a> <span class="k">return</span> <span class="n">expression</span>
<a id="__codelineno-27-4" name="__codelineno-27-4"></a>
<a id="__codelineno-27-5" name="__codelineno-27-5"></a><span class="n">function</span><span class="p">(</span><span class="n">parameter2</span> <span class="o">=</span> <span class="n">value2</span><span class="p">,</span> <span class="n">parameter1</span> <span class="o">=</span> <span class="n">value1</span><span class="p">)</span> <span class="c1"># arguments passed with keyword to enforce the order of reference</span>
</code></pre></div></td></tr></table></div>
<h3 id="global-and-local-variables">Global And Local Variables</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-28-1">1</a></span>
<span class="normal"><a href="#__codelineno-28-2">2</a></span>
<span class="normal"><a href="#__codelineno-28-3">3</a></span>
<span class="normal"><a href="#__codelineno-28-4">4</a></span>
<span class="normal"><a href="#__codelineno-28-5">5</a></span>
<span class="normal"><a href="#__codelineno-28-6">6</a></span>
<span class="normal"><a href="#__codelineno-28-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-28-1" name="__codelineno-28-1"></a><span class="c1"># global scope</span>
<a id="__codelineno-28-2" name="__codelineno-28-2"></a>
<a id="__codelineno-28-3" name="__codelineno-28-3"></a><span class="k">def</span> <span class="nf">external_func</span><span class="p">():</span>
<a id="__codelineno-28-4" name="__codelineno-28-4"></a> <span class="c1"># enclosing local scope</span>
<a id="__codelineno-28-5" name="__codelineno-28-5"></a>
<a id="__codelineno-28-6" name="__codelineno-28-6"></a> <span class="k">def</span> <span class="nf">internal_func</span><span class="p">():</span>
<a id="__codelineno-28-7" name="__codelineno-28-7"></a> <span class="c1"># local scope</span>
</code></pre></div></td></tr></table></div>
<p><strong>LEGB Rule</strong>:</p>
<ul>
<li><strong>L</strong> - <strong>Local</strong>: Names assigned in any way within a function (<code>def</code> or <code>lambda</code>), and not declared global in that function.</li>
<li><strong>E</strong> - <strong>Enclosing function locals</strong>: Names in the local scope of any and all enclosing functions (<code>def</code> or <code>lambda</code>), from inner to outer.</li>
<li><strong>G</strong> - <strong>Global</strong> (module): Names assigned at the top-level of a module file, or declared global in a def within the file.</li>
<li><strong>B</strong> - <strong>Built-in</strong> (Python): Names preassigned in the built-in names module : <code>open</code>, <code>range</code>, <code>SyntaxError</code>,...</li>
</ul>
<p><code>Note</code>: variables declared inside a function are not usable outside</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-29-1">1</a></span>
<span class="normal"><a href="#__codelineno-29-2">2</a></span>
<span class="normal"><a href="#__codelineno-29-3">3</a></span>
<span class="normal"><a href="#__codelineno-29-4">4</a></span>
<span class="normal"><a href="#__codelineno-29-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-29-1" name="__codelineno-29-1"></a><span class="k">def</span> <span class="nf">function</span><span class="p">():</span>
<a id="__codelineno-29-2" name="__codelineno-29-2"></a> <span class="c1"># global statement makes a variable global</span>
<a id="__codelineno-29-3" name="__codelineno-29-3"></a> <span class="c1"># actions on global variable within the function also have an effect outside</span>
<a id="__codelineno-29-4" name="__codelineno-29-4"></a>
<a id="__codelineno-29-5" name="__codelineno-29-5"></a> <span class="k">global</span> <span class="n">variable</span>
</code></pre></div></td></tr></table></div>
<h3 id="iterables-iterators-generators">Iterables, Iterators &amp; Generators</h3>
<p><strong>Iterable</strong>: object implementing <code>__iter __()</code>, sequences and objects supporting <code>__getitem__</code> with index <code>0</code></p>
<p><strong>Iterator</strong>: object implementing <code>__next__</code> and <code>__iter__</code> (<strong>iterator protocol</strong>), when entirely consumed by <code>next()</code> it becomes unusable. Returns <code>StopIteration</code> when <code>next()</code> has returned all elements.</p>
<p><strong>Generator Function</strong>: function with keyword <code>yield</code> (if present also <code>return</code> causes <code>StopIteration</code>), returns a generator that produces the values one at a time.</p>
<p><strong>Generator Factory</strong>: generator returning function (may not contain <code>yield</code>).</p>
<p>Operation <code>iter()</code>:</p>
<ul>
<li>calls <code>__iter__()</code></li>
<li>in the absence of it python uses <code>__getitem__()</code> (if present) to create an iterator that tries to retrieve the items in order, starting from the index <code>0</code></li>
<li>on failure it returns <code>TypeError</code></li>
</ul>
<p><strong>Note</strong>: <code>abc.Iterable</code> does not check for the presence of <code>__getitem__</code> to decide if a sub-object is a member therefore the best test for iterability is to use <code>iter()</code> and handle exceptions.</p>
<h3 id="next-iter"><code>next()</code> &amp; <code>iter()</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-30-1">1</a></span>
<span class="normal"><a href="#__codelineno-30-2">2</a></span>
<span class="normal"><a href="#__codelineno-30-3">3</a></span>
<span class="normal"><a href="#__codelineno-30-4">4</a></span>
<span class="normal"><a href="#__codelineno-30-5">5</a></span>
<span class="normal"><a href="#__codelineno-30-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-30-1" name="__codelineno-30-1"></a><span class="nb">next</span><span class="p">(</span><span class="n">iterable</span><span class="p">)</span> <span class="c1"># next item of the iterable or error StopIteration</span>
<a id="__codelineno-30-2" name="__codelineno-30-2"></a>
<a id="__codelineno-30-3" name="__codelineno-30-3"></a><span class="nb">iter</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="c1"># get an iterator from an object</span>
<a id="__codelineno-30-4" name="__codelineno-30-4"></a><span class="c1"># call callable_onj.next () with no arguments as long as it returns non-sentinel values</span>
<a id="__codelineno-30-5" name="__codelineno-30-5"></a>
<a id="__codelineno-30-6" name="__codelineno-30-6"></a><span class="nb">iter</span><span class="p">(</span><span class="n">callable_obj</span><span class="p">,</span> <span class="n">sentinel</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
<h3 id="customs-generators">Customs Generators</h3>
<p>Used to generate a sequence of values to be used once (they are not stored)</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-31-1">1</a></span>
<span class="normal"><a href="#__codelineno-31-2">2</a></span>
<span class="normal"><a href="#__codelineno-31-3">3</a></span>
<span class="normal"><a href="#__codelineno-31-4">4</a></span>
<span class="normal"><a href="#__codelineno-31-5">5</a></span>
<span class="normal"><a href="#__codelineno-31-6">6</a></span>
<span class="normal"><a href="#__codelineno-31-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-31-1" name="__codelineno-31-1"></a><span class="k">def</span> <span class="nf">custom_generator</span><span class="p">(</span><span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-31-2" name="__codelineno-31-2"></a> <span class="k">while</span> <span class="n">condition</span><span class="p">:</span> <span class="c1"># or for loop</span>
<a id="__codelineno-31-3" name="__codelineno-31-3"></a> <span class="k">yield</span> <span class="n">variable</span> <span class="c1"># returns the value without terminating the function, values passed to the caller without storing in a variable</span>
<a id="__codelineno-31-4" name="__codelineno-31-4"></a>
<a id="__codelineno-31-5" name="__codelineno-31-5"></a><span class="c1"># generator implementation</span>
<a id="__codelineno-31-6" name="__codelineno-31-6"></a><span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">custom_generator</span><span class="p">(</span><span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-31-7" name="__codelineno-31-7"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h3 id="termination-generator-and-exception-handling">Termination Generator And Exception Handling</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-32-1">1</a></span>
<span class="normal"><a href="#__codelineno-32-2">2</a></span>
<span class="normal"><a href="#__codelineno-32-3">3</a></span>
<span class="normal"><a href="#__codelineno-32-4">4</a></span>
<span class="normal"><a href="#__codelineno-32-5">5</a></span>
<span class="normal"><a href="#__codelineno-32-6">6</a></span>
<span class="normal"><a href="#__codelineno-32-7">7</a></span>
<span class="normal"><a href="#__codelineno-32-8">8</a></span>
<span class="normal"><a href="#__codelineno-32-9">9</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-32-1" name="__codelineno-32-1"></a><span class="c1"># raise exception at the suspension point and return generator value</span>
<a id="__codelineno-32-2" name="__codelineno-32-2"></a><span class="c1"># if the generator terminates without returning values it raises StopIteration</span>
<a id="__codelineno-32-3" name="__codelineno-32-3"></a><span class="c1"># if an exception is not handled it is propagated to the caller</span>
<a id="__codelineno-32-4" name="__codelineno-32-4"></a><span class="n">generator</span><span class="o">.</span><span class="n">throw</span><span class="p">(</span><span class="n">ExceptionType</span><span class="p">,</span> <span class="n">exception_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">)</span>
<a id="__codelineno-32-5" name="__codelineno-32-5"></a>
<a id="__codelineno-32-6" name="__codelineno-32-6"></a><span class="c1"># raises GeneratorExit to the point of suspension</span>
<a id="__codelineno-32-7" name="__codelineno-32-7"></a><span class="c1"># if generator returns a value -&gt; RuntimeError</span>
<a id="__codelineno-32-8" name="__codelineno-32-8"></a><span class="c1"># if an exception is raised it propagates to the caller</span>
<a id="__codelineno-32-9" name="__codelineno-32-9"></a><span class="n">generator</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
<h3 id="generator-comprehensions">Generator Comprehensions</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-33-1">1</a></span>
<span class="normal"><a href="#__codelineno-33-2">2</a></span>
<span class="normal"><a href="#__codelineno-33-3">3</a></span>
<span class="normal"><a href="#__codelineno-33-4">4</a></span>
<span class="normal"><a href="#__codelineno-33-5">5</a></span>
<span class="normal"><a href="#__codelineno-33-6">6</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-33-1" name="__codelineno-33-1"></a><span class="c1"># zero-length sequence (instantaneously generated values)</span>
<a id="__codelineno-33-2" name="__codelineno-33-2"></a><span class="n">var</span> <span class="o">=</span> <span class="p">(</span><span class="k">for</span> <span class="n">expression</span> <span class="n">iterable</span> <span class="ow">in</span> <span class="n">sequence</span> <span class="k">if</span> <span class="n">condition</span><span class="p">)</span>
<a id="__codelineno-33-3" name="__codelineno-33-3"></a><span class="c1"># EDUCATION ENUMERATE ()</span>
<a id="__codelineno-33-4" name="__codelineno-33-4"></a><span class="c1"># returns a list of tuples associating a position index to each element of the sequence</span>
<a id="__codelineno-33-5" name="__codelineno-33-5"></a><span class="c1"># [(0, sequence [0]), (1, sequence [1]), (2, sequence [2]), ...)</span>
<a id="__codelineno-33-6" name="__codelineno-33-6"></a><span class="nb">enumerate</span><span class="p">(</span><span class="n">sequence</span><span class="p">)</span> <span class="c1"># -&gt; enumerate object</span>
</code></pre></div></td></tr></table></div>
<h2 id="coroutines">Coroutines</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-34-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-34-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-34-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-34-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-34-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-34-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-34-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-34-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-34-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-34-10">10</a></span>
<span class="normal"><a href="#__codelineno-34-11">11</a></span>
<span class="normal"><a href="#__codelineno-34-12">12</a></span>
<span class="normal"><a href="#__codelineno-34-13">13</a></span>
<span class="normal"><a href="#__codelineno-34-14">14</a></span>
<span class="normal"><a href="#__codelineno-34-15">15</a></span>
<span class="normal"><a href="#__codelineno-34-16">16</a></span>
<span class="normal"><a href="#__codelineno-34-17">17</a></span>
<span class="normal"><a href="#__codelineno-34-18">18</a></span>
<span class="normal"><a href="#__codelineno-34-19">19</a></span>
<span class="normal"><a href="#__codelineno-34-20">20</a></span>
<span class="normal"><a href="#__codelineno-34-21">21</a></span>
<span class="normal"><a href="#__codelineno-34-22">22</a></span>
<span class="normal"><a href="#__codelineno-34-23">23</a></span>
<span class="normal"><a href="#__codelineno-34-24">24</a></span>
<span class="normal"><a href="#__codelineno-34-25">25</a></span>
<span class="normal"><a href="#__codelineno-34-26">26</a></span>
<span class="normal"><a href="#__codelineno-34-27">27</a></span>
<span class="normal"><a href="#__codelineno-34-28">28</a></span>
<span class="normal"><a href="#__codelineno-34-29">29</a></span>
<span class="normal"><a href="#__codelineno-34-30">30</a></span>
<span class="normal"><a href="#__codelineno-34-31">31</a></span>
<span class="normal"><a href="#__codelineno-34-32">32</a></span>
<span class="normal"><a href="#__codelineno-34-33">33</a></span>
<span class="normal"><a href="#__codelineno-34-34">34</a></span>
<span class="normal"><a href="#__codelineno-34-35">35</a></span>
<span class="normal"><a href="#__codelineno-34-36">36</a></span>
<span class="normal"><a href="#__codelineno-34-37">37</a></span>
<span class="normal"><a href="#__codelineno-34-38">38</a></span>
<span class="normal"><a href="#__codelineno-34-39">39</a></span>
<span class="normal"><a href="#__codelineno-34-40">40</a></span>
<span class="normal"><a href="#__codelineno-34-41">41</a></span>
<span class="normal"><a href="#__codelineno-34-42">42</a></span>
<span class="normal"><a href="#__codelineno-34-43">43</a></span>
<span class="normal"><a href="#__codelineno-34-44">44</a></span>
<span class="normal"><a href="#__codelineno-34-45">45</a></span>
<span class="normal"><a href="#__codelineno-34-46">46</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-34-1" name="__codelineno-34-1"></a><span class="k">def</span> <span class="nf">simple_coroutine</span><span class="p">():</span>
<a id="__codelineno-34-2" name="__codelineno-34-2"></a><span class="w"> </span><span class="sd">&quot;&quot;&quot;coroutine defined as a generator: yield in block&quot;&quot;&quot;</span>
<a id="__codelineno-34-3" name="__codelineno-34-3"></a>
<a id="__codelineno-34-4" name="__codelineno-34-4"></a> <span class="c1"># yield in expression to receive data</span>
<a id="__codelineno-34-5" name="__codelineno-34-5"></a> <span class="c1"># returns None (no variables on the right of yield)</span>
<a id="__codelineno-34-6" name="__codelineno-34-6"></a> <span class="n">var</span> <span class="o">=</span> <span class="k">yield</span> <span class="n">value</span> <span class="c1"># returns value and then suspends coroutine waiting for input</span>
<a id="__codelineno-34-7" name="__codelineno-34-7"></a> <span class="c1"># instructions to the right of = executed before instructions to the left of =</span>
<a id="__codelineno-34-8" name="__codelineno-34-8"></a>
<a id="__codelineno-34-9" name="__codelineno-34-9"></a><span class="n">gen_obj</span> <span class="o">=</span> <span class="n">simple_coroutine</span><span class="p">()</span> <span class="c1"># returns generator object</span>
<a id="__codelineno-34-10" name="__codelineno-34-10"></a><span class="nb">next</span><span class="p">(</span><span class="n">gen_obj</span><span class="p">)</span> <span class="c1"># start coroutine (PRIMING)</span>
<a id="__codelineno-34-11" name="__codelineno-34-11"></a><span class="n">gen_obj</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span> <span class="c1"># start coroutine (PRIMING)</span>
<a id="__codelineno-34-12" name="__codelineno-34-12"></a><span class="n">gen_obj</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="c1"># send value to the coroutine (only possible in suspended state)</span>
<a id="__codelineno-34-13" name="__codelineno-34-13"></a>
<a id="__codelineno-34-14" name="__codelineno-34-14"></a><span class="c1"># STATES OF COROUTINE</span>
<a id="__codelineno-34-15" name="__codelineno-34-15"></a><span class="n">inspect</span><span class="o">.</span><span class="n">generatorstate</span><span class="p">()</span> <span class="c1"># returns the status of the coroutine</span>
<a id="__codelineno-34-16" name="__codelineno-34-16"></a><span class="c1"># GEN_CREATED: waiting to start execution</span>
<a id="__codelineno-34-17" name="__codelineno-34-17"></a><span class="c1"># GEN_RUNNING: currently run by the interpreter (visible if multithreaded)</span>
<a id="__codelineno-34-18" name="__codelineno-34-18"></a><span class="c1"># GEN_SUSPENDED: currently suspended by yield statement</span>
<a id="__codelineno-34-19" name="__codelineno-34-19"></a><span class="c1"># GEN_CLOSED: execution completed successfully</span>
<a id="__codelineno-34-20" name="__codelineno-34-20"></a>
<a id="__codelineno-34-21" name="__codelineno-34-21"></a><span class="c1"># COROUTINE PRIMING</span>
<a id="__codelineno-34-22" name="__codelineno-34-22"></a><span class="kn">from</span> <span class="nn">functools</span> <span class="kn">import</span> <span class="n">wraps</span>
<a id="__codelineno-34-23" name="__codelineno-34-23"></a>
<a id="__codelineno-34-24" name="__codelineno-34-24"></a><span class="k">def</span> <span class="nf">coroutine</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<a id="__codelineno-34-25" name="__codelineno-34-25"></a> <span class="s2">&quot;Decorator: primes &#39;func&#39; by advancing to first &#39;yield&#39;&quot;</span>
<a id="__codelineno-34-26" name="__codelineno-34-26"></a>
<a id="__codelineno-34-27" name="__codelineno-34-27"></a> <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
<a id="__codelineno-34-28" name="__codelineno-34-28"></a> <span class="k">def</span> <span class="nf">primer</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<a id="__codelineno-34-29" name="__codelineno-34-29"></a> <span class="n">gen</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<a id="__codelineno-34-30" name="__codelineno-34-30"></a> <span class="nb">next</span><span class="p">(</span><span class="n">gen</span><span class="p">)</span>
<a id="__codelineno-34-31" name="__codelineno-34-31"></a> <span class="k">return</span> <span class="n">gen</span>
<a id="__codelineno-34-32" name="__codelineno-34-32"></a> <span class="k">return</span> <span class="n">primer</span>
<a id="__codelineno-34-33" name="__codelineno-34-33"></a>
<a id="__codelineno-34-34" name="__codelineno-34-34"></a><span class="c1"># COROUTINE TERMINATION AND EXCEPTION HANDLING</span>
<a id="__codelineno-34-35" name="__codelineno-34-35"></a><span class="c1"># exceptions in unhandled coroutines propagate to subsequent iterations</span>
<a id="__codelineno-34-36" name="__codelineno-34-36"></a><span class="c1"># an exception causes the coroutine to terminate which it cannot resume</span>
<a id="__codelineno-34-37" name="__codelineno-34-37"></a>
<a id="__codelineno-34-38" name="__codelineno-34-38"></a><span class="c1"># yield raises exception, if handled loop continues</span>
<a id="__codelineno-34-39" name="__codelineno-34-39"></a><span class="c1"># throw() returns value of the generator</span>
<a id="__codelineno-34-40" name="__codelineno-34-40"></a><span class="n">coroutine</span><span class="o">.</span><span class="n">throw</span><span class="p">(</span><span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">)</span>
<a id="__codelineno-34-41" name="__codelineno-34-41"></a>
<a id="__codelineno-34-42" name="__codelineno-34-42"></a><span class="c1"># yield raises GeneratorExit to the suspension point</span>
<a id="__codelineno-34-43" name="__codelineno-34-43"></a><span class="c1"># if the generator yields a value -&gt; RuntimeError</span>
<a id="__codelineno-34-44" name="__codelineno-34-44"></a><span class="c1"># if there are other exceptions they are propagated to the caller</span>
<a id="__codelineno-34-45" name="__codelineno-34-45"></a><span class="n">coroutine</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<a id="__codelineno-34-46" name="__codelineno-34-46"></a><span class="c1"># coroutine state becomes GEN_CLOSED</span>
</code></pre></div></td></tr></table></div>
<h3 id="yield-from-iterabile"><code>yield from &lt;iterabile&gt;</code></h3>
<p><strong>Note</strong>: auto-priming generators incompatible with <code>yield from</code></p>
<p><strong>DELEGATING GENERATOR</strong>: generator function containing <code>yield from</code>
<strong>SUBGENERATOR</strong>: generator obtained from <code>yield from</code>
<strong>CALLER-CLIENT</strong>: code calling <em>delegating generator</em></p>
<p>The main function of <code>yield from</code> is to open a bidirectional channel between the external caller (<em>client</em>) and the internal <em>subgenerator</em> so that values and exceptions can pass between the two.</p>
<ol>
<li>client calls delegating generator, delegating generator calls subgenerator</li>
<li>exhausted subgenerator returns value to <code>yield from &lt;expr&gt;</code> (<code>return &lt;result&gt;</code> statement)</li>
<li>
<p>delegating generator returns <code>&lt;expr&gt;</code> to client</p>
</li>
<li>
<p>Any values that the subgenerator yields are passed directly to the caller of the delegating generator (i.e., the client code).</p>
</li>
<li>
<p>Any values sent to the delegating generator using <code>send()</code> are passed directly to the subgenerator.</p>
</li>
<li>If the sent value is <code>None</code>, the subgenerator's <code>__next__()</code> method is called.</li>
<li>If the sent value is not <code>None</code>, the subgenerator's <code>send()</code> method is called.</li>
<li>If the call raises <code>StopIteration</code>, the delegating generator is resumed.</li>
<li>
<p>Any other exception is propagated to the delegating generator.</p>
</li>
<li>
<p><code>return &lt;expr&gt;</code> in a generator (or subgenerator) causes <code>StopIteration(&lt;expr&gt;)</code> to be raised upon exit from the generator.</p>
</li>
<li>
<p>The value of the <code>yield from</code> expression is the first argument to the <code>StopIteration</code> exception raised by the subgenerator when it terminates.</p>
</li>
<li>
<p>Exceptions other than <code>GeneratorExit</code> thrown into the delegating generator are passed to the <code>throw()</code> method of the subgenerator.</p>
</li>
<li>If the call raises <code>StopIteration</code>, the delegating generator is resumed.</li>
<li>
<p>Any other exception is propagated to the delegating generator.</p>
</li>
<li>
<p>If a <code>GeneratorExit</code> exception is thrown into the delegating generator, or the <code>close()</code> method of the delegating generator is called, then the <code>close()</code> method of the subgenerator is called if it has one.</p>
</li>
<li>If this call results in an exception, it is propagated to the delegating generator.</li>
<li>Otherwise, <code>GeneratorExit</code> is raised in the delegating generator</li>
</ol>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-35-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-35-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-35-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-35-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-35-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-35-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-35-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-35-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-35-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-35-10">10</a></span>
<span class="normal"><a href="#__codelineno-35-11">11</a></span>
<span class="normal"><a href="#__codelineno-35-12">12</a></span>
<span class="normal"><a href="#__codelineno-35-13">13</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-35-1" name="__codelineno-35-1"></a><span class="k">def</span> <span class="nf">sub_gen</span><span class="p">():</span>
<a id="__codelineno-35-2" name="__codelineno-35-2"></a> <span class="n">sent_input</span> <span class="o">=</span> <span class="k">yield</span>
<a id="__codelineno-35-3" name="__codelineno-35-3"></a> <span class="c1"># result of sub_gen() returned to delegating_gen()</span>
<a id="__codelineno-35-4" name="__codelineno-35-4"></a> <span class="c1"># result of yield from &lt;expr&gt;</span>
<a id="__codelineno-35-5" name="__codelineno-35-5"></a>
<a id="__codelineno-35-6" name="__codelineno-35-6"></a> <span class="k">return</span> <span class="n">result</span>
<a id="__codelineno-35-7" name="__codelineno-35-7"></a>
<a id="__codelineno-35-8" name="__codelineno-35-8"></a><span class="k">def</span> <span class="nf">delegating_gen</span><span class="p">(</span><span class="n">var</span><span class="p">):</span>
<a id="__codelineno-35-9" name="__codelineno-35-9"></a> <span class="n">var</span> <span class="o">=</span> <span class="k">yield from</span> <span class="n">sub_gen</span><span class="p">()</span> <span class="c1"># get values from sub_gen</span>
<a id="__codelineno-35-10" name="__codelineno-35-10"></a>
<a id="__codelineno-35-11" name="__codelineno-35-11"></a><span class="k">def</span> <span class="nf">client</span><span class="p">():</span>
<a id="__codelineno-35-12" name="__codelineno-35-12"></a> <span class="n">result</span> <span class="o">=</span> <span class="n">delegating_gen</span><span class="p">()</span> <span class="c1"># use delegating_gen</span>
<a id="__codelineno-35-13" name="__codelineno-35-13"></a> <span class="n">result</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span> <span class="c1"># terminate sub_gen instance (IMPORTANT)</span>
</code></pre></div></td></tr></table></div>
<h2 id="lambda-functions">LAMBDA Functions</h2>
<p>Possible use within functions. Useful for replacing functions if the logic is simple.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-36-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-36-1" name="__codelineno-36-1"></a><span class="n">var</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">argument_list</span><span class="p">:</span> <span class="o">&lt;</span><span class="n">expression</span><span class="o">&gt;</span>
</code></pre></div></td></tr></table></div>
<h2 id="object-oriented-programming">Object Oriented Programming</h2>
<h3 id="class-definition">Class Definition</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-37-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-37-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-37-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-37-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-37-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-37-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-37-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-37-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-37-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-37-10">10</a></span>
<span class="normal"><a href="#__codelineno-37-11">11</a></span>
<span class="normal"><a href="#__codelineno-37-12">12</a></span>
<span class="normal"><a href="#__codelineno-37-13">13</a></span>
<span class="normal"><a href="#__codelineno-37-14">14</a></span>
<span class="normal"><a href="#__codelineno-37-15">15</a></span>
<span class="normal"><a href="#__codelineno-37-16">16</a></span>
<span class="normal"><a href="#__codelineno-37-17">17</a></span>
<span class="normal"><a href="#__codelineno-37-18">18</a></span>
<span class="normal"><a href="#__codelineno-37-19">19</a></span>
<span class="normal"><a href="#__codelineno-37-20">20</a></span>
<span class="normal"><a href="#__codelineno-37-21">21</a></span>
<span class="normal"><a href="#__codelineno-37-22">22</a></span>
<span class="normal"><a href="#__codelineno-37-23">23</a></span>
<span class="normal"><a href="#__codelineno-37-24">24</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-37-1" name="__codelineno-37-1"></a><span class="k">class</span> <span class="nc">Class</span><span class="p">:</span>
<a id="__codelineno-37-2" name="__codelineno-37-2"></a>
<a id="__codelineno-37-3" name="__codelineno-37-3"></a> <span class="n">static_var</span> <span class="o">=</span> <span class="n">expression</span>
<a id="__codelineno-37-4" name="__codelineno-37-4"></a>
<a id="__codelineno-37-5" name="__codelineno-37-5"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value_1</span><span class="p">,</span> <span class="n">value_2</span><span class="p">):</span> <span class="c1"># parameterized default constructor</span>
<a id="__codelineno-37-6" name="__codelineno-37-6"></a> <span class="bp">self</span><span class="o">.</span><span class="n">variable</span> <span class="o">=</span> <span class="n">value_1</span> <span class="c1"># create instance variables</span>
<a id="__codelineno-37-7" name="__codelineno-37-7"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__private</span> <span class="o">=</span> <span class="n">value_2</span> <span class="c1"># private, accessed via NAME MANGLING</span>
<a id="__codelineno-37-8" name="__codelineno-37-8"></a>
<a id="__codelineno-37-9" name="__codelineno-37-9"></a> <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-37-10" name="__codelineno-37-10"></a> <span class="o">...</span>
<a id="__codelineno-37-11" name="__codelineno-37-11"></a>
<a id="__codelineno-37-12" name="__codelineno-37-12"></a> <span class="nd">@staticmethod</span>
<a id="__codelineno-37-13" name="__codelineno-37-13"></a> <span class="k">def</span> <span class="nf">static_method</span><span class="p">(</span><span class="n">parameters</span><span class="p">):</span> <span class="c1"># static methods do not affect instance variables (SELF not needed)</span>
<a id="__codelineno-37-14" name="__codelineno-37-14"></a> <span class="o">...</span>
<a id="__codelineno-37-15" name="__codelineno-37-15"></a>
<a id="__codelineno-37-16" name="__codelineno-37-16"></a> <span class="nd">@classmethod</span> <span class="c1"># method acting on the class and not on the object (useful for alternative constructors)</span>
<a id="__codelineno-37-17" name="__codelineno-37-17"></a> <span class="k">def</span> <span class="nf">class_method</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-37-18" name="__codelineno-37-18"></a> <span class="o">...</span>
<a id="__codelineno-37-19" name="__codelineno-37-19"></a>
<a id="__codelineno-37-20" name="__codelineno-37-20"></a> <span class="nb">object</span> <span class="o">=</span> <span class="n">Class</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span> <span class="c1"># creation of an object</span>
<a id="__codelineno-37-21" name="__codelineno-37-21"></a> <span class="nb">object</span><span class="o">.</span><span class="n">variable</span> <span class="o">=</span> <span class="n">expression</span> <span class="c1"># edit public variable</span>
<a id="__codelineno-37-22" name="__codelineno-37-22"></a> <span class="nb">object</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span> <span class="c1"># invocation method of instance</span>
<a id="__codelineno-37-23" name="__codelineno-37-23"></a> <span class="nb">object</span><span class="o">.</span><span class="n">_Class__private</span> <span class="c1"># access to variable specifying the membership class (NAME MANGLING)</span>
<a id="__codelineno-37-24" name="__codelineno-37-24"></a> <span class="n">Class</span><span class="o">.</span><span class="n">method</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span> <span class="c1"># static method invocation</span>
</code></pre></div></td></tr></table></div>
<h3 id="setter-getter-with-property">Setter &amp; Getter with <code>@Property</code></h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-38-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-38-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-38-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-38-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-38-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-38-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-38-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-38-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-38-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-38-10">10</a></span>
<span class="normal"><a href="#__codelineno-38-11">11</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-38-1" name="__codelineno-38-1"></a><span class="k">class</span> <span class="nc">Class</span><span class="p">:</span>
<a id="__codelineno-38-2" name="__codelineno-38-2"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameter</span><span class="p">):</span>
<a id="__codelineno-38-3" name="__codelineno-38-3"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__parameter</span> <span class="o">=</span> <span class="n">parameter</span>
<a id="__codelineno-38-4" name="__codelineno-38-4"></a>
<a id="__codelineno-38-5" name="__codelineno-38-5"></a> <span class="nd">@property</span> <span class="c1"># getter</span>
<a id="__codelineno-38-6" name="__codelineno-38-6"></a> <span class="k">def</span> <span class="nf">parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-38-7" name="__codelineno-38-7"></a> <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__parameter</span>
<a id="__codelineno-38-8" name="__codelineno-38-8"></a>
<a id="__codelineno-38-9" name="__codelineno-38-9"></a> <span class="o">@&lt;</span><span class="n">parameter</span><span class="o">&gt;.</span><span class="n">setter</span>
<a id="__codelineno-38-10" name="__codelineno-38-10"></a> <span class="k">def</span> <span class="nf">parameter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<a id="__codelineno-38-11" name="__codelineno-38-11"></a> <span class="bp">self</span><span class="o">.</span><span class="n">__parameter</span> <span class="o">=</span> <span class="n">value</span>
</code></pre></div></td></tr></table></div>
<h3 id="__slots__"><code>__slots__</code></h3>
<p>The <code>__slots__</code> attribute implements the <strong>Flyweight Design Pattern</strong>: it saves the instance attributes in a tuple and can be used to decrease the cost in memory by inserting only the instance variables into it (suppress the instance dictionary).</p>
<p><strong>Default</strong>: attributes saved in a dictionary (<code>object .__ dict__</code>)
<strong>Usage</strong>: <code>__slots_ = [attributes]</code></p>
<p><code>__slots__</code> is not inherited by subclasses, it prevents dynamically adding attributes.</p>
<h3 id="inner-classes">Inner Classes</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-39-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-39-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-39-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-39-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-39-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-39-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-39-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-39-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-39-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-39-10">10</a></span>
<span class="normal"><a href="#__codelineno-39-11">11</a></span>
<span class="normal"><a href="#__codelineno-39-12">12</a></span>
<span class="normal"><a href="#__codelineno-39-13">13</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-39-1" name="__codelineno-39-1"></a><span class="k">class</span> <span class="nc">Class</span><span class="p">:</span>
<a id="__codelineno-39-2" name="__codelineno-39-2"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-39-3" name="__codelineno-39-3"></a> <span class="o">...</span>
<a id="__codelineno-39-4" name="__codelineno-39-4"></a>
<a id="__codelineno-39-5" name="__codelineno-39-5"></a> <span class="k">class</span> <span class="nc">InnerClass</span><span class="p">:</span>
<a id="__codelineno-39-6" name="__codelineno-39-6"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-39-7" name="__codelineno-39-7"></a> <span class="o">...</span>
<a id="__codelineno-39-8" name="__codelineno-39-8"></a>
<a id="__codelineno-39-9" name="__codelineno-39-9"></a> <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-39-10" name="__codelineno-39-10"></a> <span class="o">...</span>
<a id="__codelineno-39-11" name="__codelineno-39-11"></a>
<a id="__codelineno-39-12" name="__codelineno-39-12"></a><span class="n">object_1</span> <span class="o">=</span> <span class="n">Class</span><span class="p">(</span><span class="n">arguments</span><span class="p">)</span> <span class="c1"># create &#39;external&#39; class</span>
<a id="__codelineno-39-13" name="__codelineno-39-13"></a><span class="n">object_2</span> <span class="o">=</span> <span class="n">Class</span><span class="o">.</span><span class="n">InnerClass</span><span class="p">(</span><span class="n">arguments</span><span class="p">)</span> <span class="c1"># inner class created as object of the &#39;external&#39; class</span>
</code></pre></div></td></tr></table></div>
<h3 id="special-methods">Special Methods</h3>
<p>Special methods are defined by the use of double underscores; they allow the use of specific functions (possibly adapted) on the objects defined by the class.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-40-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-40-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-40-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-40-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-40-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-40-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-40-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-40-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-40-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-40-10">10</a></span>
<span class="normal"><a href="#__codelineno-40-11">11</a></span>
<span class="normal"><a href="#__codelineno-40-12">12</a></span>
<span class="normal"><a href="#__codelineno-40-13">13</a></span>
<span class="normal"><a href="#__codelineno-40-14">14</a></span>
<span class="normal"><a href="#__codelineno-40-15">15</a></span>
<span class="normal"><a href="#__codelineno-40-16">16</a></span>
<span class="normal"><a href="#__codelineno-40-17">17</a></span>
<span class="normal"><a href="#__codelineno-40-18">18</a></span>
<span class="normal"><a href="#__codelineno-40-19">19</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-40-1" name="__codelineno-40-1"></a><span class="k">class</span> <span class="nc">Class</span><span class="p">():</span>
<a id="__codelineno-40-2" name="__codelineno-40-2"></a>
<a id="__codelineno-40-3" name="__codelineno-40-3"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-40-4" name="__codelineno-40-4"></a> <span class="n">instructions</span>
<a id="__codelineno-40-5" name="__codelineno-40-5"></a>
<a id="__codelineno-40-6" name="__codelineno-40-6"></a> <span class="c1"># used by str() and print() method</span>
<a id="__codelineno-40-7" name="__codelineno-40-7"></a> <span class="c1"># handle requests for impersonation as a string</span>
<a id="__codelineno-40-8" name="__codelineno-40-8"></a> <span class="k">def</span> <span class="fm">__str__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-40-9" name="__codelineno-40-9"></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># return required</span>
<a id="__codelineno-40-10" name="__codelineno-40-10"></a>
<a id="__codelineno-40-11" name="__codelineno-40-11"></a> <span class="k">def</span> <span class="fm">__len__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-40-12" name="__codelineno-40-12"></a> <span class="k">return</span> <span class="n">expression</span> <span class="c1"># must return as len requires a length / size</span>
<a id="__codelineno-40-13" name="__codelineno-40-13"></a>
<a id="__codelineno-40-14" name="__codelineno-40-14"></a> <span class="k">def</span> <span class="fm">__del__</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># delete the class instance</span>
<a id="__codelineno-40-15" name="__codelineno-40-15"></a> <span class="n">instruction</span> <span class="c1"># any instructions that occur on deletion</span>
<a id="__codelineno-40-16" name="__codelineno-40-16"></a>
<a id="__codelineno-40-17" name="__codelineno-40-17"></a><span class="nb">object</span> <span class="o">=</span> <span class="n">Class</span><span class="p">()</span>
<a id="__codelineno-40-18" name="__codelineno-40-18"></a><span class="nb">len</span><span class="p">(</span><span class="nb">object</span><span class="p">)</span> <span class="c1"># special function applied to an object</span>
<a id="__codelineno-40-19" name="__codelineno-40-19"></a><span class="k">del</span> <span class="nb">object</span> <span class="c1"># delete object</span>
</code></pre></div></td></tr></table></div>
<h4 id="special-methods-list">Special Methods List</h4>
<p><strong>Note</strong>: if the operator cannot be applied, returns <code>NotImplemented</code></p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-41-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-41-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-41-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-41-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-41-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-41-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-41-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-41-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-41-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-41-10"> 10</a></span>
<span class="normal"><a href="#__codelineno-41-11"> 11</a></span>
<span class="normal"><a href="#__codelineno-41-12"> 12</a></span>
<span class="normal"><a href="#__codelineno-41-13"> 13</a></span>
<span class="normal"><a href="#__codelineno-41-14"> 14</a></span>
<span class="normal"><a href="#__codelineno-41-15"> 15</a></span>
<span class="normal"><a href="#__codelineno-41-16"> 16</a></span>
<span class="normal"><a href="#__codelineno-41-17"> 17</a></span>
<span class="normal"><a href="#__codelineno-41-18"> 18</a></span>
<span class="normal"><a href="#__codelineno-41-19"> 19</a></span>
<span class="normal"><a href="#__codelineno-41-20"> 20</a></span>
<span class="normal"><a href="#__codelineno-41-21"> 21</a></span>
<span class="normal"><a href="#__codelineno-41-22"> 22</a></span>
<span class="normal"><a href="#__codelineno-41-23"> 23</a></span>
<span class="normal"><a href="#__codelineno-41-24"> 24</a></span>
<span class="normal"><a href="#__codelineno-41-25"> 25</a></span>
<span class="normal"><a href="#__codelineno-41-26"> 26</a></span>
<span class="normal"><a href="#__codelineno-41-27"> 27</a></span>
<span class="normal"><a href="#__codelineno-41-28"> 28</a></span>
<span class="normal"><a href="#__codelineno-41-29"> 29</a></span>
<span class="normal"><a href="#__codelineno-41-30"> 30</a></span>
<span class="normal"><a href="#__codelineno-41-31"> 31</a></span>
<span class="normal"><a href="#__codelineno-41-32"> 32</a></span>
<span class="normal"><a href="#__codelineno-41-33"> 33</a></span>
<span class="normal"><a href="#__codelineno-41-34"> 34</a></span>
<span class="normal"><a href="#__codelineno-41-35"> 35</a></span>
<span class="normal"><a href="#__codelineno-41-36"> 36</a></span>
<span class="normal"><a href="#__codelineno-41-37"> 37</a></span>
<span class="normal"><a href="#__codelineno-41-38"> 38</a></span>
<span class="normal"><a href="#__codelineno-41-39"> 39</a></span>
<span class="normal"><a href="#__codelineno-41-40"> 40</a></span>
<span class="normal"><a href="#__codelineno-41-41"> 41</a></span>
<span class="normal"><a href="#__codelineno-41-42"> 42</a></span>
<span class="normal"><a href="#__codelineno-41-43"> 43</a></span>
<span class="normal"><a href="#__codelineno-41-44"> 44</a></span>
<span class="normal"><a href="#__codelineno-41-45"> 45</a></span>
<span class="normal"><a href="#__codelineno-41-46"> 46</a></span>
<span class="normal"><a href="#__codelineno-41-47"> 47</a></span>
<span class="normal"><a href="#__codelineno-41-48"> 48</a></span>
<span class="normal"><a href="#__codelineno-41-49"> 49</a></span>
<span class="normal"><a href="#__codelineno-41-50"> 50</a></span>
<span class="normal"><a href="#__codelineno-41-51"> 51</a></span>
<span class="normal"><a href="#__codelineno-41-52"> 52</a></span>
<span class="normal"><a href="#__codelineno-41-53"> 53</a></span>
<span class="normal"><a href="#__codelineno-41-54"> 54</a></span>
<span class="normal"><a href="#__codelineno-41-55"> 55</a></span>
<span class="normal"><a href="#__codelineno-41-56"> 56</a></span>
<span class="normal"><a href="#__codelineno-41-57"> 57</a></span>
<span class="normal"><a href="#__codelineno-41-58"> 58</a></span>
<span class="normal"><a href="#__codelineno-41-59"> 59</a></span>
<span class="normal"><a href="#__codelineno-41-60"> 60</a></span>
<span class="normal"><a href="#__codelineno-41-61"> 61</a></span>
<span class="normal"><a href="#__codelineno-41-62"> 62</a></span>
<span class="normal"><a href="#__codelineno-41-63"> 63</a></span>
<span class="normal"><a href="#__codelineno-41-64"> 64</a></span>
<span class="normal"><a href="#__codelineno-41-65"> 65</a></span>
<span class="normal"><a href="#__codelineno-41-66"> 66</a></span>
<span class="normal"><a href="#__codelineno-41-67"> 67</a></span>
<span class="normal"><a href="#__codelineno-41-68"> 68</a></span>
<span class="normal"><a href="#__codelineno-41-69"> 69</a></span>
<span class="normal"><a href="#__codelineno-41-70"> 70</a></span>
<span class="normal"><a href="#__codelineno-41-71"> 71</a></span>
<span class="normal"><a href="#__codelineno-41-72"> 72</a></span>
<span class="normal"><a href="#__codelineno-41-73"> 73</a></span>
<span class="normal"><a href="#__codelineno-41-74"> 74</a></span>
<span class="normal"><a href="#__codelineno-41-75"> 75</a></span>
<span class="normal"><a href="#__codelineno-41-76"> 76</a></span>
<span class="normal"><a href="#__codelineno-41-77"> 77</a></span>
<span class="normal"><a href="#__codelineno-41-78"> 78</a></span>
<span class="normal"><a href="#__codelineno-41-79"> 79</a></span>
<span class="normal"><a href="#__codelineno-41-80"> 80</a></span>
<span class="normal"><a href="#__codelineno-41-81"> 81</a></span>
<span class="normal"><a href="#__codelineno-41-82"> 82</a></span>
<span class="normal"><a href="#__codelineno-41-83"> 83</a></span>
<span class="normal"><a href="#__codelineno-41-84"> 84</a></span>
<span class="normal"><a href="#__codelineno-41-85"> 85</a></span>
<span class="normal"><a href="#__codelineno-41-86"> 86</a></span>
<span class="normal"><a href="#__codelineno-41-87"> 87</a></span>
<span class="normal"><a href="#__codelineno-41-88"> 88</a></span>
<span class="normal"><a href="#__codelineno-41-89"> 89</a></span>
<span class="normal"><a href="#__codelineno-41-90"> 90</a></span>
<span class="normal"><a href="#__codelineno-41-91"> 91</a></span>
<span class="normal"><a href="#__codelineno-41-92"> 92</a></span>
<span class="normal"><a href="#__codelineno-41-93"> 93</a></span>
<span class="normal"><a href="#__codelineno-41-94"> 94</a></span>
<span class="normal"><a href="#__codelineno-41-95"> 95</a></span>
<span class="normal"><a href="#__codelineno-41-96"> 96</a></span>
<span class="normal"><a href="#__codelineno-41-97"> 97</a></span>
<span class="normal"><a href="#__codelineno-41-98"> 98</a></span>
<span class="normal"><a href="#__codelineno-41-99"> 99</a></span>
<span class="normal"><a href="#__codelineno-41-100">100</a></span>
<span class="normal"><a href="#__codelineno-41-101">101</a></span>
<span class="normal"><a href="#__codelineno-41-102">102</a></span>
<span class="normal"><a href="#__codelineno-41-103">103</a></span>
<span class="normal"><a href="#__codelineno-41-104">104</a></span>
<span class="normal"><a href="#__codelineno-41-105">105</a></span>
<span class="normal"><a href="#__codelineno-41-106">106</a></span>
<span class="normal"><a href="#__codelineno-41-107">107</a></span>
<span class="normal"><a href="#__codelineno-41-108">108</a></span>
<span class="normal"><a href="#__codelineno-41-109">109</a></span>
<span class="normal"><a href="#__codelineno-41-110">110</a></span>
<span class="normal"><a href="#__codelineno-41-111">111</a></span>
<span class="normal"><a href="#__codelineno-41-112">112</a></span>
<span class="normal"><a href="#__codelineno-41-113">113</a></span>
<span class="normal"><a href="#__codelineno-41-114">114</a></span>
<span class="normal"><a href="#__codelineno-41-115">115</a></span>
<span class="normal"><a href="#__codelineno-41-116">116</a></span>
<span class="normal"><a href="#__codelineno-41-117">117</a></span>
<span class="normal"><a href="#__codelineno-41-118">118</a></span>
<span class="normal"><a href="#__codelineno-41-119">119</a></span>
<span class="normal"><a href="#__codelineno-41-120">120</a></span>
<span class="normal"><a href="#__codelineno-41-121">121</a></span>
<span class="normal"><a href="#__codelineno-41-122">122</a></span>
<span class="normal"><a href="#__codelineno-41-123">123</a></span>
<span class="normal"><a href="#__codelineno-41-124">124</a></span>
<span class="normal"><a href="#__codelineno-41-125">125</a></span>
<span class="normal"><a href="#__codelineno-41-126">126</a></span>
<span class="normal"><a href="#__codelineno-41-127">127</a></span>
<span class="normal"><a href="#__codelineno-41-128">128</a></span>
<span class="normal"><a href="#__codelineno-41-129">129</a></span>
<span class="normal"><a href="#__codelineno-41-130">130</a></span>
<span class="normal"><a href="#__codelineno-41-131">131</a></span>
<span class="normal"><a href="#__codelineno-41-132">132</a></span>
<span class="normal"><a href="#__codelineno-41-133">133</a></span>
<span class="normal"><a href="#__codelineno-41-134">134</a></span>
<span class="normal"><a href="#__codelineno-41-135">135</a></span>
<span class="normal"><a href="#__codelineno-41-136">136</a></span>
<span class="normal"><a href="#__codelineno-41-137">137</a></span>
<span class="normal"><a href="#__codelineno-41-138">138</a></span>
<span class="normal"><a href="#__codelineno-41-139">139</a></span>
<span class="normal"><a href="#__codelineno-41-140">140</a></span>
<span class="normal"><a href="#__codelineno-41-141">141</a></span>
<span class="normal"><a href="#__codelineno-41-142">142</a></span>
<span class="normal"><a href="#__codelineno-41-143">143</a></span>
<span class="normal"><a href="#__codelineno-41-144">144</a></span>
<span class="normal"><a href="#__codelineno-41-145">145</a></span>
<span class="normal"><a href="#__codelineno-41-146">146</a></span>
<span class="normal"><a href="#__codelineno-41-147">147</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-41-1" name="__codelineno-41-1"></a><span class="c1"># arithmetic operators</span>
<a id="__codelineno-41-2" name="__codelineno-41-2"></a><span class="fm">__add__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># +</span>
<a id="__codelineno-41-3" name="__codelineno-41-3"></a><span class="fm">__sub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># -</span>
<a id="__codelineno-41-4" name="__codelineno-41-4"></a><span class="fm">__mul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># *</span>
<a id="__codelineno-41-5" name="__codelineno-41-5"></a><span class="fm">__matmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># (@) matrix multiplication</span>
<a id="__codelineno-41-6" name="__codelineno-41-6"></a><span class="fm">__truediv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># /</span>
<a id="__codelineno-41-7" name="__codelineno-41-7"></a><span class="fm">__floordiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># //</span>
<a id="__codelineno-41-8" name="__codelineno-41-8"></a><span class="fm">__mod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># %</span>
<a id="__codelineno-41-9" name="__codelineno-41-9"></a><span class="fm">__divmod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># divmod()</span>
<a id="__codelineno-41-10" name="__codelineno-41-10"></a><span class="fm">__pow__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># **, pow()</span>
<a id="__codelineno-41-11" name="__codelineno-41-11"></a><span class="fm">__lshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &lt;&lt;</span>
<a id="__codelineno-41-12" name="__codelineno-41-12"></a><span class="fm">__rshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &gt;&gt;</span>
<a id="__codelineno-41-13" name="__codelineno-41-13"></a><span class="fm">__and__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &amp;</span>
<a id="__codelineno-41-14" name="__codelineno-41-14"></a><span class="fm">__xor__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># ^</span>
<a id="__codelineno-41-15" name="__codelineno-41-15"></a><span class="fm">__or__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># |</span>
<a id="__codelineno-41-16" name="__codelineno-41-16"></a>
<a id="__codelineno-41-17" name="__codelineno-41-17"></a><span class="c1"># reflex arithmetic operators</span>
<a id="__codelineno-41-18" name="__codelineno-41-18"></a><span class="c1"># if self.__ dunder __(other) fails, other.__ dunder__(self) is called</span>
<a id="__codelineno-41-19" name="__codelineno-41-19"></a><span class="fm">__radd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse +</span>
<a id="__codelineno-41-20" name="__codelineno-41-20"></a><span class="fm">__rsub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse -</span>
<a id="__codelineno-41-21" name="__codelineno-41-21"></a><span class="fm">__rmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse *</span>
<a id="__codelineno-41-22" name="__codelineno-41-22"></a><span class="fm">__rmatmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse @</span>
<a id="__codelineno-41-23" name="__codelineno-41-23"></a><span class="fm">__rtruediv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse /</span>
<a id="__codelineno-41-24" name="__codelineno-41-24"></a><span class="fm">__rfloordiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse //</span>
<a id="__codelineno-41-25" name="__codelineno-41-25"></a><span class="fm">__rmod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse %</span>
<a id="__codelineno-41-26" name="__codelineno-41-26"></a><span class="fm">__rdivmod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse divmod()</span>
<a id="__codelineno-41-27" name="__codelineno-41-27"></a><span class="fm">__rpow__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse **, pow()</span>
<a id="__codelineno-41-28" name="__codelineno-41-28"></a><span class="fm">__rlshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse &lt;&lt;</span>
<a id="__codelineno-41-29" name="__codelineno-41-29"></a><span class="fm">__rrshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse &gt;&gt;</span>
<a id="__codelineno-41-30" name="__codelineno-41-30"></a><span class="fm">__rand__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse &amp;</span>
<a id="__codelineno-41-31" name="__codelineno-41-31"></a><span class="fm">__rxor__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse ^</span>
<a id="__codelineno-41-32" name="__codelineno-41-32"></a><span class="fm">__ror__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># reverse |</span>
<a id="__codelineno-41-33" name="__codelineno-41-33"></a>
<a id="__codelineno-41-34" name="__codelineno-41-34"></a><span class="c1"># in-place arithmetic operators</span>
<a id="__codelineno-41-35" name="__codelineno-41-35"></a><span class="c1"># base implementation (built-in) like self = self &lt;operator&gt; other</span>
<a id="__codelineno-41-36" name="__codelineno-41-36"></a><span class="c1">#! not to be implemented for immutable objects!</span>
<a id="__codelineno-41-37" name="__codelineno-41-37"></a><span class="c1">#! in-place operators return self!</span>
<a id="__codelineno-41-38" name="__codelineno-41-38"></a><span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># +=</span>
<a id="__codelineno-41-39" name="__codelineno-41-39"></a><span class="fm">__isub__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># -=</span>
<a id="__codelineno-41-40" name="__codelineno-41-40"></a><span class="fm">__imul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># *=</span>
<a id="__codelineno-41-41" name="__codelineno-41-41"></a><span class="fm">__imatmul__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># @=</span>
<a id="__codelineno-41-42" name="__codelineno-41-42"></a><span class="fm">__itruediv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># /=</span>
<a id="__codelineno-41-43" name="__codelineno-41-43"></a><span class="fm">__ifloordiv__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># //=</span>
<a id="__codelineno-41-44" name="__codelineno-41-44"></a><span class="fm">__imod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># %=</span>
<a id="__codelineno-41-45" name="__codelineno-41-45"></a><span class="fm">__ipow__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># **=</span>
<a id="__codelineno-41-46" name="__codelineno-41-46"></a><span class="fm">__ilshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &lt;&lt;=</span>
<a id="__codelineno-41-47" name="__codelineno-41-47"></a><span class="fm">__irshift__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &gt;&gt;=</span>
<a id="__codelineno-41-48" name="__codelineno-41-48"></a><span class="fm">__iand__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># &amp;=</span>
<a id="__codelineno-41-49" name="__codelineno-41-49"></a><span class="fm">__ixor__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># ^=</span>
<a id="__codelineno-41-50" name="__codelineno-41-50"></a><span class="fm">__ior__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">)</span> <span class="c1"># |=</span>
<a id="__codelineno-41-51" name="__codelineno-41-51"></a>
<a id="__codelineno-41-52" name="__codelineno-41-52"></a><span class="c1"># unary mathematical operators (-, +, abs (), ~)</span>
<a id="__codelineno-41-53" name="__codelineno-41-53"></a><span class="fm">__neg__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># (-) negazione matematica unaria [if x = 2 then -x = 2]</span>
<a id="__codelineno-41-54" name="__codelineno-41-54"></a><span class="fm">__pos__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># (+) addizione unaria [x = +x]</span>
<a id="__codelineno-41-55" name="__codelineno-41-55"></a><span class="fm">__abs__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># [abs()] valore assoluto [|-x| = x]</span>
<a id="__codelineno-41-56" name="__codelineno-41-56"></a><span class="fm">__invert__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># (~) inversione binaria di un intero [~x == -(x + 1)]</span>
<a id="__codelineno-41-57" name="__codelineno-41-57"></a>
<a id="__codelineno-41-58" name="__codelineno-41-58"></a><span class="c1"># numeric type conversion</span>
<a id="__codelineno-41-59" name="__codelineno-41-59"></a><span class="fm">__complex__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-60" name="__codelineno-41-60"></a><span class="fm">__int__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># if not defined fall-back on __trunc__()</span>
<a id="__codelineno-41-61" name="__codelineno-41-61"></a><span class="fm">__float__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-62" name="__codelineno-41-62"></a><span class="fm">__index__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># conversion in bin(), hex(), oct() e slicing</span>
<a id="__codelineno-41-63" name="__codelineno-41-63"></a>
<a id="__codelineno-41-64" name="__codelineno-41-64"></a><span class="c1"># operations round() math.trunc(), math.floor(), math.ceil()</span>
<a id="__codelineno-41-65" name="__codelineno-41-65"></a><span class="fm">__round__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-66" name="__codelineno-41-66"></a><span class="n">__trunc__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-67" name="__codelineno-41-67"></a><span class="n">__floor__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-68" name="__codelineno-41-68"></a><span class="n">__ceil__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-69" name="__codelineno-41-69"></a>
<a id="__codelineno-41-70" name="__codelineno-41-70"></a><span class="c1"># equality operators</span>
<a id="__codelineno-41-71" name="__codelineno-41-71"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self == other</span>
<a id="__codelineno-41-72" name="__codelineno-41-72"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__ne__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self != other</span>
<a id="__codelineno-41-73" name="__codelineno-41-73"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__gt__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self &gt; other</span>
<a id="__codelineno-41-74" name="__codelineno-41-74"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__ge__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self &gt;= other</span>
<a id="__codelineno-41-75" name="__codelineno-41-75"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__lt__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self &lt; other</span>
<a id="__codelineno-41-76" name="__codelineno-41-76"></a><span class="bp">self</span><span class="o">.</span><span class="fm">__le__</span><span class="p">(</span><span class="n">other</span><span class="p">)</span> <span class="c1"># self &lt;= other</span>
<a id="__codelineno-41-77" name="__codelineno-41-77"></a>
<a id="__codelineno-41-78" name="__codelineno-41-78"></a><span class="c1"># reflected equality operators</span>
<a id="__codelineno-41-79" name="__codelineno-41-79"></a><span class="n">other</span><span class="o">.</span><span class="fm">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># other == self, fall-back id(self) == id(other)</span>
<a id="__codelineno-41-80" name="__codelineno-41-80"></a><span class="n">other</span><span class="o">.</span><span class="fm">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># other != self, fall-back not (self == other)</span>
<a id="__codelineno-41-81" name="__codelineno-41-81"></a><span class="n">other</span><span class="o">.</span><span class="fm">__gt__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># reverse self &lt; other, fall-back TypeError</span>
<a id="__codelineno-41-82" name="__codelineno-41-82"></a><span class="n">other</span><span class="o">.</span><span class="fm">__ge__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># reverse self &lt;= other, fall-back TypeError</span>
<a id="__codelineno-41-83" name="__codelineno-41-83"></a><span class="n">other</span><span class="o">.</span><span class="fm">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># reverse self &gt; other, fall-back TypeError</span>
<a id="__codelineno-41-84" name="__codelineno-41-84"></a><span class="n">other</span><span class="o">.</span><span class="fm">__le__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c1"># reverse self &gt;= other, fall-back TypeError</span>
<a id="__codelineno-41-85" name="__codelineno-41-85"></a>
<a id="__codelineno-41-86" name="__codelineno-41-86"></a><span class="c1"># called when the instance is &quot;called&quot; as a function</span>
<a id="__codelineno-41-87" name="__codelineno-41-87"></a><span class="c1"># x (arg1, arg2, arg3) is short for x .__ call __ (arg1, arg2, arg3)</span>
<a id="__codelineno-41-88" name="__codelineno-41-88"></a><span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span>
<a id="__codelineno-41-89" name="__codelineno-41-89"></a>
<a id="__codelineno-41-90" name="__codelineno-41-90"></a><span class="c1"># string object representation for the developer</span>
<a id="__codelineno-41-91" name="__codelineno-41-91"></a><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-92" name="__codelineno-41-92"></a>
<a id="__codelineno-41-93" name="__codelineno-41-93"></a><span class="c1"># string object representation for user (used by print)</span>
<a id="__codelineno-41-94" name="__codelineno-41-94"></a><span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-95" name="__codelineno-41-95"></a>
<a id="__codelineno-41-96" name="__codelineno-41-96"></a><span class="c1"># specify formatting for format ), str.format() [format_spec = format-mini-language]</span>
<a id="__codelineno-41-97" name="__codelineno-41-97"></a><span class="fm">__format__</span><span class="p">(</span><span class="n">format_spec</span><span class="p">)</span>
<a id="__codelineno-41-98" name="__codelineno-41-98"></a>
<a id="__codelineno-41-99" name="__codelineno-41-99"></a><span class="c1"># returns unique (integer) value for objects that have equal value</span>
<a id="__codelineno-41-100" name="__codelineno-41-100"></a><span class="c1"># __EQ__ MUST EXIST IN THE CLASS, usually hash((self.param_1, self.param_2, ...))</span>
<a id="__codelineno-41-101" name="__codelineno-41-101"></a><span class="fm">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-102" name="__codelineno-41-102"></a>
<a id="__codelineno-41-103" name="__codelineno-41-103"></a><span class="c1"># makes object iterable:</span>
<a id="__codelineno-41-104" name="__codelineno-41-104"></a><span class="c1"># - returning self (in the iterator)</span>
<a id="__codelineno-41-105" name="__codelineno-41-105"></a><span class="c1"># - returning an iterator (in the iterable)</span>
<a id="__codelineno-41-106" name="__codelineno-41-106"></a><span class="c1"># - using yield (in the __iter__ generator)</span>
<a id="__codelineno-41-107" name="__codelineno-41-107"></a><span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-108" name="__codelineno-41-108"></a>
<a id="__codelineno-41-109" name="__codelineno-41-109"></a><span class="c1"># returns next available element, StopIteration otherwise (iterator scrolls)</span>
<a id="__codelineno-41-110" name="__codelineno-41-110"></a><span class="fm">__next__</span><span class="p">()</span>
<a id="__codelineno-41-111" name="__codelineno-41-111"></a>
<a id="__codelineno-41-112" name="__codelineno-41-112"></a><span class="c1"># returns truth value</span>
<a id="__codelineno-41-113" name="__codelineno-41-113"></a><span class="fm">__bool__</span><span class="p">()</span>
<a id="__codelineno-41-114" name="__codelineno-41-114"></a>
<a id="__codelineno-41-115" name="__codelineno-41-115"></a><span class="c1"># returns item associated with key of a sequence (self [key])</span>
<a id="__codelineno-41-116" name="__codelineno-41-116"></a><span class="c1"># IndexError if key is not appropriate</span>
<a id="__codelineno-41-117" name="__codelineno-41-117"></a><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<a id="__codelineno-41-118" name="__codelineno-41-118"></a>
<a id="__codelineno-41-119" name="__codelineno-41-119"></a><span class="c1"># item assignment operation in sequence (self [key] = value)</span>
<a id="__codelineno-41-120" name="__codelineno-41-120"></a><span class="c1"># IndexError if key is not appropriate</span>
<a id="__codelineno-41-121" name="__codelineno-41-121"></a><span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
<a id="__codelineno-41-122" name="__codelineno-41-122"></a>
<a id="__codelineno-41-123" name="__codelineno-41-123"></a><span class="c1"># operation deleting item in sequence (del self [key])</span>
<a id="__codelineno-41-124" name="__codelineno-41-124"></a><span class="c1"># IndexError if key is not appropriate</span>
<a id="__codelineno-41-125" name="__codelineno-41-125"></a><span class="fm">__delitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<a id="__codelineno-41-126" name="__codelineno-41-126"></a>
<a id="__codelineno-41-127" name="__codelineno-41-127"></a><span class="c1"># called by dict.__getitem__() to implement self [key] if key is not in the dictionary</span>
<a id="__codelineno-41-128" name="__codelineno-41-128"></a><span class="fm">__missing__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<a id="__codelineno-41-129" name="__codelineno-41-129"></a>
<a id="__codelineno-41-130" name="__codelineno-41-130"></a><span class="c1"># implement container iteration</span>
<a id="__codelineno-41-131" name="__codelineno-41-131"></a><span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<a id="__codelineno-41-132" name="__codelineno-41-132"></a>
<a id="__codelineno-41-133" name="__codelineno-41-133"></a><span class="c1"># implement membership test</span>
<a id="__codelineno-41-134" name="__codelineno-41-134"></a><span class="fm">__contains__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span>
<a id="__codelineno-41-135" name="__codelineno-41-135"></a>
<a id="__codelineno-41-136" name="__codelineno-41-136"></a><span class="c1"># implementation issublass (instance, class)</span>
<a id="__codelineno-41-137" name="__codelineno-41-137"></a><span class="fm">__instancecheck__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">)</span>
<a id="__codelineno-41-138" name="__codelineno-41-138"></a>
<a id="__codelineno-41-139" name="__codelineno-41-139"></a><span class="c1"># implementation issubclass (subclass, class)</span>
<a id="__codelineno-41-140" name="__codelineno-41-140"></a><span class="fm">__subclasscheck__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">subclass</span><span class="p">)</span>
<a id="__codelineno-41-141" name="__codelineno-41-141"></a>
<a id="__codelineno-41-142" name="__codelineno-41-142"></a><span class="c1"># implement attribute access (obj.name)</span>
<a id="__codelineno-41-143" name="__codelineno-41-143"></a><span class="c1"># called if AttributeError happens or if called by __getattribute __()</span>
<a id="__codelineno-41-144" name="__codelineno-41-144"></a><span class="fm">__getattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<a id="__codelineno-41-145" name="__codelineno-41-145"></a>
<a id="__codelineno-41-146" name="__codelineno-41-146"></a><span class="c1"># implement value assignment to attribute (obj.name = value)</span>
<a id="__codelineno-41-147" name="__codelineno-41-147"></a><span class="fm">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
</code></pre></div></td></tr></table></div>
<p><strong>Note</strong>: Itearbility is tricky.</p>
<p>To make an object directly iterable (<code>for i in object</code>) <code>__iter__()</code> and <code>__next__()</code> are needed.
To make an iterable through an index (<code>for i in range(len(object)): object[i]</code>) <code>__getitem()__</code> is needed.</p>
<p>Some of the mixin methods, such as <code>__iter__()</code>, <code>__reversed__()</code> and <code>index()</code>, make repeated calls to the underlying <code>__getitem__()</code> method.
Consequently, if <code>__getitem__()</code> is implemented with constant access speed, the mixin methods will have linear performance;
however, if the underlying method is linear (as it would be with a linked list), the mixins will have quadratic performance and will likely need to be overridden.</p>
<h3 id="inheritance">Inheritance</h3>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-42-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-42-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-42-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-42-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-42-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-42-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-42-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-42-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-42-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-42-10">10</a></span>
<span class="normal"><a href="#__codelineno-42-11">11</a></span>
<span class="normal"><a href="#__codelineno-42-12">12</a></span>
<span class="normal"><a href="#__codelineno-42-13">13</a></span>
<span class="normal"><a href="#__codelineno-42-14">14</a></span>
<span class="normal"><a href="#__codelineno-42-15">15</a></span>
<span class="normal"><a href="#__codelineno-42-16">16</a></span>
<span class="normal"><a href="#__codelineno-42-17">17</a></span>
<span class="normal"><a href="#__codelineno-42-18">18</a></span>
<span class="normal"><a href="#__codelineno-42-19">19</a></span>
<span class="normal"><a href="#__codelineno-42-20">20</a></span>
<span class="normal"><a href="#__codelineno-42-21">21</a></span>
<span class="normal"><a href="#__codelineno-42-22">22</a></span>
<span class="normal"><a href="#__codelineno-42-23">23</a></span>
<span class="normal"><a href="#__codelineno-42-24">24</a></span>
<span class="normal"><a href="#__codelineno-42-25">25</a></span>
<span class="normal"><a href="#__codelineno-42-26">26</a></span>
<span class="normal"><a href="#__codelineno-42-27">27</a></span>
<span class="normal"><a href="#__codelineno-42-28">28</a></span>
<span class="normal"><a href="#__codelineno-42-29">29</a></span>
<span class="normal"><a href="#__codelineno-42-30">30</a></span>
<span class="normal"><a href="#__codelineno-42-31">31</a></span>
<span class="normal"><a href="#__codelineno-42-32">32</a></span>
<span class="normal"><a href="#__codelineno-42-33">33</a></span>
<span class="normal"><a href="#__codelineno-42-34">34</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-42-1" name="__codelineno-42-1"></a><span class="k">class</span> <span class="nc">Parent</span> <span class="p">():</span>
<a id="__codelineno-42-2" name="__codelineno-42-2"></a> <span class="k">def</span> <span class="nf">__init</span> <span class="n">__</span> <span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-42-3" name="__codelineno-42-3"></a> <span class="o">...</span>
<a id="__codelineno-42-4" name="__codelineno-42-4"></a>
<a id="__codelineno-42-5" name="__codelineno-42-5"></a> <span class="k">def</span> <span class="nf">method_1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-42-6" name="__codelineno-42-6"></a> <span class="o">...</span>
<a id="__codelineno-42-7" name="__codelineno-42-7"></a>
<a id="__codelineno-42-8" name="__codelineno-42-8"></a> <span class="k">def</span> <span class="nf">method_2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-42-9" name="__codelineno-42-9"></a> <span class="o">...</span>
<a id="__codelineno-42-10" name="__codelineno-42-10"></a>
<a id="__codelineno-42-11" name="__codelineno-42-11"></a><span class="k">class</span> <span class="nc">Child</span><span class="p">(</span><span class="n">Parent</span><span class="p">):</span> <span class="c1"># parent class in parentheses to inherit variables and methods</span>
<a id="__codelineno-42-12" name="__codelineno-42-12"></a>
<a id="__codelineno-42-13" name="__codelineno-42-13"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">,</span> <span class="n">parent_parameters</span><span class="p">):</span>
<a id="__codelineno-42-14" name="__codelineno-42-14"></a> <span class="n">Parent</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent_parameters</span><span class="p">)</span> <span class="c1"># inherit parent variables</span>
<a id="__codelineno-42-15" name="__codelineno-42-15"></a> <span class="o">...</span>
<a id="__codelineno-42-16" name="__codelineno-42-16"></a>
<a id="__codelineno-42-17" name="__codelineno-42-17"></a> <span class="k">def</span> <span class="nf">method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-42-18" name="__codelineno-42-18"></a> <span class="o">...</span>
<a id="__codelineno-42-19" name="__codelineno-42-19"></a>
<a id="__codelineno-42-20" name="__codelineno-42-20"></a> <span class="k">def</span> <span class="nf">method_parent_1</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># override method (child class with homonymous method to parent class)</span>
<a id="__codelineno-42-21" name="__codelineno-42-21"></a> <span class="o">...</span>
<a id="__codelineno-42-22" name="__codelineno-42-22"></a>
<a id="__codelineno-42-23" name="__codelineno-42-23"></a><span class="k">class</span> <span class="nc">Child</span><span class="p">(</span><span class="n">Parent</span><span class="p">):</span> <span class="c1"># parent class in brackets to inherit properties</span>
<a id="__codelineno-42-24" name="__codelineno-42-24"></a>
<a id="__codelineno-42-25" name="__codelineno-42-25"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">,</span> <span class="n">parent_parameters</span><span class="p">):</span>
<a id="__codelineno-42-26" name="__codelineno-42-26"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">parent_parameters</span><span class="p">)</span> <span class="c1"># different method to inherit parent variables (SELF not needed) using SUPER()</span>
<a id="__codelineno-42-27" name="__codelineno-42-27"></a> <span class="nb">super</span><span class="p">(</span><span class="n">Parent</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">parent_parameters</span><span class="p">)</span> <span class="c1"># parent constructor invoked separately</span>
<a id="__codelineno-42-28" name="__codelineno-42-28"></a>
<a id="__codelineno-42-29" name="__codelineno-42-29"></a> <span class="k">def</span> <span class="nf">method</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-42-30" name="__codelineno-42-30"></a> <span class="o">...</span>
<a id="__codelineno-42-31" name="__codelineno-42-31"></a>
<a id="__codelineno-42-32" name="__codelineno-42-32"></a> <span class="k">def</span> <span class="nf">method_2</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># parent method updated</span>
<a id="__codelineno-42-33" name="__codelineno-42-33"></a> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">method_2</span><span class="p">()</span> <span class="c1"># invoke parent method as is</span>
<a id="__codelineno-42-34" name="__codelineno-42-34"></a> <span class="o">...</span>
</code></pre></div></td></tr></table></div>
<h3 id="polymorphism">Polymorphism</h3>
<p><strong>Note</strong>: python does not support method overloading</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-43-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-43-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-43-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-43-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-43-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-43-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-43-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-43-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-43-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-43-10">10</a></span>
<span class="normal"><a href="#__codelineno-43-11">11</a></span>
<span class="normal"><a href="#__codelineno-43-12">12</a></span>
<span class="normal"><a href="#__codelineno-43-13">13</a></span>
<span class="normal"><a href="#__codelineno-43-14">14</a></span>
<span class="normal"><a href="#__codelineno-43-15">15</a></span>
<span class="normal"><a href="#__codelineno-43-16">16</a></span>
<span class="normal"><a href="#__codelineno-43-17">17</a></span>
<span class="normal"><a href="#__codelineno-43-18">18</a></span>
<span class="normal"><a href="#__codelineno-43-19">19</a></span>
<span class="normal"><a href="#__codelineno-43-20">20</a></span>
<span class="normal"><a href="#__codelineno-43-21">21</a></span>
<span class="normal"><a href="#__codelineno-43-22">22</a></span>
<span class="normal"><a href="#__codelineno-43-23">23</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-43-1" name="__codelineno-43-1"></a><span class="c1"># DUCKTYPING</span>
<a id="__codelineno-43-2" name="__codelineno-43-2"></a><span class="c1"># Working with objects regardless of their type, as long as they implement certain protocols</span>
<a id="__codelineno-43-3" name="__codelineno-43-3"></a>
<a id="__codelineno-43-4" name="__codelineno-43-4"></a><span class="k">class</span> <span class="nc">Class1</span><span class="p">:</span>
<a id="__codelineno-43-5" name="__codelineno-43-5"></a> <span class="k">def</span> <span class="nf">method_1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-43-6" name="__codelineno-43-6"></a> <span class="o">...</span>
<a id="__codelineno-43-7" name="__codelineno-43-7"></a>
<a id="__codelineno-43-8" name="__codelineno-43-8"></a><span class="k">class</span> <span class="nc">Class2</span><span class="p">:</span>
<a id="__codelineno-43-9" name="__codelineno-43-9"></a> <span class="k">def</span> <span class="nf">method_1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-43-10" name="__codelineno-43-10"></a> <span class="o">...</span>
<a id="__codelineno-43-11" name="__codelineno-43-11"></a>
<a id="__codelineno-43-12" name="__codelineno-43-12"></a><span class="c1"># since python is a dynamic language it doesn&#39;t matter what type (class) the object passed is</span>
<a id="__codelineno-43-13" name="__codelineno-43-13"></a><span class="c1"># the function invokes the object method passed regardless of the object class</span>
<a id="__codelineno-43-14" name="__codelineno-43-14"></a><span class="k">def</span> <span class="nf">polymorph_method</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<a id="__codelineno-43-15" name="__codelineno-43-15"></a> <span class="nb">object</span><span class="o">.</span><span class="n">method_1</span><span class="p">()</span>
<a id="__codelineno-43-16" name="__codelineno-43-16"></a>
<a id="__codelineno-43-17" name="__codelineno-43-17"></a><span class="c1"># DEPENDENCY INJECTION WITH DUCKTYPING</span>
<a id="__codelineno-43-18" name="__codelineno-43-18"></a><span class="k">class</span> <span class="nc">Class</span><span class="p">:</span>
<a id="__codelineno-43-19" name="__codelineno-43-19"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span>
<a id="__codelineno-43-20" name="__codelineno-43-20"></a> <span class="bp">self</span><span class="o">.</span><span class="n">dependency</span> <span class="o">=</span> <span class="nb">object</span>
<a id="__codelineno-43-21" name="__codelineno-43-21"></a>
<a id="__codelineno-43-22" name="__codelineno-43-22"></a> <span class="k">def</span> <span class="nf">method_1</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># the function invokes the method of the object passed</span>
<a id="__codelineno-43-23" name="__codelineno-43-23"></a> <span class="bp">self</span><span class="o">.</span><span class="n">dependency</span><span class="o">.</span><span class="n">method_1</span><span class="p">()</span>
</code></pre></div></td></tr></table></div>
<h3 id="operator-overloading">Operator Overloading</h3>
<p><strong>Operators fundamental rule</strong>: <em>always</em> return an object, if operation fails return <code>NotImplemented</code></p>
<p>Limitations of operator overloading:</p>
<ul>
<li>no overloading of built-in types</li>
<li>no creation of new operators</li>
<li>no overloading operators <code>is</code>, <code>and</code>, <code>or</code>, <code>not</code></li>
</ul>
<h3 id="astrazione">Astrazione</h3>
<p>The <strong>interfaces</strong> are abstract classes with <em>all</em> abstract methods, they are used to indicate which methods such as child classes <em>must</em> have. Interfaces have <em>only</em> a list of abstract methods.</p>
<p><strong>abstract classes</strong> have <em>at least</em> one abstract method; child classes that inherit from an abstract class <em>must</em> implement abstract methods. Abstract classes <em>cannot</em> be instantiated.</p>
<p>Virtual subclasses are used to include third-party classes as subclasses of a class of their own. They are recognized as belonging to the parent class without however having to implement their methods.</p>
<p>The <code>@Class.register</code> or <code>Class.register(subclass)</code> decorators are used to mark subclasses.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-44-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-44-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-44-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-44-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-44-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-44-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-44-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-44-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-44-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-44-10">10</a></span>
<span class="normal"><a href="#__codelineno-44-11">11</a></span>
<span class="normal"><a href="#__codelineno-44-12">12</a></span>
<span class="normal"><a href="#__codelineno-44-13">13</a></span>
<span class="normal"><a href="#__codelineno-44-14">14</a></span>
<span class="normal"><a href="#__codelineno-44-15">15</a></span>
<span class="normal"><a href="#__codelineno-44-16">16</a></span>
<span class="normal"><a href="#__codelineno-44-17">17</a></span>
<span class="normal"><a href="#__codelineno-44-18">18</a></span>
<span class="normal"><a href="#__codelineno-44-19">19</a></span>
<span class="normal"><a href="#__codelineno-44-20">20</a></span>
<span class="normal"><a href="#__codelineno-44-21">21</a></span>
<span class="normal"><a href="#__codelineno-44-22">22</a></span>
<span class="normal"><a href="#__codelineno-44-23">23</a></span>
<span class="normal"><a href="#__codelineno-44-24">24</a></span>
<span class="normal"><a href="#__codelineno-44-25">25</a></span>
<span class="normal"><a href="#__codelineno-44-26">26</a></span>
<span class="normal"><a href="#__codelineno-44-27">27</a></span>
<span class="normal"><a href="#__codelineno-44-28">28</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-44-1" name="__codelineno-44-1"></a><span class="kn">from</span> <span class="nn">abc</span> <span class="kn">import</span> <span class="n">abstractmethod</span><span class="p">,</span> <span class="n">ABC</span>
<a id="__codelineno-44-2" name="__codelineno-44-2"></a>
<a id="__codelineno-44-3" name="__codelineno-44-3"></a><span class="k">class</span> <span class="nc">Abstract</span><span class="p">(</span><span class="n">ABC</span><span class="p">):</span> <span class="c1"># abstract class MUST INHERIT from parent class ABC</span>
<a id="__codelineno-44-4" name="__codelineno-44-4"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">):</span>
<a id="__codelineno-44-5" name="__codelineno-44-5"></a> <span class="o">...</span>
<a id="__codelineno-44-6" name="__codelineno-44-6"></a>
<a id="__codelineno-44-7" name="__codelineno-44-7"></a> <span class="k">def</span> <span class="nf">parent_method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-44-8" name="__codelineno-44-8"></a> <span class="o">...</span>
<a id="__codelineno-44-9" name="__codelineno-44-9"></a>
<a id="__codelineno-44-10" name="__codelineno-44-10"></a> <span class="nd">@abstractmethod</span> <span class="c1"># abstract method MUST be marked with @abstractmethod decorator</span>
<a id="__codelineno-44-11" name="__codelineno-44-11"></a> <span class="k">def</span> <span class="nf">abstract_method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-44-12" name="__codelineno-44-12"></a> <span class="k">pass</span>
<a id="__codelineno-44-13" name="__codelineno-44-13"></a> <span class="c1"># abstract method MUST be overridden (can be non-empty)</span>
<a id="__codelineno-44-14" name="__codelineno-44-14"></a> <span class="c1"># super() to invoke it in the concrete class</span>
<a id="__codelineno-44-15" name="__codelineno-44-15"></a>
<a id="__codelineno-44-16" name="__codelineno-44-16"></a><span class="k">class</span> <span class="nc">Child</span><span class="p">(</span><span class="n">Abstract</span><span class="p">):</span>
<a id="__codelineno-44-17" name="__codelineno-44-17"></a>
<a id="__codelineno-44-18" name="__codelineno-44-18"></a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parameters</span><span class="p">,</span> <span class="n">parent_parameters</span><span class="p">):</span>
<a id="__codelineno-44-19" name="__codelineno-44-19"></a> <span class="n">parent_class</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">parent_parameters</span><span class="p">)</span>
<a id="__codelineno-44-20" name="__codelineno-44-20"></a>
<a id="__codelineno-44-21" name="__codelineno-44-21"></a> <span class="k">def</span> <span class="nf">method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<a id="__codelineno-44-22" name="__codelineno-44-22"></a> <span class="o">...</span>
<a id="__codelineno-44-23" name="__codelineno-44-23"></a>
<a id="__codelineno-44-24" name="__codelineno-44-24"></a> <span class="k">def</span> <span class="nf">parent_method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># override method (child class with homonymous method to parent class)</span>
<a id="__codelineno-44-25" name="__codelineno-44-25"></a> <span class="o">...</span>
<a id="__codelineno-44-26" name="__codelineno-44-26"></a>
<a id="__codelineno-44-27" name="__codelineno-44-27"></a> <span class="k">def</span> <span class="nf">abstract_method</span> <span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="c1"># implementation of abstract method inherited from abstract class (NECESSARY) by override</span>
<a id="__codelineno-44-28" name="__codelineno-44-28"></a> <span class="o">...</span>
</code></pre></div></td></tr></table></div>
<h2 id="exception-handling">Exception Handling</h2>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-45-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-45-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-45-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-45-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-45-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-45-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-45-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-45-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-45-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-45-10">10</a></span>
<span class="normal"><a href="#__codelineno-45-11">11</a></span>
<span class="normal"><a href="#__codelineno-45-12">12</a></span>
<span class="normal"><a href="#__codelineno-45-13">13</a></span>
<span class="normal"><a href="#__codelineno-45-14">14</a></span>
<span class="normal"><a href="#__codelineno-45-15">15</a></span>
<span class="normal"><a href="#__codelineno-45-16">16</a></span>
<span class="normal"><a href="#__codelineno-45-17">17</a></span>
<span class="normal"><a href="#__codelineno-45-18">18</a></span>
<span class="normal"><a href="#__codelineno-45-19">19</a></span>
<span class="normal"><a href="#__codelineno-45-20">20</a></span>
<span class="normal"><a href="#__codelineno-45-21">21</a></span>
<span class="normal"><a href="#__codelineno-45-22">22</a></span>
<span class="normal"><a href="#__codelineno-45-23">23</a></span>
<span class="normal"><a href="#__codelineno-45-24">24</a></span>
<span class="normal"><a href="#__codelineno-45-25">25</a></span>
<span class="normal"><a href="#__codelineno-45-26">26</a></span>
<span class="normal"><a href="#__codelineno-45-27">27</a></span>
<span class="normal"><a href="#__codelineno-45-28">28</a></span>
<span class="normal"><a href="#__codelineno-45-29">29</a></span>
<span class="normal"><a href="#__codelineno-45-30">30</a></span>
<span class="normal"><a href="#__codelineno-45-31">31</a></span>
<span class="normal"><a href="#__codelineno-45-32">32</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-45-1" name="__codelineno-45-1"></a><span class="c1"># CHECK ASERATIONS</span>
<a id="__codelineno-45-2" name="__codelineno-45-2"></a><span class="k">assert</span> <span class="n">condition</span><span class="p">,</span> <span class="s1">&#39;error message&#39;</span> <span class="c1"># if the assertion is false show an error message</span>
<a id="__codelineno-45-3" name="__codelineno-45-3"></a>
<a id="__codelineno-45-4" name="__codelineno-45-4"></a><span class="c1"># particular errors are objects of a particular class of exceptions which in turn is a child of the base exception class (exception)</span>
<a id="__codelineno-45-5" name="__codelineno-45-5"></a><span class="k">class</span> <span class="nc">CustomExceptionError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> <span class="c1"># MUST somehow inherit from class exception (even in later inheritance steps)</span>
<a id="__codelineno-45-6" name="__codelineno-45-6"></a> <span class="k">pass</span> <span class="c1"># or instructions</span>
<a id="__codelineno-45-7" name="__codelineno-45-7"></a>
<a id="__codelineno-45-8" name="__codelineno-45-8"></a><span class="c1"># try block contains code that might cause an exception</span>
<a id="__codelineno-45-9" name="__codelineno-45-9"></a><span class="c1"># code inside try and after the error it is not executed</span>
<a id="__codelineno-45-10" name="__codelineno-45-10"></a><span class="k">try</span><span class="p">:</span>
<a id="__codelineno-45-11" name="__codelineno-45-11"></a> <span class="o">...</span>
<a id="__codelineno-45-12" name="__codelineno-45-12"></a> <span class="k">raise</span> <span class="n">CustomExceptionError</span> <span class="p">(</span><span class="s2">&quot;message&quot;</span><span class="p">)</span> <span class="c1"># raise the exception</span>
<a id="__codelineno-45-13" name="__codelineno-45-13"></a>
<a id="__codelineno-45-14" name="__codelineno-45-14"></a><span class="c1"># except takes control of error handling without passing through the interpreter</span>
<a id="__codelineno-45-15" name="__codelineno-45-15"></a><span class="c1"># block executed if an error occurs in try</span>
<a id="__codelineno-45-16" name="__codelineno-45-16"></a>
<a id="__codelineno-45-17" name="__codelineno-45-17"></a><span class="c1"># except error specified by class</span>
<a id="__codelineno-45-18" name="__codelineno-45-18"></a><span class="k">except</span> <span class="n">ExceptionClass</span><span class="p">:</span>
<a id="__codelineno-45-19" name="__codelineno-45-19"></a> <span class="c1"># Default error message is not shown</span>
<a id="__codelineno-45-20" name="__codelineno-45-20"></a> <span class="c1"># the program does not stop</span>
<a id="__codelineno-45-21" name="__codelineno-45-21"></a>
<a id="__codelineno-45-22" name="__codelineno-45-22"></a><span class="c1"># except on generic errors</span>
<a id="__codelineno-45-23" name="__codelineno-45-23"></a><span class="k">except</span><span class="p">:</span>
<a id="__codelineno-45-24" name="__codelineno-45-24"></a> <span class="c1"># code here</span>
<a id="__codelineno-45-25" name="__codelineno-45-25"></a>
<a id="__codelineno-45-26" name="__codelineno-45-26"></a><span class="c1"># block executed if exception does not occur</span>
<a id="__codelineno-45-27" name="__codelineno-45-27"></a><span class="k">else</span><span class="p">:</span>
<a id="__codelineno-45-28" name="__codelineno-45-28"></a> <span class="c1"># code here</span>
<a id="__codelineno-45-29" name="__codelineno-45-29"></a>
<a id="__codelineno-45-30" name="__codelineno-45-30"></a><span class="c1"># block executed in all cases, cleanup code goes here</span>
<a id="__codelineno-45-31" name="__codelineno-45-31"></a><span class="k">finally</span><span class="p">:</span>
<a id="__codelineno-45-32" name="__codelineno-45-32"></a> <span class="c1"># code here</span>
</code></pre></div></td></tr></table></div>
<h2 id="file">File</h2>
<h3 id="opening-a-file">Opening A File</h3>
<p>Text file opening mode:</p>
<ul>
<li><code>w</code>: write, overwrite the contents of the file</li>
<li><code>r</code>: read, read file contents</li>
<li><code>a</code>: append, add content to the file</li>
<li><code>w +</code>: write &amp; read</li>
<li><code>r +</code>: write &amp; read &amp; append</li>
<li><code>a +</code>: append &amp; read</li>
<li><code>x</code>: exclusive creation, if the file already exists -&gt; <code>FileExistError</code> (extended write mode)</li>
</ul>
<p>Open binary file mode:</p>
<ul>
<li><code>wb</code>: write, overwrites the contents of the file</li>
<li><code>rb</code>: read, read file contents</li>
<li><code>ab</code>: append, add content to the file</li>
<li><code>w + b</code>: write &amp; read</li>
<li><code>r + b</code>: write &amp; read &amp; append</li>
<li><code>a + b</code>: append &amp; read</li>
<li><code>xb</code>: exclusive creation, if the file already exists -&gt; <code>FileExistError</code> (extended write mode)</li>
</ul>
<p><strong>Note</strong>: Linux and MacOSX use <code>UTF-8</code> everywhere while windows uses <code>cp1252</code>, <code>cp850</code>,<code>mbcs</code>, <code>UTF-8</code>. Don't rely on default encoding and use <strong>explicitly</strong> <code>UTF-8</code>.</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-46-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-46-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-46-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-46-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-46-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-46-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-46-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-46-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-46-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-46-10">10</a></span>
<span class="normal"><a href="#__codelineno-46-11">11</a></span>
<span class="normal"><a href="#__codelineno-46-12">12</a></span>
<span class="normal"><a href="#__codelineno-46-13">13</a></span>
<span class="normal"><a href="#__codelineno-46-14">14</a></span>
<span class="normal"><a href="#__codelineno-46-15">15</a></span>
<span class="normal"><a href="#__codelineno-46-16">16</a></span>
<span class="normal"><a href="#__codelineno-46-17">17</a></span>
<span class="normal"><a href="#__codelineno-46-18">18</a></span>
<span class="normal"><a href="#__codelineno-46-19">19</a></span>
<span class="normal"><a href="#__codelineno-46-20">20</a></span>
<span class="normal"><a href="#__codelineno-46-21">21</a></span>
<span class="normal"><a href="#__codelineno-46-22">22</a></span>
<span class="normal"><a href="#__codelineno-46-23">23</a></span>
<span class="normal"><a href="#__codelineno-46-24">24</a></span>
<span class="normal"><a href="#__codelineno-46-25">25</a></span>
<span class="normal"><a href="#__codelineno-46-26">26</a></span>
<span class="normal"><a href="#__codelineno-46-27">27</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-46-1" name="__codelineno-46-1"></a><span class="nb">object</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;filename&#39;</span><span class="p">,</span> <span class="n">mode</span> <span class="o">=</span> <span class="s1">&#39;r&#39;</span><span class="p">,</span> <span class="n">encoding</span> <span class="o">=</span> <span class="s1">&#39;utf-8&#39;</span><span class="p">)</span> <span class="c1"># encoding MUST BE utf-8 for compatibility</span>
<a id="__codelineno-46-2" name="__codelineno-46-2"></a><span class="c1"># filename can be the absolute path to the file location (default: file created in the source code folder)</span>
<a id="__codelineno-46-3" name="__codelineno-46-3"></a><span class="c1"># double slash to avoid \ escaping</span>
<a id="__codelineno-46-4" name="__codelineno-46-4"></a>
<a id="__codelineno-46-5" name="__codelineno-46-5"></a><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s1">&#39;filename&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span>
<a id="__codelineno-46-6" name="__codelineno-46-6"></a> <span class="n">instructions_to_file</span> <span class="c1"># block use filename to indicate file</span>
<a id="__codelineno-46-7" name="__codelineno-46-7"></a>
<a id="__codelineno-46-8" name="__codelineno-46-8"></a><span class="c1"># CLOSE A FILE</span>
<a id="__codelineno-46-9" name="__codelineno-46-9"></a><span class="nb">object</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
<a id="__codelineno-46-10" name="__codelineno-46-10"></a>
<a id="__codelineno-46-11" name="__codelineno-46-11"></a><span class="c1"># WRITE TO A FILE</span>
<a id="__codelineno-46-12" name="__codelineno-46-12"></a><span class="nb">object</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="c1"># write single string to file</span>
<a id="__codelineno-46-13" name="__codelineno-46-13"></a><span class="nb">object</span><span class="o">.</span><span class="n">writelines</span><span class="p">(</span><span class="o">*</span> <span class="n">strings</span><span class="p">)</span> <span class="c1"># write multiple strings to file</span>
<a id="__codelineno-46-14" name="__codelineno-46-14"></a>
<a id="__codelineno-46-15" name="__codelineno-46-15"></a><span class="c1"># READING FROM A FILE</span>
<a id="__codelineno-46-16" name="__codelineno-46-16"></a><span class="nb">object</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="c1"># return ALL the contents of the file (including escape sequence) and place the &quot;cursor&quot; at the end of the file</span>
<a id="__codelineno-46-17" name="__codelineno-46-17"></a><span class="nb">object</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span> <span class="c1"># returns 0 (zero) and places the cursor at the beginning of the file</span>
<a id="__codelineno-46-18" name="__codelineno-46-18"></a><span class="nb">object</span><span class="o">.</span><span class="n">readlines</span><span class="p">()</span> <span class="c1"># return list of file lines (ATTENTION: keep everything in memory, be careful with large files)</span>
<a id="__codelineno-46-19" name="__codelineno-46-19"></a><span class="nb">object</span><span class="o">.</span><span class="n">readline</span><span class="p">()</span> <span class="c1"># returns single line file</span>
<a id="__codelineno-46-20" name="__codelineno-46-20"></a>
<a id="__codelineno-46-21" name="__codelineno-46-21"></a><span class="c1"># CHECK FILE EXISTENCE</span>
<a id="__codelineno-46-22" name="__codelineno-46-22"></a><span class="kn">import</span> <span class="nn">os</span><span class="o">,</span> <span class="nn">sys</span>
<a id="__codelineno-46-23" name="__codelineno-46-23"></a><span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="s1">&#39;filepath&#39;</span><span class="p">):</span> <span class="c1"># check file existence (TRUE if it exists)</span>
<a id="__codelineno-46-24" name="__codelineno-46-24"></a> <span class="c1"># code here</span>
<a id="__codelineno-46-25" name="__codelineno-46-25"></a><span class="k">else</span><span class="p">:</span>
<a id="__codelineno-46-26" name="__codelineno-46-26"></a> <span class="c1"># code here</span>
<a id="__codelineno-46-27" name="__codelineno-46-27"></a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span> <span class="c1"># exits the program and does not execute the next cosice</span>
</code></pre></div></td></tr></table></div>
<h2 id="copy">COPY</h2>
<p><strong>SHALLOW COPY</strong>: copies the "container" and references to the content
<strong>DEEP COPY</strong>: copies the "container" and contents (no reference)</p>
<div class="highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Python</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-47-1">1</a></span>
<span class="normal"><a href="#__codelineno-47-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-47-1" name="__codelineno-47-1"></a><span class="n">copy</span> <span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># returns shallow copy of xor</span>
<a id="__codelineno-47-2" name="__codelineno-47-2"></a><span class="n">deepcopy</span> <span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="c1"># returns shallow copy of x</span>
</code></pre></div></td></tr></table></div>
</article>
</div>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
Back to top
</button>
</main>
<footer class="md-footer">
<nav class="md-footer__inner md-grid" aria-label="Footer" >
<a href="../assembly/riscv.html" class="md-footer__link md-footer__link--prev" aria-label="Previous: RISC-V">
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction">
Previous
</span>
<div class="md-ellipsis">
RISC-V
</div>
</div>
</a>
<a href="modules/argparse.html" class="md-footer__link md-footer__link--next" aria-label="Next: argparse">
<div class="md-footer__title">
<span class="md-footer__direction">
Next
</span>
<div class="md-ellipsis">
argparse
</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
MIT
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
<div class="md-social">
<a href="https://hachyderm.io/@m_lamonaca" target="_blank" rel="noopener me" title="hachyderm.io" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.5 102.5 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5m-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg>
</a>
<a href="https://github.com/m-lamonaca" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../..", "features": ["navigation.instant", "navigation.indexes", "navigation.tracking", "navigation.pruning", "navigation.sections", "navigation.top", "navigation.tabs", "navigation.tabs.sticky", "navigation.footer", "toc.follow", "content.code.copy"], "search": "../../assets/javascripts/workers/search.07f07601.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../../assets/javascripts/bundle.56dfad97.min.js"></script>
</body>
</html>