αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžš 4 αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠ Python αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1

αžαŸ’αž„αŸƒαž“αŸαŸ‡ αž™αžΎαž„αžŸαžΌαž˜αž“αžΆαŸ†αž˜αž€αž‡αžΌαž“αž›αŸ„αž€αž’αŸ’αž“αž€αž“αžΌαžœαž•αŸ’αž“αŸ‚αž€αžŠαŸ†αž”αžΌαž„αž“αŸƒαž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž› Dropbox αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž”αŸ’αžšαž—αŸαž‘αž€αžΌαžŠ Python αŸ”

αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžš 4 αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠ Python αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1

Dropbox αžŸαžšαžŸαŸαžšαž…αŸ’αžšαžΎαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Python αŸ” αžœαžΆβ€‹αž‡αžΆβ€‹αž—αžΆαžŸαžΆβ€‹αž˜αž½αž™β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž”αŸ’αžšαžΎβ€‹αž™αŸ‰αžΆαž„β€‹αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™ αž‘αžΆαŸ†αž„β€‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹β€‹αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜β€‹αž•αŸ’αž“αŸ‚αž€β€‹αžαžΆαž„αž€αŸ’αžšαŸ„αž™ αž“αž·αž„β€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αž™αžΎαž„αž€αŸαž”αŸ’αžšαžΎ Go, TypeScript αž“αž·αž„ Rust αž…αŸ’αžšαžΎαž“αžŠαŸ‚αžš αž”αŸ‰αž»αž“αŸ’αžαŸ‚ Python αž‚αžΊαž‡αžΆαž—αžΆαžŸαžΆαž…αž˜αŸ’αž”αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ” αžŠαŸ„αž™αž–αž·αž…αžΆαžšαžŽαžΆαž›αžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž€αžΌαžŠ Python αžšαžΆαž”αŸ‹αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹ αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž€αžΆαžšαžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αžαžΆαž˜αžœαž“αŸ’αžαž“αŸƒαž€αžΌαžŠαž”αŸ‚αž”αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αžŠαž›αŸ‹αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αžšαž”αžŸαŸ‹αžœαžΆ αž αžΎαž™αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž”αŸ‰αŸ‡αž–αžΆαž›αŸ‹αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αžŠαž›αŸ‹αž•αž›αž·αžαž—αžΆαž–αž€αžΆαžšαž„αžΆαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‡αžΆαž”αžŽαŸ’αžαžΎαžšαŸ—αž“αžΌαžœαž€αžΌαžŠαžšαž”αžŸαŸ‹αž™αžΎαž„αž‘αŸ…αž‡αžΆαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž‹αž·αžαž·αžœαž“αŸ’αžαžŠαŸ„αž™αž”αŸ’αžšαžΎ mypy αŸ” αž“αŸαŸ‡αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Python αŸ” Mypy αž‚αžΊαž‡αžΆαž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžŸαŸ†αžαžΆαž“αŸ‹αžšαž”αžŸαŸ‹αžœαžΆαž’αŸ’αžœαžΎαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Dropbox αŸ”

Dropbox αž‚αžΊαž‡αžΆαž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžŠαŸ†αž”αžΌαž„αž‚αŸαžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž‹αž·αžαž·αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ Python αž“αŸ…αž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž“αŸαŸ‡αŸ” Mypy αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αžšαžΆαž”αŸ‹αž–αžΆαž“αŸ‹αž“αžΆαž–αŸαž›αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αŸαŸ‡αŸ” αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡αžšαžΆαž”αŸ‹αž˜αž·αž“αž’αžŸαŸ‹αžŠαžΌαž…αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž“αž·αž™αžΆαž™αžαžΆ "αž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαž™αž»αž‘αŸ’αž’" αŸ” αž™αžΎαž„β€‹αž”αžΆαž“β€‹αž˜αž€β€‹αž™αŸ‰αžΆαž„β€‹αž†αŸ’αž„αžΆαž™β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž‘αŸ…β€‹αžŠαž›αŸ‹β€‹αž€αž“αŸ’αž›αŸ‚αž„β€‹αžŠαŸ‚αž›β€‹αž™αžΎαž„β€‹αž“αŸ…β€‹αž–αŸαž›β€‹αž“αŸαŸ‡αŸ” αž“αŸ…αžαžΆαž˜αž•αŸ’αž›αžΌαžœ αž˜αžΆαž“αž€αž·αž…αŸ’αž…αž€αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž˜αž·αž“αž‡αŸ„αž‚αž‡αŸαž™ αž“αž·αž„αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž”αžšαžΆαž‡αŸαž™αŸ” αž”αŸ’αžšαž€αžΆαžŸαž“αŸαŸ‡αž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž‹αž·αžαž·αžœαž“αŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„ Python αž–αžΈαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸαž‚αž½αžšαž±αŸ’αž™αž—αŸ’αž‰αžΆαž€αŸ‹αž•αŸ’αž’αžΎαž›αžšαž”αžŸαŸ‹αžœαžΆ αžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αžšαž αžΌαžαž˜αž€αžŠαž›αŸ‹αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘ αž“αž·αž„αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αŸ’αžšαž—αŸαž‘αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαžšαžΆαž”αŸ‹αž˜αž·αž“αž’αžŸαŸ‹αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Python αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αž“αŸ’αžαž€αžΆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™αž§αž”αž€αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΌαž…αž‡αžΆ IDEs αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž€αžΌαžŠαŸ”

