ááá±á·áá»áœááºá¯ááºááá¯á·ááẠPython áá¯ááºááá¯ááºážáááºážáá±á«ááºážáá»á¬ážá áœá¬á¡ááœáẠDropbox á០á¡áá»áá¯ážá¡á á¬ážááááºážáá»á¯ááºááŸá¯áá¯á¶á á¶ááᯠáá¬áá¬ááŒááºááŒááºážá áá¯áááá¡ááá¯ááºážááᯠáá¯ááºáá±áá»ááºááŸááááºá
â
ááá¬ážááẠá¡áá»áá¯ážá¡á á¬áž áá¶á·ááá¯ážááŸá¯ (PEP 484)
Hack Week ááẠ2014 áá¯ááŸá áºá¡ááœááºáž Dropbox ááœáẠmypy ááŸáá·áºáá»áœááºá¯ááºááá¯á·áááááá¯á¶ážááŒááºážáááºáá±á¬á ááºážáááºááŸá¯áá»á¬ážááá¯ááŒá¯áá¯ááºáá²á·áá«áááºá Hack Week ááẠDropbox ááŸáá»ááºážááá±á¬áá áºáááºááŒá¬ááœá²ááŒá áºáááºá á€áá¬áá¡ááœááºáž áááºáááºážáá»á¬ážááẠááááááá¯á·á¡ááá¯ááŸáááá·áºá¡ááá¯ááºáž áá¯ááºáá±á¬ááºááá¯ááºáá«áááºá Dropbox áá¡áá»á±á¬áºááŒá¬ážáá¯á¶ážáááºážááá¬ááá±á¬áá»ááºá¡áá»áá¯á·ááẠá€áá²á·ááá¯á·áá±á¬ááŒá áºáááºáá»á¬ážááœááºá áááºáá²á·áááºá á€á ááºážáááºááŸá¯áááááºá¡áá±ááŒáá·áº mypy ááẠááá±á¬áá»ááºááᯠáá»ááºáá»ááºááŒáá·áºááŒáá·áºá¡áá¯á¶ážááŒá¯áááºá¡áááºááá·áºáááŒá áºáá±ážáá±á¬áºáááºáž mypy ááẠá¡áá¬ážá¡áá¬áá±á¬ááºážáááºáᯠáá»áœááºá¯ááºááá¯á·áá±á¬ááºáá»ááºáá»áá²á·áááºá
ááá¯á¡áá»áááºááœááºá Python á¡áá»áá¯ážá¡á
á¬áž á¡ááááºá¡ááŒáœááºá
áá
áºáá»á¬ážááᯠá
á¶ááá°áá¬ááŒá¯ááẠá
áááºáá°ážááẠáá±áá²ááœáẠááŸááá±áááºá áá»áœááºáá±á¬áºááŒá±á¬áá²á·áááá¯áá²á Python 3.0 ááŸá¬ áá¯ááºáá±á¬ááºáá»ááºááœá±á¡ááœáẠtype annotations ááœá±ááᯠáá¯á¶ážááá¯ááºáá±ááá·áº áááºááŸááºáá¬ážáá²á· syntax áá²á· semantics ááœá±ááá«áá² áááá¬ážáá±á¬á¡áá¯á¶ážá¡ááŸá¯ááºážááœá±áá¬ááŒá
áºáá«áááºá áááá¯ááááºááᯠáá¯ááºáá±á¬ááºáá±á
ááºá¡ááœááºážá á€ááŸááºáá»ááºáá»á¬ážááᯠá¡áá»á¬ážá
á¯ááŸá¬ ááá¯ážááá¯ážááŸááºážááŸááºáž áá»á
áºáá»á°ááŸá¯áá²á·áááºá Hack Week ááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠá
á¶ááŸá¯ááºážáááºááŸááºááŒááºážááá¯ááºáᬠáá±á«áá¬ááá»á¬ážááᯠá
áááºáá¯ááºáá±á¬ááºáá²á·áááºá á€áá¯ááºáááºážááẠáá±á«áºáá±á«ááºáá¬áá²á·áááºá
áá»áœááºá¯ááºááá¯á·á ááá±á¬áá¬ážááᯠááŸá áºáááºááŒááºááá¯ááºáááºá ááááŠážá áœá¬á Python áá±áá áá áºáá áºáá¯áá¯á¶ážááẠá¡áá»áá¯ážá¡á á¬ážá¡ááááºá¡ááŒáœááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážá¡ááœáẠáá¯á¶áá»ááºážáááºááŸá¯áá áºáᯠ(Python ááœááºá¡áá¯á¶ážááŒá¯ááá·áºá¡áá¯á¶ážá¡ááŸá¯ááºážáá áºáᯠ"type annotations" ááŸáá·áºáá®áá»áŸáááº) ááá¯á¡áá¯á¶ážááŒá¯ááẠáá»áŸá±á¬áºááá·áºáá«áááºá ááŒá áºááá¯ááºááŒá±ááŸááá±á¬ á¡áá¹ááá¬ááºáá»á¬ážááá¯áá±ážá áááºážááẠááŸá áºáŠážááŸá áºááẠáááá¬ááááŒá áºáá±á¬ áááºážáááºážáá»á¬ážá áœá¬ááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááẠááá¯áá±á¬ááºážáá«áááºá áá¯áááá áá»áœááºá¯ááºááá¯á·ááẠPython á¡ááá¯ááºá¡áááºážá á¡ááœá²á·áááºáá»á¬ážá áœá¬ááŸáá·áº á¡áá»áá¯ážá¡á á¬áž ááŸááºá á¬ááá¹ááá¬ážáá»á¬ážááᯠááœáá·áºááœáá·áºáááºážáááºáž ááœá±ážááœá±ážááá¯áá«áááºá Python áááá¯ááááºáá¬áá»á¬ážáá¡ááŒááºááœáẠáá¬áá¬á áá¬ážáá¡ááŒá±áá¶á¡áá°á¡ááá»á¬ážá០áá»áœááºá¯ááºááá¯á·ááẠâá¡áá°áá±á¬ááºááŒááºáá°áá»á¬ážâ áá²á·ááá¯á·áááŒá áºááá¯ááá·áºá¡áá»ááºááŒá±á¬áá·áº á€ááá¹áááẠáá áºá áááºáá áºááá¯ááºážá¡á¬ážááŒáá·áº áá¯á¶ážááŒááºáá²á·ááŒááºážááŒá áºáááºá áááºážááẠ"duck typing" áá¯áá°áááá»á¬ážáá±á¬ dynamically typed language áá áºáá¯ááŒá áºáááºá áááºááœá¬ááœááºá á¡á ááá¯ááºážááœááºá á¡ááŒáááºá á¬ááá¯ááºááŒááºážááá¯ááºáᬠá¡ááœá±ážá¡ááŒááºá¡áá±á«áº áá¶ááááŒá áºááœááºááá±á¬áá¬ážááẠáá±á«áºáá±á«ááºáá¬ááẠááá°áá®ááá¯ááºáá±á ááá¯á·áá±á¬áº static typing ááẠáááŒá áºááá± áááá¯á¡ááºáá±á¬á·ááŒá±á¬ááºáž áááá¬áááºááŸá¬ážáá¬ááŒá®ážáá±á¬áẠááá¯á áááºáá¬ááºáá»á¬áž áá»á±á¬á·áá«ážááœá¬ážááẠ(áááºážááẠá¡ááŸááºáááẠá¡áá¯á¶ážáááºááŒá±á¬ááºáž áá°áá»á¬áž ááááŸááá¬ááŒá®ážáá±á¬ááº)á
áá±á¬ááºáá¯á¶ážááœáẠáááºáá¶áá»áá·áºáá¯á¶ážáá²á·áá±á¬ á¡ááááºá¡ááŒáœááºá á¬á¡áá¬ážá¡ááá¯á¡áá»áá¯ážá¡á á¬ážááẠááá¯á¡áá»áááºá mypy áá¶á·ááá¯ážáá±ážááá·áºá¡áá¬ááŸáá·áº á¡ááœááºáááºáá°áááºá PEP 484 ááᯠ3.5 áá¯ááŸá áºááœáẠPython 2015 ááŒáá·áº áá¯ááºááŒááºáá²á·áááºá Python ááẠdynamically typed language ááá¯ááºáá±á¬á·áá«á áá®ááŒá áºáááºááᯠPython áááá¯ááºážááŸá¬ á¡áá±ážáá«áá²á· ááŸááºááá¯ááºáá áºáá¯á¡ááŒá Ạááœá±ážááŒáá·áºáá»ááºáá«áááºá
ááœáŸá±á·ááŒá±á¬ááºážááŒááºážá áááºááŒááºážá
2015 ááŸá áºáá¯ááºááá¯ááºážááœáẠDropbox ááẠmypy ááœááºá¡áá¯ááºáá¯ááºáááºáá° XNUMX áá±á¬ááºá¡ááœá²á·ááá¯áááºáá®ážáá²á·áááºá áááºážááá¯á·ááœáẠGuido van Rossumá Greg Price ááŸáá·áº David Fisher ááá¯á· áá«áááºáááºá ááá¯á¡áá»áááºááŸá á á¡ááŒá±á¡áá±ááẠá¡ááœááºáá»ááºááŒááºá áœá¬ ááá¯ážáááºáá¬áááºá mypy ááŒá®ážááœá¬ážááŸá¯á¡ááœáẠááááá¯á¶ážá¡áá¬ážá¡áá®ážááŸá¬ á áœááºážáá±á¬ááºáááºááŒá áºáááºá á¡áááºá á¡ááááºá¡ááŒáœááºááŒá±á¬áá²á·áááá¯áá² ááá±á¬áá»ááºáá²á· á¡á á±á¬ááá¯ááºážáá¬áááœá±ááŸá¬ mypy á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠC ááá¯á· áá¬áá¬ááŒááºááá¯á· á ááºážá á¬ážáá²á·áá±ááá·áº á¡áá¯á¡áá»áááºááŸá¬áá±á¬á· áá®á áááºáá°ážáᬠá á¬áááºážáá²á ááœááºááœá¬ážáá«ááŒá®á mypy áá²á·ááá¯á·áá±á¬ áááááá¬áá»á¬ážá¡ááœáẠáá¯á¶áá±á¬ááºááŸá¯ áááŒááºáááºáá±á¬ CPython á áá¬ážááŒááºááᯠá¡áá¯á¶ážááŒá¯á á áá áºááᯠáá¯ááºáá±á¬ááºááŒááºážááœáẠáá»áœááºá¯ááºááá¯á· áááºááá·áºáá±áá«áááºá (JIT compiler ááŒáá·áº PyPy ááá±á¬áá»ááºááẠá¡ááŒá¬áž Python á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠá¡áá±á¬ááºá¡áá°áááŒá¯áá«á)
áá¶áá±á¬ááºážá áœá¬ááŒáá·áºá á¡áá»áá¯á·áá±á¬ á¡ááºáááá¯áá®áááºááá¯ááºáᬠááá¯ážáááºááŸá¯áá»á¬ážááẠáá»áœááºá¯ááºááá¯á·áá¡áá°á¡áá®ááᯠá€áá±áá¬ááœáẠáá±á¬ááºááŸááá¬áá«áááºá ááááá¯á¶áž á¡á¬ážáá±á¬ááºážáá±á¬ âá¡ááŸáááºááŒáŸáá·áºá ááºâ ááẠááá¯ážááŒáá·áºá á áºáá±ážááŒááºážá á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŒá áºáááºá á€ááá¯ážáááºááŸá¯ááá±á¬ááºááœááºá á¡áá°á¡áááẠááá¯ážááŸááºážáááº- á¡áááºá mypy áááááºáááºáááºááŸá¯áá±á¬ááºááá¯ááºáž module áááŸá®ááá¯ááŸá¯á¡á¬ážáá¯á¶ážááẠáááŒá±á¬ááºážáá²áá«áá ááŸá®ááá¯ááŸá¯ááŸáá·áºá¡áá°áá¯ááºáá±á¬ááºáá±á áẠáááẠrun á ááºá¡ááœááºáž ááááºážáááºážáá¬ážáá±á¬áá±áá¬ááᯠáá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá¯ááºáá«áááºá ááŒá¯ááŒááºáá¬ážáá±á¬ááá¯ááºáá»á¬ážááŸáá·áº áááºážááá¯á·á¡áá±á«áº ááŸá®ááá¯áá±áá±á¬ááá¯ááºáá»á¬ážáá±á«áºááœáẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠáá¯ááºáá±á¬ááºáááºáᬠááá¯á¡ááºáá«áááºá Mypy ááẠá¡áááºážááẠááá¯ááœá¬ážáááº- á¡áááºá module áá áºáá¯á ááŒááºááá»ááºááŸá¬ááŒáẠáááŒá±á¬ááºážáá²áá«áá ဠmodule ááá¯áááºááœááºážáá±á¬ á¡ááŒá¬áž module áá»á¬ážááẠáááºáá¶á á áºáá±ážááẠáááá¯á¡ááºáá±á¬á·áᯠmypy á០áá°ááá«áááºá
ááŸáááŒá®ážáá¬ážáá¯ááºá¡ááŒá±á¬ááºá¡ááŒá¬ážááᯠááŸááºáá¬ážáá¬ážááá·áºá¡áá« ááá¯ážááŒáá·áºá á áºáá±ážááŒááºážá áá»áœááºá¯ááºááá¯á·ááᯠáá»á¬ážá áœá¬á¡áá±á¬ááºá¡áá°ááŒá áºá á±áá«áááºá á¡áááá¡áá»ááºááŸá¬ á€áá¯ááºáááºážá ááºááœáẠááŸááºáá»ááºáá»á¬ážááᯠáá¯ááºááá¯á· ááŒááºážááŒááºážáá»ááºáž ááá·áºááœááºážááŒá®áž áááŒááºážááŒááºáž ááá¯ážáááºáá±á¬ááºážááœááºáá¬áá±á¬ááŒá±á¬áá·áº á€áá¯ááºáááºážá ááºááœáẠmypy á áááºáá¬áááºáᬠáá¯ááºáá±á¬ááºááŸá¯áá»á¬áž á¡áá»á¬ážá¡ááŒá¬áž áá«áááºáá±áá«áááºá mypy ááᯠá á áºáá±ážááẠááŸá®ááá¯ááŸá¯áá»á¬ážá áœá¬ááŸááá±á¬ááŒá±á¬áá·áº áááá¡ááŒáááºááŒá±ážááŒááºážááŸá¬ á¡ááœááºááŸá±ážááœá±ážáá±áá±ážáááºá ááá¯á·áá±á¬áẠá¡ááŒá±á¡áá±ááá¯ážáááºá á±áááºá áá»áœááºá¯ááºááá¯á·ááẠáá±ážáá¶áá±á«ááºáá®áá±á¬ ááááºážáááºážááŒááºáž ááá¹ááá¬ážáá áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá²á·áááºá mypy ááẠá ááºááœááºážáááºááŸáºááẠáá±ááºááá®áá±á¬á·ááŒá±á¬ááºáž ááœá±á·ááŸááá«áá áááºážááẠáááá¯áá»á¯ááºááá¯ááºáá¬ážáá±á¬ ááá¯ááŸá±á¬ááºááŸá¯á០codebase áá áºáá¯áá¯á¶ážá¡ááœáẠáááºááŸá cache snapshot ááᯠáá±á«ááºážáá¯ááºáá¯ááºáá«áááºá ááá¯á·áá±á¬áẠáááºážááẠá€áá»áŸááºáá áºááŒááºááá¯ááºáá»ááºá¡á¬áž á¡áá¯á¶ážááŒá¯á ááá¯ážááŒáá·áºá á áºáá±ážááŸá¯ááᯠáá¯ááºáá±á¬ááºáááºá áááºážááẠmypy áá áœááºážáá±á¬ááºáááºááá¯ááŒáŸáá·áºáááºáááºáá»áœááºá¯ááºááá¯á·á¡á¬ážáá±á¬ááºáááºááŒá®ážáá¬ážáá±á¬ááŒá±ááŸááºážáá áºááŸááºážááá¯ááŸááºážá á±áááºá
áááºážááẠDropbox ááœáẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠáá»ááºááŒááºááŒá®áž ááá¬áá¡ááá¯ááºáž áááºáá¶áá»áá·áºáá¯á¶ážááá·áº áá¬áááŒá áºáááºá 2016 ááŸá áºáá¯ááºááœááºá á¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážáá«ááŸááá±á¬ Python áá¯ááºá á¬ááŒá±á¬ááºáž 420000 ááá·áºááŸáááŸáá·áºááŒá®ážááŒá áºáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá¡ááŒá¬ážááẠá¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠá áááºá¡á¬ážáááºáááºááŒáááºá ááœá¶á·ááŒáá¯ážááá¯ážáááºáá±ážá¡ááœá²á·áá»á¬ážááẠDropbox mypy ááᯠááá¯ááá¯á¡áá¯á¶ážááŒá¯áá¬ááŒáááºá
á¡á²áá®áá¯ááºážá á¡áá¬á¡á¬ážáá¯á¶ážá áá±á¬ááºážáá±áá±ááá·áº áá»áœááºáá±á¬áºááá¯á· áá¯ááºá áá¬ááœá± á¡áá»á¬ážááŒá®áž áá»ááºáá«áá±ážáááºá áá»áœááºá¯ááºááá¯á·ááẠááá±á¬áá»ááºá ááŒá¿áá¬á§áááá¬áá»á¬ážááᯠááœá²ááŒá¬ážáááºááŸááºáááºááŸáá·áº áááºááá·áºááŒá¿áá¬áá»á¬ážááᯠáŠážá áœá¬ááŒá±ááŸááºážááẠááá¯á¡ááºáááºááᯠáá¬ážáááºáááºá¡ááœáẠá¡áá»áááºá¡áá«á¡ááá¯áẠá¡ááœááºážááá¯ááºážá¡áá¯á¶ážááŒá¯áá°á á áºáááºážáá»á¬ážááᯠá áááºáá±á¬ááºááœááºáá²á·áá«áááºá áááá¬áááºááŸá¬ážáá¬áá±á¬á¡áá«ááœáẠá¡áá±ážááŒá®ážáá¯á¶ážááŸá¬ á¡áá¯ááºááŸá áºáá¯ááŒá áºáááºá áááá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºá á¡áá»áá¯ážá¡á á¬ážááœáŸááºážááŒá¯á¶ááŸá¯ááᯠááá¯ááá¯ááá¯á¡ááºáááºá áá¯áááá áá»áœááºá¯ááºááá¯á·ááẠááá¯ááá¯ááŒááºáááºá áœá¬ áá¯ááºáá±á¬ááºááẠmypy ááá¯á¡ááºáá«áááºá mypy ááᯠá¡ááŸáááºááŒáŸáá·áºááŒá®áž áá¯áá¹ááá®ááá±á¬áá»ááºáá»á¬ážááœáẠá¡áá±á¬ááºá¡ááẠáá±á¬áºááẠáá»áœááºá¯ááºááá¯á·á áá¯ááºáááºážááẠááŒá®ážááŒáá·áºá á¯á¶ááẠááá±ážáá±ážááŒá±á¬ááºáž ááŸááºážááŸááºážáááºážáááºáž ááááá«áááºá á€áá¬áááºááŸá áºáá¯á á¡áá±ážáá«ááŸá¯ááᯠáá»áœááºá¯ááºááá¯á· á¡ááŒáá·áºá¡á ááááŸááá¬ážáááºááŒá®áž áááºážááá¯á·á¡á¬áž ááŒá±ááŸááºážááẠáááºááŸááºáá±ážáá¬ážáá«áááºá
ááá¯áá¯ááºáá¯ááºá áœááºážá¡á¬ážá
ááá¯ážááŒáŸáá·áºá á áºáá±ážááŸá¯áá»á¬ážááẠmypy ááá¯ááá¯ááá¯ááŒááºáááºá á±áá±á¬áºáááºáž áááááá¬ááẠáá¯á¶áá±á¬ááºá áœá¬áááŒááºáááºáá±ážáá«á ááá¯ážááŒáŸáá·áºá á áºáá±ážááŸá¯áá»á¬ážá áœá¬ááẠáá áºáááá áºááá·áºááŒá¬áááºá áá®ááá¯ááŒá áºááá²á· á¡ááŒá±á¬ááºážáááºážááá±á¬á· á ááºáá®ážá á®áž áááºááœááºážááŸá¯áá«áá²á áááºážááẠPython ááœááºáá±ážáá¬ážáá±á¬ áá¯ááºáá±á·á áºááŒá®ážáá»á¬ážááŒáá·áº á¡áá¯ááºáá¯ááºáá°ážáá°ááá¯ááºážááᯠá¡á¶á·á¡á¬ážááá·áºá á±áááºááá¯ááºáá«á áá»áœááºá¯ááºááá¯á·ááœáẠáá¬ááŸáá·áºáá»á®áá±á¬ module á¡á á¯á¶ááŸááá«áááºá áá áºáá¯á á®ááẠá¡ááŒá¬ážá¡áá¬á¡á¬ážáá¯á¶ážááᯠááœááºááá¯ááºáááºááœááºážáááºá ááœááºážáá¯ááºááœááºážáá áºáá¯ááŸá ááá¯ááºáá áºáá¯áá¯ááᯠááŒá±á¬ááºážáá²áá²á·áá«á mypy ááẠááá¯ááœááºážáááºááŸá ááá¯ááºá¡á¬ážáá¯á¶ážááᯠáá¯ááºáá±á¬ááºááááºááŒá áºááŒá®áž ááá¯ááœááºážáááºá០áá±á¬áºáá»á°ážáá»á¬ážááᯠáááŒá¬áá áááºááœááºážááá·áº áááºááá·áº module áááᯠáá¯ááºáá±á¬ááºááá«áááºá ááá¯áá²á·ááá¯á·áá±á¬áá¶ááá¬áá áºáá¯ááŸá¬ Dropbox ááœááºááŒá¿áá¬áá»á¬ážá áœá¬ááŒá áºá á±áá±á¬áá¬áááºááŒá®ážáá±á¬ "ááŸá®ááá¯ááŸá¯á¡ááŸá¯ááºá¡ááœá±áž" ááŒá áºáááºá á€ááœá²á·á ááºážáá¯á¶ááœáẠmodule áá¬áá±á«ááºážáá»á¬ážá áœá¬áá«áááºáááºááŸáá·áºá áááºážááᯠááá¯ááºááá¯áẠááá¯á·ááá¯áẠááœááºááá¯ááºá á ááºážáááºááŸá¯áá»á¬ážá áœá¬ááᯠáááºááœááºážá ááºááœááºá áááºážááᯠáá¯ááºáá¯ááºááŸá¯áá¯ááºááœááºáááºáž á¡áá¯á¶ážááŒá¯áá²á·áááºá
ááŒáá¯á·áááºááá¬áž ááŸá®ááá¯ááŸá¯áá»á¬ážá ááŒá
áºááá¯ááºááŒá±ááᯠáá»áœááºá¯ááºááá¯á· áá¯á¶ážáááºáá²á·áá±á¬áºáááºáž áááºážááᯠáá¯ááºáá±á¬ááºááẠá¡áááºážá¡ááŒá
áºáá»á¬áž áááŸááá²á·áá«á áá»áœááºá¯ááºááá¯á· ááááá±á¬ áá¯ááºáá»á¬áž á¡ááœááºáá»á¬ážáá«áááºá ááááºá¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážááœá±ážáá»ááºá
áá¬áá»ááºážáááºááŸá¯áá
áºáᯠáá±á«áºáá±á«ááºáá¬áá²á·áááºá "ááŸá®ááá¯ááŸá¯ááŸá¯ááºááœá±ážááŸá¯áá»á¬áž" ááœááºááẠmypy á¡áá¯ááºááá¯á¡ááŒááºáá¯ááºáááºáá»áœááºá¯ááºááá¯á·áá¯á¶ážááŒááºáá²á·áááºá mypy daemon ááᯠá¡áá¯á¶ážááŒá¯á á€áááºážááá¯ááºááᯠá¡á±á¬ááºááŒááºáá²á·áááºá daemon ááẠá
áááºáááºá
á¬ážá
áá¬áá±á¬ááºážáá±á¬ á¡ááºá¹áá«áááºááŸá
áºáá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áº áá¬áá¬áá¯ááºáááºážá
ááºáá
áºáá¯ááŒá
áºáááºá ááááŠážá
áœá¬á áááºážááẠmemory ááœáẠcodebase áá
áºáá¯áá¯á¶ážááŸáá·áºáááºáááºáá±á¬á¡áá»ááºá¡áááºáá»á¬ážááá¯ááááºážáááºážáá¬ážáááºá ááá¯ááá¯áááºááŸá¬ ááẠmypy ááá¯ááœáá·áºááá¯ááºážá áááºááœááºážáá¬ážáá±á¬ ááŸá®ááá¯ááŸá¯áá±á¬ááºáá±á«ááºážáá»á¬ážá
áœá¬ááŸáá·áº áááºááá¯ááºááá·áº áááºááŸáºáá±áá¬ááᯠáááºáááºááẠáááá¯á¡ááºáá«á áá¯áááá¡áá±ááŸáá·áºá á¡áá±ážá
á¬ážááœá²á·á
ááºážáá¯á¶áá°áá
áºá¡ááá·áºááœááºá áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááŸáá·áº á¡ááŒá¬ážá¡áá¬áá»á¬ážááŒá¬ážááœáẠááŸá®ááá¯ááŸá¯ááᯠááá¯áá
áá¯áẠááá¯ááºážááŒá¬ážá
áááºááŒá¬áááºá á¥ááá¬áá±ážáááẠfunction áá±á«á·á foo
function ááá¯áá±á«áºáááºá bar
ááŒá®ážáá±á¬á· ááŸá®ááá¯ááŸá¯áá
áºáá¯ááŸááááºá foo
ÐŸÑ bar
. ááá¯ááºáá
áºáá¯ááŒá±á¬ááºážáá±á¬á¡áá«á daemon ááẠáŠážá
áœá¬ áá®ážááŒá¬ážááœá²áá¬ážááŒááºážááŒáá·áº ááŒá±á¬ááºážáá²áá¬ážáá±á¬ááá¯ááºááá¯áᬠáá¯ááºáá±á¬ááºáááºá ááá¯á·áá±á¬áẠáááºážááẠááŒá±á¬ááºážáá²áá¬ážáá±á¬ áá¯ááºáá±á¬ááºáá»áẠáááºááŸááºáá»á¬ážáá²á·ááá¯á·áá±á¬ á¡ááá¯áá«ááá¯ááºá ááŒááºáááŒááºááá¯ááºáá±á¬ á¡ááŒá±á¬ááºážá¡áá²áá»á¬ážááᯠááŒáá·áºááŸá¯áááºá daemon ááẠáááºááœááºážááŸá¯áá»á¬ážááŸáá·áºáááºáááºáá±á¬ á¡áá±ážá
áááºá¡áá»ááºá¡áááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á ááŒá¯ááŒááºáá¬ážáá±á¬áá¯ááºáá±á¬ááºáá»ááºááᯠá¡ááŸááºááááºá¡áá¯á¶ážááŒá¯ááá·áº á¡ááá¯áá«áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááŸá
áºáá
á
áºáá±ážáááºáᬠá¡áá¯á¶ážááŒá¯áááºá áá¯á¶ááŸááºá¡á¬ážááŒáá·áºá á€áá»ááºážáááºááŸá¯ááŒáá·áº áááºááẠá¡ááœááºáááºážáá«ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá
á
áºáá±ážááẠááá¯á¡ááºáááºá
áá°áááºáž mypy á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááẠáá áºááŒáááºáá»áŸáẠááá¯ááºáá áºáá¯áá¯ááºáá±á¬ááºááŒááºážá¡áá±á«áº á¡áá±ážá¡áááºáá¬ážáá±á¬ááŒá±á¬áá·áº á€á¡áá¬á¡á¬ážáá¯á¶ážááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáááœááºáá°áá«á áá¯ááºááœáẠáá áºá á¯á¶áá áºáᬠááŒá±á¬ááºážáá²ááœá¬ážááá·áº ááá á¹á áá»á¬ážááœáẠáááºáá«ááá²áá² á á áºáá±ážááŸá¯áá»á¬áž ááá¯á¡ááºááá·áº áááºááááááºáá»ááºáž á¡ááŒá±á¡áá±áá»á¬ážá áœá¬ááᯠáá»áœááºá¯ááºááá¯á· ááá¯ááºááœááºááŒá±ááŸááºážáá²á·ááááºá á¥ááá¬á¡á¬ážááŒáá·áºá class áá áºáá¯ááᯠbase class á¡áá áºáá áºáᯠáááºááŸááºáá±ážáá±á¬á¡áá« áááºážááẠááŒá áºáá±á«áºáá¬áááºá áá»áœááºá¯ááºááá¯á· á¡ááá¯ááŸááááºááᯠáá¯ááºáá±á¬ááºááŒá®ážáááºááŸáá·áºá áá»áœááºá¯ááºááá¯á·ááẠááá¯ážááŒáŸáá·áºá á áºáá±ážááŸá¯á¡áá»á¬ážá á¯á áá¯ááºáá±á¬ááºáá»áááºááᯠá áá¹ááá·áºá¡áááºážáááºáᬠáá»áŸá±á¬á·áá»ááá¯ááºáá²á·áááºá áá«áᬠáá»áœááºáá±á¬áºááá¯á·á¡ááœáẠááŒá®ážáá¬ážáá²á· á¡á±á¬ááºááœá²áá áºáá¯ááá¯áá«áá²á
ááá¯ááá¯á·áá±á¬áẠáá¯ááºáá¯ááºá áœááºážá¡á¬áž !
á¡áááºááœáẠááœá±ážááœá±ážáá²á·áá±á¬ á¡áá±ážááááºáž áááºááŸá¬ááŒááºážááŸáá·áºá¡áá°á mypy daemon ááẠáááá¯ááááºáá¬áá áºáŠáž áááŒá¬áá á¡áá»áá¯ážá¡á á¬ážá á áºáá±ážááŒááºážááᯠáá¯ááºáá±á¬ááºááŒá®áž ááá¯ááºá¡áááºážá¡áá»á¬ážááá¯á· ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááá·áºá¡áá« ááŒá áºáá±á«áºáá¬ááá·áº ááŒá¿áá¬áá»á¬ážááᯠáá¯á¶ážáá¯á¶ážáá®ážáá«áž ááŒá±ááŸááºážáá±ážáá²á·áááºá ááá¯á·áá±á¬áºá á¡ááœáá·áºáá¬áá±á¬á¡áá¯á¶ážááŒá¯ááŸá¯á¡áááºážáá¯á¶ážááá á¹á ááœáẠá áá áºá áœááºážáá±á¬ááºáááºááẠá¡áá±á¬ááºážáá¯á¶ážááŸáá·áº á¡ááŸááºážáá±ážáá±áá±ážáááºá mypy á ááá·áºááŸááºážáá±á¬ á áááºááŸá¯áá áºáá¯ááẠ15 áááá áºáá»á±á¬áº ááŒá¬ááá¯ááºáááºá ááŒá®ážáá±á¬á· áá«á áá»áœááºáá±á¬áºááá¯á· áá»á±áááºáá²á·áá¬ááẠá¡áá»á¬ážááŒá®áž ááá¯áá«áááºá áááá¯ááááºáá¬áá»á¬ážááẠáá¯ááºá¡áá áºáá»á¬ážááᯠáááºáááºáá±ážáá¬ážááŒá®áž ááŸáááŒá®ážáá¬ážáá¯ááºááœáẠááŸááºáá»ááºáá»á¬ážááᯠááá·áºááŒááºážááŒáá·áº á¡áááºááá¯ááºáž á¡ááŒá±á¡áá± ááá¯ááá¯ážáá¬áááºá áá»áœááºá¯ááºááá¯á·áá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááẠá áœááºážáá±á¬ááºáááºááá¯ááá¯áááŸáááẠáá¬áá±á¬ááºáá±áá±ážáá±á¬áºáááºáž áááºážáá áºáááºááœáẠáááºážááá¯á·ááŸáá·áºááœá±á·áá¯á¶áááá·áºá¡ááœáẠáááºážáá¬áá«áááºá
mypy ááŸáá·áº áááºáááºá á¡á á±á¬ááá¯ááºáž á áááºáá°ážáá»á¬ážáá²á០áá áºáá¯ááᯠááŒááºááœá¬ážááẠáá¯á¶ážááŒááºáá²á·áááºá ááŒá±á¬áááẠPython áá¯ááºááᯠC áá¯ááºá¡ááŒá áºááŒá±á¬ááºážááá¯á·á Cython ááá¯á ááºážáááºááŒááºáž (ááẠPython ááœááºáá±ážáá¬ážáá±á¬áá¯ááºááᯠC áá¯ááºááá¯á·áá¬áá¬ááŒááºáááºááœáá·áºááŒá¯ááá·áºá áá áº) áááºáá»áœááºá¯ááºááá¯á·á¡á¬ážááŒááºáá¬áá±á¬ááŒááºááŸá¯ááºážááá¯ááá±ážáá±á¬ááŒá±á¬áá·áºáá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠcompiler áá±ážáááºá áááºáá°ážááá¯ááŒááºáááºá¡áááºááœááºážáááºáá¯á¶ážááŒááºáá²á·áááºá mypy codebase (Python ááœááºáá±ážáá¬ážáá±á¬) ááœáẠááá¯á¡ááºáá±á¬ ááŸááºáá»ááºá¡áá»áá¯ážá¡á á¬ážá¡á¬ážáá¯á¶ážáá«ááŸáááŒá®ážááŒá áºáá±á¬ááŒá±á¬áá·áºá á áá áºá¡ááŸáááºááŒáŸáá·áºááẠá€ááŸááºáá»ááºáá»á¬ážááá¯á¡áá¯á¶ážááŒá¯ááẠááŒáá¯ážá á¬ážááŒááºážááẠá¡áá»áá¯ážááŸááááºáᯠáá»áœááºá¯ááºááá¯á·áááºááŒááºáá«áááºá á€á¡ááŒá¶á¥á¬ááºááᯠá ááºážáááºááẠááŸá±á·ááŒá±ážáá¯á¶á á¶ááᯠá¡ááŒááºáááºáá®ážáá²á·áááºá áááºážááẠááá¯ááºáááá¯á á¶ááŸá¯ááºážá¡áá»áá¯ážáá»áá¯ážááœáẠá áœááºážáá±á¬ááºááẠáá ááá»á±á¬áº ááá¯ážáá¬ááŸá¯ááᯠááŒááá²á·áááºá áá»áœááºá¯ááºááá¯á·áá áááºáá°ážááŸá¬ Cython ááá¯á¡áá¯á¶ážááŒá¯á Python modules áá»á¬ážááᯠC module áá»á¬ážááá¯á·á á¯á ááºážáááºááŸáá·áº á¡áá»áá¯ážá¡á á¬ážááŸááºáá»ááºáá»á¬ážááᯠrun-time type checks á¡ááŒá áºááŒá±á¬ááºážáá²ááẠ(áá»á¬ážáá±á¬á¡á¬ážááŒáá·áº type annotations áá»á¬ážááᯠrun-time ááœááºáá»á áºáá»á°ááŸá¯áá¬ážááŒá®áž type checking systems ááŸáá¬á¡áá¯á¶ážááŒá¯áááº)á áá»áœááºá¯ááºááá¯á·ááẠPython á០mypy á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠááááºážáá±á á¬ááá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážááá·áº áá¬áá¬á áá¬ážáá áºáá¯ááá¯á· áá¬áá¬ááŒááºááẠá¡ááŸááºááááºá á®á ááºáá¬ážááŒá®ážá Python áá²á·ááá¯á· (á¡áá»á¬ážá á¯ááŸá¬á á¡áá¯ááºááŒá áºáááº)á (á€áá¬áá¬á áá¬áž ááœáŸá±á·ááŒá±á¬ááºážááŒááºážáá»áá¯ážááẠmypy ááá±á¬áá»ááºá á¡á ááºá¡áá¬áá áºáᯠááŒá áºáá¬áá²á·áááºá áá°áááºáž mypy á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠAlore ááŒáá·áº áá±ážáá¬ážáá²á·ááŒá®ážá ááá¯á·áá±á¬ááºááœáẠJava ááŸáá·áº Python ááá¯á·á áá±á«ááºážá ááºáá±á«ááºážá ááºááŸá¯áá áºáᯠááŸááá²á·áááº)á
CPython ááá¯ážáá»á²á·ááŸá¯ API ááᯠá¡á¬áá¯á¶á áá¯ááºááŒááºážááẠááá±á¬áá»ááºá á®áá¶ááá·áºááœá²ááŸá¯á áœááºážáááºáá»á¬áž ááá¯á¶ážááŸá¯á¶ážá á±ááẠáá±á¬á·áá»ááºááŒá áºáááºá áá»áœááºá¯ááºááá¯á·ááẠmypy ááá¯á¡ááºáá±á¬ virtual machine ááá¯á·ááá¯áẠáááºááá·áºá á¬ááŒáá·áºááá¯ááºááá¯áááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáááá¯á¡ááºáá«á ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠPython áá±áá áá áºáá áºáá¯áá¯á¶ážááŸáá·áº áááááá¬áá»á¬áž (á¥ááᬠpytest áá²á·ááá¯á·áá±á¬) ááᯠá¡áá¯á¶ážááŒá¯ááœáá·áºááŸááá±ážáááºá ááá¯ááá¯áááºááŸá¬ ááœá¶á·ááŒáá¯ážááá¯ážáááºááŸá¯áá¬áá¡ááœááºáž á¡áááá¹áá¬ááºááœáá·áºááá¯áá¬ážáá±á¬ Python áá¯ááºááᯠáá»áœááºá¯ááºááá¯á· áááºáááºá¡áá¯á¶ážááŒá¯ááá¯ááºáááºááŒá áºááŒá®ážá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáá»á¬ážááᯠááŒá¯á á¯áááºá á±á¬áá·áºááá¯ááºážáááá·áºá¡á á¬áž áááºážááᯠáá¯ááºá¡ááŒá±á¬ááºážá¡áá²ááŒá¯áá¯ááºááŒááºážááŸáá·áº á ááºážáááºááŒááºážá á¡ááœááºáá»ááºááŒááºáá±á¬áá¯á¶á á¶ááŒáá·áº áááºáááºáá¯ááºáá±á¬ááºááá¯ááºá á±áááºááŒá áºáááºá áá¯áá¬ážááá¯ááºááŸá áºáá¯á¶ážáá±á«áºááá¯ááºááŒá®áž á áá¬ážááŒá±á¬ááᬠáá±á¬ááºážáá²á·á¡áá¯ááºááᯠáá¯ááºáá±áááá¯áá²á áá«ááá¯á·á ááá±á¬áá»áááºá
mypyc áá¯áá±á«áºáá±á¬ compiler (áááºážááẠmypy ááᯠá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠááœá²ááŒááºážá áááºááŒá¬áááºá¡ááœáẠááŸá±á·áá¯á¶ážááœáẠá¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ááŒá±á¬áá·áº) á¡ááœááºá¡á±á¬ááºááŒááºáá±á¬ ááá±á¬áá»ááºáá áºáᯠááŒá áºáá¬áá²á·áááºá áá±áá¯áá»á¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠáááºááŸáºááá«áá² áááŒá¬áá mypy áááºáááºááŸá¯á¡ááœáẠááá·áºááŸááºážááŒá± 4 á á¡ááŸáááºááŒáŸáá·áºááá¯ááºáá²á·áááºá mypyc ááá±á¬áá»ááºá á¡áááá¡áá»ááºááᯠáá±á¬áºáá±á¬ááºáá¬ááœáẠMichael Sullivaná Ivan Levkivskyá Hugh Hahn ááŸáá·áº áá»áœááºá¯ááºááẠááŒáá¹ááááẠá áááá·áºááŸááá±á¬ á¡ááœá²á·áááºáá áºááœá²á·ááᯠáá°áá±á¬ááºáá²á·áááºá á€á¡áá¯ááºááá¬áááẠmypy ááá¯ááŒááºáááºáá±ážáá¬ážááẠááá¯á¡ááºááá·áºá¡áá¬ááẠáá»á¬ážá áœá¬áá±ážáááºááẠá¥ááá¬á C++ ááá¯á·ááá¯áẠGo ááœááºááŒá áºáááºá ááŒá®ážáá±á¬á· ááá±á¬áá»ááºááᯠáááŒá¬ážáá¬áá¬á áá¬ážáá²á· ááŒááºáá±ážáá²á·á¡áá« áá¯ááºáááá·áºá¡áá¬ááẠááá±á¬áá»ááºááᯠá¡ááŒá±á¬ááºážá¡áá²ááœá± á¡áá»á¬ážááŒá®ážáá¯ááºááááºá á¡ááŒá¬áž Dropbox áááá¯ááááºáá¬áá»á¬ážááẠáááºážááá¯á·ááá¯ááºááᯠá á¯á ááºážááŒá®áž á¡ááŸáááºááŒáŸáá·áºááẠáááºážááᯠá¡áá¯á¶ážááŒá¯ááá¯ááºááá·áº mypyc á¡ááá·áºááá¯á· áá±á¬ááºááŒááºážáá±ážááá¯ááºáááºáá¯áááºáž áá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
á€á¡ááá·áºááá¯áááŸáááẠáá»áœááºá¯ááºááá¯á·ááẠá áááºáááºá á¬ážá áá¬áá±á¬ááºážáá±á¬ á¡ááºáá»ááºáá®áá¬ááá¯ááºáᬠááŒá±ááŸááºážáá»ááºá¡áá»áá¯á·ááᯠá¡áá¯á¶ážááŒá¯áá²á·ááá«áááºá ááá¯á·ááŒá±á¬áá·áºá compiler ááẠááŒááºáááºááŒá®áž á¡ááá·áºáááá·áº C áááºáá±á¬ááºááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááᯠá¡ááŸáááºááŒáŸáá·áºáá±ážááá¯ááºáááºá á¥ááá¬á¡á¬ážááŒáá·áº compiled function call ááᯠC function call ááá¯á· áá¬áá¬ááŒááºááá¯áááºá ááá¯ááá¯á·áá±á¬áá±á«áºááá¯ááŸá¯ááẠá¡áááá¹áá¬ááºááœáá·áºááá¯áá¬ážáá±á¬ áá¯ááºáá±á¬ááºáá»ááºááá¯áá±á«áºááá¯ááŒááºážááẠáá»á¬ážá áœá¬ááŒááºáááºáá«áááºá á¡áááá¬ááºááŸá¬ááœá±ááŒááºážáá²á·ááá¯á·áá±á¬ á¡áá»áá¯á·áá±á¬áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááẠCPython á០áá¯á¶ááŸáẠC-API áá±á«áºááá¯ááŸá¯áá»á¬ážááᯠá¡áá¯á¶ážááŒá¯áá±áá²ááŒá áºááŒá®ážá á á¯á ááºážááá·áºá¡áá« á¡áááºážáááºááá¯ááŒááºáá«áááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áááá¹áá«ááºááœáá·áºááá¯áá»ááºááŒáá·áº áááºáá®ážáá¬ážáá±á¬ á áá áºá¡áá±á«áº áááºáá±á¬ááºážáááºááá¯ááᯠáááºááŸá¬ážááá¯ááºáá²á·áá±á¬áºáááºáž á€ááá á¹á ááœáẠá áœááºážáá±á¬ááºáááºá¡á á¡áááºážáááºáá»áŸáᬠáááŸááá²á·áááºá
á¡áá¯á¶ážá¡áá»á¬ážáá¯á¶áž "ááŸá±ážááœá±ážáá±á¬" áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠááœá²ááŒá¬ážáááºááŸááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºáááá¯ááá¯ááºááᯠáá¯ááºáá±á¬ááºáá²á·áá«áááºá á€áá±áá¬ááŒáá·áº áááºáááºááá¯ááºáá±á¬ááºáá¬ážáá±á¬ mypyc ááᯠá¡ááŸáááºááŒáŸáá·áºááẠááŒáá¯ážáááºážáá²á·áááºá ááá¯á·ááŸáᬠáááºážááẠáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá¡ááœáẠC áá¯ááºááᯠááá¯ááá¯ááŒááºáááºá áœá¬ áá¯ááºáá¯ááºááá¯ááºá á±áááºá ááá¯á·ááá¯áẠááá¯ááá¯ááŒááºáááºáá±á¬ áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯á áááºááá¯ááºáᬠPython áá¯ááºááᯠááŒááºáááºáá±ážáá« (ááá«ááá¶ááœáẠááá¯ááá¯á·ááá¯áẠá¡ááŒá¬ážááŒá¿áá¬á¡ááœáẠááá¯ážááŸááºážáá¯á¶áá±á¬ááºáá±á¬ á¡ááŒá±áááŸááá«) . Python áá¯ááºááᯠááŒááºáááºáá±ážáá¬ážááŒááºážááẠcompiler ááẠáá°áá®áá±á¬á¡ááœááºááŒá±á¬ááºážááŸá¯ááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááŒááºážááẠááŒá¿áá¬á¡ááœáẠááá¯ááá¯ááœááºáá°áá±á¬ á¡ááŒá±áá áºáá¯ááŒá áºáááºá áá±ááŸááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá€ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážá áœá¬ááᯠá¡ááá¯á¡áá»á±á¬ááºáá¯ááºáá±á¬ááºááá¯áá±á¬áºáááºáž ááá¯á¡áá»áááºááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡áááºážáááºáá»áŸáá±á¬á¡á¬ážá áá¯ááºáá¯ááºááŸá¯ááŒáá·áº mypy ááá¯á¡ááŸáááºááŒáŸáá·áºááẠá¡á¬áá¯á¶á áá¯ááºáá²á·áá«áááºá ááŒá®ážáá±á¬á· áá®áááºážááá¯ááºááᯠáá»áŸá±á¬ááºááŸááºážáá¬ááŸá¬ áá±á¬áá·áºáá±á«ááºážáá»á¬ážá áœá¬ ááŒááºáá²á·ááŒáááºá
áááºáááºâŠ
áá»á áºáááºááá«áá±á¬á á¬áááºáá°áá»á¬áž! mypy ááá±á¬áá»ááºá áááºááŸáááŸá¯ááᯠáááºááááŸááá±á¬á¡áá« áááºáááºááá¯á·áááºááŒááºáá°ááá²á·ááááºážá
source: www.habr.com