β†’ αžŸαžΌαž˜αž’αžΆαž“αž•αŸ’αž“αŸ‚αž€αž‘αžΈ ្

αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž…αžΆαŸ†αž”αžΆαž…αŸ‹?

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αž”αŸ’αžšαžΎ Python αžœαžΆαž™αž’αž€αŸ’αžŸαžšαžαžΆαž˜αžœαž“αŸ’αž αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αžΆαž“αž€αžΆαžšαž—αŸαž“αŸ’αžαž…αŸ’αžšαž‘αŸ†αžαŸ’αž›αŸ‡αžαžΆαž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž˜αžΆαž“αž€αžΆαžšαž…αŸ’αžšαž”αžΌαž€αž…αŸ’αžšαž”αž›αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αž‡αž»αŸ†αžœαž·αž‰αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαžŠαŸ„αž™αž‹αž·αžαž·αžœαž“αŸ’αž αž“αž·αž„ mypy αž“αžΆαž–αŸαž›αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡αŸ” αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž’αŸ’αž“αž€αž…αžΌαž›αž…αž·αžαŸ’αž Python αž™αŸ‰αžΆαž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαžαžΆαž˜αžœαž“αŸ’αž αž αžΎαž™αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αž€αžΎαžαž‘αžΎαž„αž’αŸ’αžœαžΎαž±αŸ’αž™αž’αŸ’αž“αž€αžαž€αž…αž·αžαŸ’αžαŸ” αž‚αž“αŸ’αž›αžΉαŸ‡αž“αŸƒαžαž˜αŸ’αž›αŸƒαž“αŸƒαž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‹αž·αžαž·αžœαž“αŸ’αžαž‚αžΊαž‘αŸ†αž αŸ†αž“αŸƒαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αŸ– αž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αžΆαž“αŸ‹αžαŸ‚αž’αŸ† αž’αŸ’αž“αž€αž€αžΆαž“αŸ‹αžαŸ‚αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‹αž·αžαž·αžœαž“αŸ’αž αž αžΎαž™αž“αŸ…αž‘αžΈαž”αž‰αŸ’αž…αž”αŸ‹ αž’αŸ’αž“αž€αž€αžΆαž“αŸ‹αžαŸ‚αžαŸ’αžšαžΌαžœαž€αžΆαžšαžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αŸ”

αž§αž”αž˜αžΆαžαžΆαž‚αž˜αŸ’αžšαŸ„αž„αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αž”αžΆαž“αžˆαžΆαž“αžŠαž›αŸ‹αž‘αŸ†αž αŸ†αžšαžΆαž”αŸ‹αž˜αŸ‰αžΊαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹ αž αžΎαž™αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαžœαžΆαŸ” αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž‚αž˜αŸ’αžšαŸ„αž„αžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž’αžΆαž…αž“αž·αž™αžΆαž™αž”αžΆαž“αžαžΆαž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž€αžΌαžŠαžšαž”αžŸαŸ‹αžœαžΆαž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž‚αž“αŸ’αž›αžΉαŸ‡αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž•αž›αž·αžαž—αžΆαž–αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αž”αžΎαž‚αŸ’αž˜αžΆαž“αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αž‘αŸ αžœαžΆαž’αžΆαž…αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹ αž§αž‘αžΆαž αžšαžŽαŸ αžαžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž€αžΆαž“αŸ‹αž’αž“αž»αž‚αž˜αž“αŸ αž¬αž”αŸ’αžšαž—αŸαž‘αž˜αž»αžαž„αžΆαžšαžŽαžΆαžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž”αžΆαž“αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸ†αžŽαž½αžšαž’αž˜αŸ’αž˜αžαžΆαžŠαŸ‚αž›αž‡αžΆαžšαžΏαž™αŸ—αž–αž·αž”αžΆαž€αž†αŸ’αž›αžΎαž™αžŠαŸ„αž™αž˜αž·αž“αž”αŸ’αžšαžΎαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αŸ–

  • αžαžΎαž˜αž»αžαž„αžΆαžšαž“αŸαŸ‡αž’αžΆαž…αžαŸ’αžšαž›αž”αŸ‹αž˜αž€αžœαž·αž‰αž”αžΆαž“αž‘αŸαŸ” None?
  • αžαžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž“αŸαŸ‡αž‚αž½αžšαž‡αžΆαž’αŸ’αžœαžΈ? items?
  • αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆ id: int តើវអ strαž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžαŸ’αž›αŸ‡?
  • αžαžΎαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αž‡αžΆαž”αž‰αŸ’αž‡αžΈαž‘αŸ? αžαžΎαžœαžΆαž’αžΆαž…αž‘αŸ…αžšαž½αž…αž‘αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹ tuple αž‘αŸ…αžœαžΆ?

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž’αžαŸ’αžαž”αž‘αž€αžΌαžŠαžŠαŸ‚αž›αž”αžΆαž“αžšαŸ€αž”αžšαžΆαž”αŸ‹αž–αžΈαž”αŸ’αžšαž—αŸαž‘αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αž αžΎαž™αž–αŸ’αž™αžΆαž™αžΆαž˜αž†αŸ’αž›αžΎαž™αžŸαŸ†αžŽαž½αžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžœαžΆαž”αŸ’αžšαŸ‚αžαžΆαž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ–

class Resource:
    id: bytes
    ...
    def read_metadata(self, 
                      items: Sequence[str]) -> Dict[str, MetadataItem]:
        ...

  • read_metadata αž˜αž·αž“αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰ Noneαž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž”αŸ’αžšαž—αŸαž‘αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰αž‚αžΊαž˜αž·αž“αž˜αŸ‚αž“ Optional[…].
  • αž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹ items αž‚αžΊαž‡αžΆαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ” αžœαžΆαž˜αž·αž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž‘αŸαŸ”
  • αž‚αž»αžŽαž›αž€αŸ’αžαžŽαŸˆ id αž‚αžΊαž‡αžΆαžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžšαž“αŸƒαž”αŸƒαŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž—αž–αžŠαŸαž›αŸ’αž’αž˜αž½αž™ αž˜αž“αž»αžŸαŸ’αžŸαž˜αŸ’αž“αžΆαž€αŸ‹αžšαŸ†αž–αžΉαž„αžαžΆ subtleties αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ (docstring)αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž“αŸƒαž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαž„αŸ’αž€αŸαžαžƒαžΎαž‰αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž―αž€αžŸαžΆαžšαž”αŸ‚αž”αž“αŸαŸ‡αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠαž€αŸαžŠαŸ„αž™ αž€αŸαž‚αŸαž˜αž·αž“αž’αžΆαž…αž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αž›αžΎαž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αžšαž”αžŸαŸ‹αžœαžΆαž”αžΆαž“αž‘αŸαŸ” αž―αž€αžŸαžΆαžšαž“αŸαŸ‡αž’αžΆαž…αž˜αžΆαž“αž—αžΆαž–αž˜αž·αž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœ αž“αž·αž„αž”αžΎαž€αž…αŸ†αž αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαž™αž›αŸ‹αž…αŸ’αžšαž‘αŸ†αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αŸ’αžšαž»αž˜αž’αŸ† αž¬αž‚αž˜αŸ’αžšαŸ„αž„αž’αŸ† αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡αž’αžΆαž…αž€αŸ’αž›αžΆαž™αž‘αŸ…αž‡αžΆαž’αŸ’αž„αž“αŸ‹αž’αŸ’αž„αžšαž”αŸ†αž•αž»αžαŸ”

αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž› Python αž–αžΌαž€αŸ‚αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„ αž¬αž˜αž’αŸ’αž™αž˜αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„ αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡ αž‚αž˜αŸ’αžšαŸ„αž„αž‡αŸ„αž‚αž‡αŸαž™ αž“αž·αž„αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžŠαŸ‚αž›αž”αŸ’αžšαžΎ Python αž’αžΆαž…αž“αžΉαž„αž”αŸ’αžšαžˆαž˜αž˜αž»αžαž“αžΉαž„αžŸαŸ†αžŽαž½αžšαžŸαŸ†αžαžΆαž“αŸ‹αŸ– "αžαžΎαž™αžΎαž„αž‚αž½αžšαžŸαžšαžŸαŸαžšαž’αŸ’αžœαžΈαŸ—αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αžΎαž„αžœαž·αž‰αž‡αžΆαž—αžΆαžŸαžΆαžœαžΆαž™αž’αž€αŸ’αžŸαžšαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž‘αŸ?"αŸ”

αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‡αžΆ mypy αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαžαžΆαž„αž›αžΎαžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αžΌαžœαž—αžΆαžŸαžΆαž•αŸ’αž›αžΌαžœαž€αžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž”αŸ’αžšαž—αŸαž‘ αž αžΎαž™αžŠαŸ„αž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αžΆαžšαž”αŸ’αžšαž€αžΆαžŸαž”αŸ’αžšαž—αŸαž‘αž“αŸ„αŸ‡αžαŸ’αžšαžΌαžœαž“αžΉαž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž αžΎαž™αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαžŠαŸ„αž™αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž’αžαŸ’αžαž·αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆ)αŸ” αž‡αžΆαž‘αžΌαž‘αŸ… αž™αžΎαž„αž’αžΆαž…αž“αž·αž™αžΆαž™αž”αžΆαž“αžαžΆαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‘αžΆαŸ†αž„αž“αŸαŸ‡αžŠαžΆαž€αŸ‹αž“αŸ…αž€αžΆαžšαž…αŸ„αž›αžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαžΌαž…αž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαž“αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ‚αž”αž“αŸαŸ‡αž˜αžΆαž“αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž αžΎαž™αž–αž½αž€αžœαžΆαž‚αžΊαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„αž‘αŸαŸ–

  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž’αžΆαž…αžšαž€αžƒαžΎαž‰αž€αŸ†αž αž»αžŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αžαžΌαž… (αž“αž·αž„αž˜αž·αž“αžαžΌαž…)αŸ” αž§αž‘αžΆαž αžšαžŽαŸαž’αž˜αŸ’αž˜αžαžΆαž‚αžΊαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž—αŸ’αž›αŸαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαž˜αŸ’αž›αŸƒ None αž¬αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž–αž·αžŸαŸαžŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”
  • αž€αžΆαžšαž€αŸ‚αž€αžΌαžŠαž‘αžΎαž„αžœαž·αž‰αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αžšαž½αž›αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž˜αžΆαž“αž—αžΆαž–αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžαŸ’αž›αžΆαŸ†αž„αž’αŸ†αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž›αŸαžαž€αžΌαžŠαžαŸ’αžšαžΌαžœαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž„αŸ’αžƒαžΉαž˜αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž‚αŸ’αžšαž”αžŠαžŽαŸ’αžαž”αŸ‹αž€αžΌαžŠ 100% αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αž αžŠαŸ‚αž›αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŽαžΆαž€αŸαžŠαŸ„αž™ αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž˜αž·αž“αž’αžΆαž…αž‘αŸ…αžšαž½αž…αž“αŸ„αŸ‡αž‘αŸαŸ” αž™αžΎαž„αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž–αžΈαž‡αž˜αŸ’αžšαŸ…αž“αŸƒαžŠαžΆαž“αž‡αž„αŸ‹ αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αžšαž€αž˜αžΌαž›αž αŸαžαž»αž“αŸƒαž”αž‰αŸ’αž αžΆαž“αŸ„αŸ‡αž‘αŸαŸ”
  • αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αŸ…αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž’αŸ†αž€αŸαžŠαŸ„αž™ αž‡αžΆαžšαžΏαž™αŸ— mypy αž’αžΆαž…αž’αŸ’αžœαžΎαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž–αŸαž‰αž›αŸαž‰αž€αŸ’αž“αž»αž„αžšαž™αŸˆαž–αŸαž›αž˜αž½αž™αžœαž·αž“αžΆαž‘αžΈαŸ” αž αžΎαž™αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαž…αŸ†αžŽαžΆαž™αž–αŸαž›αžšαžΆαž”αŸ‹αžŸαž·αž”αžœαž·αž“αžΆαž‘αžΈαž¬αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž“αžΆαž‘αžΈαŸ” αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αžΌαžœαž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αž—αŸ’αž›αžΆαž˜αŸ— αž“αž·αž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž‚αžΆαžαŸ‹αž’αŸ’αžœαžΎαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž‚αžΆαžαŸ‹αž”αžΆαž“αž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ” αž‚αžΆαžαŸ‹αž›αŸ‚αž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαžŸαžšαžŸαŸαžšαžŠαŸ‚αž›αž•αž»αž™αžŸαŸ’αžšαž½αž™ αž“αž·αž„αž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž€αŸ’αžŸαžΆαž€αžΆαžšαžŸαžΆαž€αž›αŸ’αž”αž„αž―αž€αžαžΆαžŠαŸ‚αž›αž‡αŸ†αž“αž½αžŸαž’αž„αŸ’αž‚αž—αžΆαž–αž–αž·αžαžŠαŸ„αž™αž€αžΆαžšαž…αŸ†αž’αž€ αž“αž·αž„αž”αŸ†αžŽαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž‘αž‘αž½αž›αž›αž‘αŸ’αž’αž•αž›αžαŸαžŸαŸ’αžαž€αžΌαžŠαž›αžΏαž“αž‡αžΆαž„αž˜αž»αž“αŸ”

IDEs αž“αž·αž„αž’αŸ’αž“αž€αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžŠαžΌαž…αž‡αžΆ PyCharm ឬ Visual Studio Code αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžαžΆαž˜αž–αž›αž“αŸƒαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘ αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž“αžΌαžœαž€αžΆαžšαž”αŸ†αž–αŸαž‰αž€αžΌαžŠ αž€αžΆαžšαž”αž“αŸ’αž›αž·αž…αž€αŸ†αž αž»αžŸ αž“αž·αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž”αŸ’αžšαžΎαž‡αžΆαž‘αžΌαž‘αŸ…αŸ” αž αžΎαž™αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‡αžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“ αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αžΆαž‚αž»αž™αž˜αŸ‰αž„αŸ‹αž…αž˜αŸ’αž”αž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž–αŸαž‰αž…αž·αžαŸ’αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžœαžΆαž™αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž—αŸ’αž›αžΆαž˜αŸ—αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαŸ” αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž˜αž·αž“αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαžΌαž…αž‡αžΆ mypy αž‘αŸ αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαžœαžΆαž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆ mypy αž‡αž½αž™αžšαž€αŸ’αžŸαžΆαž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αž±αŸ’αž™αžŸαŸ’αžšαž”αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΌαžŠαž€αŸαžŠαŸ„αž™αŸ”

αž•αŸ’αž‘αŸƒαžαžΆαž„αž€αŸ’αžšαŸ„αž™αž“αŸƒ mypy

αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒ mypy αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž€αŸ’αžšαž—αž–αž’αž„αŸ‹αž‚αŸ’αž›αŸαžŸ αž€αŸ’αž“αž»αž„αž‘αžΈαž€αŸ’αžšαž»αž„ Cambridge αž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αž†αŸ’αž“αžΆαŸ†αž˜αž»αž“αž–αŸαž›αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž‡αžΆαž˜αž½αž™ Dropbox αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž…αžΌαž›αžšαž½αž˜αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžαŸ’αž“αžΆαž€αŸ‹αž”αžŽαŸ’αžŒαž·αžαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αžšαž½αž”αž”αž„αŸ’αžšαž½αž˜αž“αŸƒαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž”αžΆαž“αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ αž“αž·αž„αžαžΆαž˜αžœαž“αŸ’αžαŸ” αžαŸ’αž‰αž»αŸ†β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ†αž•αž»αžŸαž‚αŸ†αž“αž·αžβ€‹αžŠαŸ„αž™β€‹αž’αžαŸ’αžαž”αž‘β€‹αžŸαŸ’αžαžΈβ€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αžœαžΆαž™β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αžŠαŸ„αž™β€‹αž›αŸ„αž€ Jeremy Siek αž“αž·αž„ Walid Taha αž“αž·αž„β€‹αžŠαŸ„αž™β€‹αž‚αž˜αŸ’αžšαŸ„αž„ Typed Racket αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αŸ’αž™αžΆαž™αžΆαž˜αžŸαŸ’αžœαŸ‚αž„αžšαž€αžœαž·αž’αžΈαž”αŸ’αžšαžΎαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αž•αŸ’αžŸαŸαž„αŸ— - αž–αžΈαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžαžΌαž…αŸ—αžšαž αžΌαžαžŠαž›αŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž€αžΌαžŠαžŠαŸ‚αž›αž˜αžΆαž“αžšαžΆαž”αŸ‹αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αŸ” αž€αŸ’αž“αž»αž„αž–αŸαž›αž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž’αžΆαž“αžΆαžαžΆ αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸƒαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αžŽαžΆαž˜αž½αž™ αžœαžΆαž“αžΉαž„αž˜αž·αž“αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαž”αžŸαž˜αŸ’αžšαž½αž›αž’αŸ†αž–αŸαž€αž“αŸ„αŸ‡αž‘αŸαŸ” αž•αŸ’αž“αŸ‚αž€αžŸαŸ†αžαžΆαž“αŸ‹αž˜αž½αž™αž“αŸƒαž€αžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αŸαŸ‡αž‚αžΊαž‚αŸ†αž“αž·αžαž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αž“αŸ’αžαž·αž…αž˜αŸ’αžαž„ αŸ— αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αž‚αŸ†αžšαžΌαžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž‡αžΆαž•αž›αž·αžαž•αž›αžŸαž˜αŸ’αžšαŸαž…αžŠαŸ‚αž›αž”αžΆαž“αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αžŠαŸ„αž™αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžΆαž€αž›αŸ’αž”αž„αž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™αŸ” αžŸαž–αŸ’αžœαžαŸ’αž„αŸƒαž“αŸαŸ‡ αž‚αŸ†αž“αž·αžαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž™αž€αž™αŸ‰αžΆαž„αž‘αžΌαž›αŸ†αž‘αžΌαž›αžΆαž™ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ…αž€αŸ’αž“αž»αž„αž†αŸ’αž“αžΆαŸ† 2010 αžœαžΆαž‚αžΊαž‡αžΆαž”αž‰αŸ’αž αžΆαžŠαŸ‚αž›αž“αŸ…αžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαŸ’αžœαŸ‚αž„αžšαž€αž™αŸ‰αžΆαž„αžŸαž€αž˜αŸ’αž˜αŸ”

αž€αžΆαžšαž„αžΆαžšαžŠαžΎαž˜αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž€αŸ’αž“αž»αž„αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž‚αžΊαž˜αž·αž“αž˜αžΆαž“αž‚αŸ„αž›αž”αŸ†αžŽαž„αž›αžΎ Python αž‘αŸαŸ” αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ’αžšαžΎαž—αžΆαžŸαžΆαžαžΌαž…αž˜αž½αž™ "αž’αŸ’αžœαžΎαž“αŸ…αž•αŸ’αž‘αŸ‡" ធអទូ. αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž™αž›αŸ‹αž–αžΈαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž€αŸ†αž–αž»αž„αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈ (αž”αŸ’αžšαž—αŸαž‘αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž‚αžΊαžŸαŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž“αŸ…αž‘αžΈαž“αŸαŸ‡)αŸ–

def Fib(n as Int) as Int
  if n <= 1
    return n
  else
    return Fib(n - 1) + Fib(n - 2)
  end
end

αž€αžΆαžšαž”αŸ’αžšαžΎαž—αžΆαžŸαžΆαž€αŸ†αžŽαžΎαžαžŸαžΆαž˜αž‰αŸ’αž‰αž‚αžΊαž‡αžΆαžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž‘αžΌαž‘αŸ…αžŠαŸ‚αž›αž”αŸ’αžšαžΎαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αžšαŸ” αž“αŸαŸ‡αž–αž·αžαž‡αžΆαžŠαžΌαž…αŸ’αž“αŸαŸ‡αž˜αŸ‚αž“ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž’αŸ’αžœαžΎαž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαž”αžΆαž“αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž αžΎαž™αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αžΆαžšαž–αž·αžαžŠαŸ‚αž›αžαžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž‡αžΆαž”αŸ‹αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž˜αž·αž“αž’αžΎαž–αžΎαž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αŸ” αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ’αž“αž»αž„αž–αž·αž—αž–αž–αž·αžαž˜αžΆαž“αž‘αŸ†αž“αŸ„αžšαž‘αŸ…αž‡αžΆαž”αžΆαžαž»αž—αžΌαžαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž’αŸ†αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸαžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰ αž αžΎαž™αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž–αž·αžŸαŸ„αž’αž“αŸαžαž™αž…αž»αŸ‡αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž›αž‘αŸ’αž’αž•αž›αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αž•αŸ’αž’αŸ‚αž€αž›αžΎαž—αžΆαžŸαžΆαžŸαžΆαž˜αž‰αŸ’αž‰αž˜αžΎαž›αž‘αŸ…αž‚αž½αžšαž±αŸ’αž™αžŸαž„αŸ’αžŸαŸαž™αž”αž“αŸ’αžαž·αž… αž–αŸ’αžšαŸ„αŸ‡αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αž‘αž½αž›αž”αžΆαž“αž›αž‘αŸ’αž’αž•αž›αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αžŸαŸ’αžšαžΆαžœαž‡αŸ’αžšαžΆαžœαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž”αžΆαž“αž›αŸ‡αž”αž„αŸ‹αž€αžΆαžšαž–αž·αž…αžΆαžšαžŽαžΆαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž—αžΆαžŸαžΆαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alore αž˜αžΎαž›αž‘αŸ…αž–αž·αžαž‡αžΆαž˜αžΆαž“αžŸαŸ†αžŽαžΆαž„αžŽαžΆαžŸαŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαžŠαŸ„αž™αž–αž·αžŸαŸ„αž’αž“αŸαž‡αžΆαž˜αž½αž™αž€αžΌαžŠαž–αž·αž αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž“αž·αž™αžΆαž™αžαžΆ αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž“αŸ…αž€αŸ’αž“αž»αž„ Alore αž‘αŸαŸ” αž‡αžΆαžŸαŸ†αžŽαžΆαž„αž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αž‰αž»αŸ† αž—αžΆαžŸαžΆ Alore αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‚αŸ†αž“αž·αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„ Python αŸ” αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαžΆαž“αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‘αžΎαž„αžœαž·αž‰ αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžœαžΆαž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ αž“αž·αž„αž’αžαŸ’αžαž“αŸαž™αžšαž”αžŸαŸ‹ Python αŸ” αžœαžΆαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž™αžΎαž„αžŸαžΆαž€αž›αŸ’αž”αž„αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αž€αžΌαžŠ Python αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžŸαžšαžŸαŸαžš transpiler αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ†αž”αŸ’αž›αŸ‚αž„αž€αžΌαžŠαžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž€αŸ’αž“αž»αž„ Alore αž‘αŸ…αž‡αžΆαž€αžΌαžŠ Python αž αžΎαž™αž”αŸ’αžšαžΎαžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž”αž€αž”αŸ’αžšαŸ‚αž€αžΌαžŠαž’αŸ’αž“αž€αžœαžΆαž™αž’αž€αŸ’αžŸαžšαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αžŸαžšαžŸαŸαžšαž‡αžΆαž—αžΆαžŸαžΆ Python αžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαž•αŸ’αž“αŸ‚αž€αžšαž„αž“αŸƒ Python αžŠαŸ‚αž›αž‡αžΆαž—αžΆαžŸαžΆαž”αŸ’αžšαž—αŸαž‘αž“αŸ„αŸ‡! (αž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž•αŸ’αž“αŸ‚αž€αžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜αž˜αž½αž™αž…αŸ†αž“αž½αž“αžŠαŸ‚αž›αž™αž›αŸ‹αž”αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Alore αž‚αžΊαž˜αž·αž“αžŸαž˜αžŸαŸ’αžšαž”αž“αžΉαž„ Python αž αžΎαž™αž“αŸαŸ‡αž“αŸ…αžαŸ‚αž’αžΆαž…αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž“αŸƒ mypy codebase αŸ” )

αžαžΆαž˜αž–αž·αž αž—αžΆαžŸαžΆαžŠαŸ‚αž›αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αŸ’αžšαž—αŸαž‘αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ Python αž“αŸ…αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡αž‘αŸαŸ– αžœαžΆαž‡αžΆαžœαŸ‰αžΆαžšαŸ’αž™αŸ‰αž„αŸ‹αž“αŸƒ Python αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αžŠαŸ‚αž“αž€αŸ†αžŽαžαŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž“αŸƒαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘ Python 3 αŸ”

αžœαžΆαž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž›αŸ’αž”αžΆαž™αž“αŸƒ Java αž“αž·αž„ PythonαŸ–

int fib(int n):
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

αž‚αŸ†αž“αž·αžαž˜αž½αž™αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡αž‚αžΊαžαŸ’αžšαžΌαžœαž”αŸ’αžšαžΎαž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž€αžΆαžšαž…αž„αž€αŸ’αžšαž„αž”αŸ’αžšαž—αŸαž‘ Python αž“αŸαŸ‡αž‘αŸ…αž‡αžΆ C αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆ JVM bytecode αŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αžˆαžΆαž“αžŠαž›αŸ‹αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž‚αŸ†αžšαžΌαž’αŸ’αž“αž€αž…αž„αž€αŸ’αžšαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αŸ„αŸ‡αž”αž„αŸ‹αž…αŸ„αž›αž‚αŸ†αž“αž·αžαž“αŸαŸ‡ αžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž”αŸ’αžšαž—αŸαž‘αžαŸ’αž›αž½αž“αž―αž„αž˜αžΎαž›αž‘αŸ…αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŽαžΆαžŸαŸ‹αŸ”

αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž–αžΈαž‚αž˜αŸ’αžšαŸ„αž„αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž“αŸ… PyCon 2013 αž“αŸ… Santa ClaraαŸ” αžαŸ’αž‰αž»αŸ†αž€αŸαž”αžΆαž“αž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡αž‡αžΆαž˜αž½αž™αž›αŸ„αž€ Guido van Rossum αžŠαŸ‚αž›αž‡αžΆαž˜αŸαžŠαžΉαž€αž“αžΆαŸ†αž•αŸ’αžαžΆαž…αŸ‹αž€αžΆαžš Python αžŠαŸαžŸαž”αŸ’αž”αž»αžšαžŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αžΈαžœαž·αžαŸ” αž‚αžΆαžαŸ‹αž”αžΆαž“αž”αž‰αŸ’αž…αž»αŸ‡αž”αž‰αŸ’αž…αžΌαž›αžαŸ’αž‰αž»αŸ†αž±αŸ’αž™αž‘αž˜αŸ’αž›αžΆαž€αŸ‹αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ† αž αžΎαž™αž“αŸ…αž‡αžΆαž”αŸ‹αž“αžΉαž„αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžš Python 3 αŸ” Python 3 αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž’αŸ†αž–αžΈαž˜αž»αžαž„αžΆαžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αžŠαžΌαž…αž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ αžŠαŸ‚αž›αž‡αžΆαž›αž‘αŸ’αž’αž•αž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Python αž’αž˜αŸ’αž˜αžαžΆαŸ–

def fib(n: int) -> int:
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαžαŸ‚αž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαž”αžŸαž˜αŸ’αžšαž½αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“ (αž‡αžΆαžŠαŸ†αž”αžΌαž„αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž αŸαžαž»αž•αž›αž“αŸαŸ‡) αŸ” αž‡αžΆαž–αž·αžŸαŸαžŸ Python 3.3 αžŠαŸ‚αž›αž‡αžΆαž€αŸ†αžŽαŸ‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž”αŸ†αž•αž»αžαž“αŸƒαž—αžΆαžŸαžΆαž“αŸ…αž–αŸαž›αž“αŸ„αŸ‡ αž˜αž·αž“αž‚αžΆαŸ†αž‘αŸ’αžšαž€αžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž’αžαŸαžšαž‘αŸαŸ” αžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž‡αžΆαž˜αž½αž™αž›αŸ„αž€ Guido αžαžΆαž˜αž’αŸŠαžΈαž˜αŸ‚αž›αž’αŸ†αž–αžΈαž›αž‘αŸ’αž’αž—αžΆαž–αž•αŸ’αžŸαŸαž„αŸ—αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžšαž…αž“αžΆαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸƒαž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž”αŸ‚αž”αž“αŸαŸ‡αŸ” αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž”αŸ’αžšαžΎαž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžαŸαžšαŸ” αžœαžΆαž”αžΆαž“αž”αž˜αŸ’αžšαžΎαž‚αŸ„αž›αž”αŸ†αžŽαž„αžŠαŸ‚αž›αž”αžΆαž“αž‚αŸ’αžšαŸ„αž„αž‘αž»αž€ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αžΆαž“αž€αžΆαžšαž–αž·αž”αžΆαž€αž”αž“αŸ’αžαž·αž… (Python 3.6 αž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž™αžΎαž„αž“αžΌαžœαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž›αŸ’αž’αž‡αžΆαž„)αŸ–

products = []  # type: List[str]  # Eww

αž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž”αŸ’αžšαž—αŸαž‘αž€αŸαž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž•αž„αžŠαŸ‚αžšαž€αŸ’αž“αž»αž„αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžš Python 2 αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αŸ–

f fib(n):
    # type: (int) -> int
    if n <= 1:
        return n
    else:
        return fib(n - 1) + fib(n - 2)

αžœαžΆαž”αžΆαž“αž”αŸ’αžšαŸ‚αž€αŸ’αž›αžΆαž™αžαžΆαž€αžΆαžšαžŠαŸ„αŸ‡αžŠαžΌαžšαž–αžΆαžŽαž·αž‡αŸ’αž‡αž€αž˜αŸ’αž˜αž‘αžΆαŸ†αž„αž“αŸαŸ‡ (αž“αž·αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αž) αž–αž·αžαž‡αžΆαž˜αž·αž“αžŸαŸ†αžαžΆαž“αŸ‹αž‘αŸ - αž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžšαž‹αž·αžαž·αžœαž“αŸ’αžαž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž†αžΆαž”αŸ‹αž—αŸ’αž›αŸαž…αž’αŸ†αž–αžΈαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžŠαŸ‚αž›αž˜αž·αž“αžŸαžΌαžœαž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αŸ” αžŠαŸ„αž™αžŸαžΆαžšαž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαžŸαŸ’αžαžΆαž”αž“αžΆαžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž–αž·αžŸαŸαžŸαžŽαžΆαž˜αž½αž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΌαžŠ Python αžŠαŸ‚αž›αž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αž”αŸ’αžšαž—αŸαž‘αž“αŸ„αŸ‡ αž§αž”αž€αžšαžŽαŸ Python αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΌαžŠαž”αž“αŸ’αžαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ€αž“αž§αž”αž€αžšαžŽαŸαžαŸ’αž˜αžΈαŸ”

Guido αž€αŸαž”αžΆαž“αž”αž‰αŸ’αž…αž»αŸ‡αž”αž‰αŸ’αž…αžΌαž›αžαŸ’αž‰αž»αŸ†αž±αŸ’αž™αž…αžΌαž›αžšαž½αž˜αž‡αžΆαž˜αž½αž™ Dropbox αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžαŸ’αž‰αž»αŸ†αž”αžΆαž“αž”αž‰αŸ’αž…αž”αŸ‹αž“αž·αž€αŸ’αžαŸαž”αž”αž‘αž”αž‰αŸ’αž…αž”αŸ‹αž€αžΆαžšαžŸαž·αž€αŸ’αžŸαžΆαžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αŸ” αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αž“αŸ’αž›αŸ‚αž„αžŠαŸ‚αž›αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αŸ†αž•αž»αžαž“αŸƒαžšαžΏαž„ mypy αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αŸ”

αž“αŸ…β€‹αž˜αžΆαž“β€‹αž‡αžΆβ€‹αž”αž“αŸ’αžβ€‹αž‘αŸ€αžβ€¦

αž’αŸ’αž“αž€αž’αžΆαž“αž‡αžΆαž‘αžΈαžŸαŸ’αžšαž‘αžΆαž‰αŸ‹! αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž”αŸ’αžšαžΎ Python αžŸαžΌαž˜αž”αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„αž’αŸ†αž–αžΈαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž“αŸƒαž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž‡αžΆαž—αžΆαžŸαžΆαž“αŸαŸ‡αŸ”

αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžš 4 αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠ Python αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1
αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž€αžΆαžšαžœαžΆαž™αž’αž€αŸ’αžŸαžš 4 αž›αžΆαž“αž”αž“αŸ’αž‘αžΆαžαŸ‹αž“αŸƒαž€αžΌαžŠ Python αŸ” αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