ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1

ДнСс Π²ΠΈ прСдставямС ΠΏΡŠΡ€Π²Π°Ρ‚Π° част ΠΎΡ‚ ΠΏΡ€Π΅Π²ΠΎΠ΄Π° Π½Π° ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ Π² Dropbox сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ‚ с ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π° Python ΠΊΠΎΠ΄Π°.

ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1

Π’ Dropbox пишСм ΠΌΠ½ΠΎΠ³ΠΎ Π½Π° Python. Π’ΠΎΠ²Π° Π΅ Π΅Π·ΠΈΠΊΡŠΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΡˆΠΈΡ€ΠΎΠΊΠΎ - ΠΊΠ°ΠΊΡ‚ΠΎ Π·Π° Π±Π΅ΠΊΠ΅Π½Π΄ услуги, Ρ‚Π°ΠΊΠ° ΠΈ Π·Π° настолни клиСнтски прилоТСния. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° стСпСн ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Go, TypeScript ΠΈ Rust, Π½ΠΎ Python Π΅ Π½Π°ΡˆΠΈΡΡ‚ основСн Π΅Π·ΠΈΠΊ. ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Π½Π°ΡˆΠΈΡΡ‚ ΠΌΠ°Ρ‰Π°Π±, Π° става Π΄ΡƒΠΌΠ° Π·Π° ΠΌΠΈΠ»ΠΈΠΎΠ½ΠΈ Ρ€Π΅Π΄Π° Π½Π° Python ΠΊΠΎΠ΄, стана ясно, Ρ‡Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π°Ρ‚Π° типизация Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π½Π΅ΠΎΠΏΡ€Π°Π²Π΄Π°Π½ΠΎ услоТни Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ ΠΈ Π·Π°ΠΏΠΎΡ‡Π½Π° сСриозно Π΄Π° влияС Π½Π° производитСлността. Π—Π° Π΄Π° смСкчим Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π·Π°ΠΏΠΎΡ‡Π½Π°Ρ…ΠΌΠ΅ постСпСнно Π΄Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠΌΠ΅ нашия ΠΊΠΎΠ΄ към статична ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° mypy. Π’ΠΎΠ²Π° вСроятно Π΅ Π½Π°ΠΉ-популярната самостоятСлна систСма Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π·Π° Python. Mypy Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄, Π° основнитС ΠΌΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ работят Π² Dropbox.

Dropbox сС ΠΎΠΊΠ°Π·Π° Π΅Π΄Π½Π° ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…Π° статична ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π² Python ΠΊΠΎΠ΄Π° Π² ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠ°Ρ‰Π°Π±. Π’ наши Π΄Π½ΠΈ mypy сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² хиляди ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Π’ΠΎΠ·ΠΈ инструмСнт Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Π±Π΅Π·Π±Ρ€ΠΎΠΉ ΠΏΡŠΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° Π΄Π° сС ΠΊΠ°ΠΆΠ΅, "Π² боя". Π—Π° Π΄Π° стигнСм Π΄ΠΎΡ‚Π°ΠΌ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ смС сСга, Π½ΠΈ бСшС Π½ΡƒΠΆΠ½ΠΎ Π΄Π° ΠΈΠ·Π²ΡŠΡ€Π²ΠΈΠΌ дълъг ΠΏΡŠΡ‚. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚ имашС Π½Π΅ΠΌΠ°Π»ΠΊΠΎ Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ начинания ΠΈ ΠΏΡ€ΠΎΠ²Π°Π»Π΅Π½ΠΈ СкспСримСнти. Π’ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Ρ€Π°Π·ΠΊΠ°Π·Π²Π° историята Π½Π° статичната ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π² Python - ΠΎΡ‚ самото ΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ бСшС част ΠΎΡ‚ моя Π½Π°ΡƒΡ‡Π΅Π½ изслСдоватСлски ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π΄ΠΎ днСшния Π΄Π΅Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈ подсказкитС Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ станаха Ρ€ΡƒΡ‚ΠΈΠ½Π½ΠΈ Π·Π° Π±Π΅Π·Π±Ρ€ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΈΡˆΠ°Ρ‚ Π½Π° Python. Π’Π΅Π·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈ Π²Π΅Ρ‡Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΎΡ‚ мноТСство инструмСнти - ΠΊΠ°Ρ‚ΠΎ IDE ΠΈ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄.

β†’ ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π²Ρ‚ΠΎΡ€Π°Ρ‚Π° част

Π—Π°Ρ‰ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅?

Ако някога стС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ типизирания Python – ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ извСстно Π½Π΅Π΄ΠΎΡ€Π°Π·ΡƒΠΌΠ΅Π½ΠΈΠ΅ относно ΡˆΡƒΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ статичната типизация ΠΈ mypy напослСдък. Или ΠΌΠΎΠΆΠ΅ Π±ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π°Ρ€Π°Π΄ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½Π°Ρ‚Π° типизация Python харСсватС Π΅Π·ΠΈΠΊΠ°, Π° случващото сС просто Π²ΠΈ разстройва. ΠšΠ»ΡŽΡ‡ΡŠΡ‚ към стойността Π½Π° статичната типизация Π΅ ΠΌΠ°Ρ‰Π°Π±ΡŠΡ‚ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ‚Π°: ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΠΎ-голям Π΅ Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ сС накланятС към статичната типизация ΠΈ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка, Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Ρ‡Π΅ наистина Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚ΠΎΠ²Π°.

Π”Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Π΅ Π΄Π°Π΄Π΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΅ достигнал Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΈ ΠΎΡ‚ дСсСтки хиляди Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΈ Π΅ установСно, Ρ‡Π΅ ΠΏΠΎ Π½Π΅Π³ΠΎ работят няколко програмиста. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΉΠΊΠΈ Ρ‚Π°ΠΊΡŠΠ² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, Π±Π°Π·ΠΈΡ€Π°ΠΉΠΊΠΈ сС Π½Π° нашия ΠΎΠΏΠΈΡ‚, Ρ‡Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° нСговия ΠΊΠΎΠ΄ Ρ‰Π΅ бъдС ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΎ Π·Π° ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½Π΅Ρ‚ΠΎ Π½Π° продуктивността Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅. Π‘Π΅Π· Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π΄Π° сС установи, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊΠ²ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ трябва Π΄Π° сС ΠΏΡ€Π΅Π΄Π°Π΄Π°Ρ‚ Π½Π° функцията ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠ²ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ стойности ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡŠΡ€Π½Π΅ функцията. Π•Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ чСсто Π½Π΅ Π΅ лСсно Π΄Π° сС ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈ Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅:

  • МоТС Π»ΠΈ Ρ‚Π°Π·ΠΈ функция Π΄Π° Π²ΡŠΡ€Π½Π΅ None?
  • Какъв трябва Π΄Π° бъдС Ρ‚ΠΎΠ·ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ?
  • Какъв Π΅ Ρ‚ΠΈΠΏΡŠΡ‚ Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° id: int Π»ΠΈ Π΅ Ρ‚ΠΎΠ²Π°, str, ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ някакъв потрСбитСлски Ρ‚ΠΈΠΏ?
  • Врябва Π»ΠΈ Ρ‚ΠΎΠ·ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄Π° бъдС списък? МоТС Π»ΠΈ Π΄Π° сС ΠΏΡ€Π΅Π΄Π°Π΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ?

Ако ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ слСдния Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄, снабдСн с Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, ΠΈ ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ, Ρ‰Π΅ сС ΠΎΠΊΠ°ΠΆΠ΅, Ρ‡Π΅ Ρ‚ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-простата Π·Π°Π΄Π°Ρ‡Π°:

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

  • read_metadata Π½Π΅ Π²Ρ€ΡŠΡ‰Π° None, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ€Π½Π°Ρ‚ΠΈΡΡ‚ Ρ‚ΠΈΠΏ Π½Π΅ Π΅ Optional[…].
  • АргумСнт Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ – Ρ‚ΠΎΠ²Π° Π΅ послСдоватСлност ΠΎΡ‚ Π½ΠΈΠ·ΠΎΠ²Π΅. НС ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΡ‚Π΅Ρ€Π°Ρ€Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Ρ€Π΅Π΄.
  • Атрибут id – Ρ‚ΠΎΠ²Π° Π΅ Π±Π°ΠΉΡ‚ΠΎΠ²Π° Π½ΠΈΠ·.

Π’ идСалния свят Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ Π΄Π° сС ΠΎΡ‡Π°ΠΊΠ²Π°, Ρ‡Π΅ всички Ρ‚Π΅Π·ΠΈ подробности Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ описани Π² вградСния докумСнтация (docstring). Но ΠΎΠΏΠΈΡ‚ΡŠΡ‚ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ Π·Π° Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Π° докумСнтация Π² ΠΊΠΎΠ΄Π°, с ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ, чСсто липсва. Π”ΠΎΡ€ΠΈ Π°ΠΊΠΎ Ρ‚Π°ΠΊΠ°Π²Π° докумСнтация ΠΏΡ€ΠΈΡΡŠΡΡ‚Π²Π° Π² ΠΊΠΎΠ΄Π°, Π½Π΅ Π±ΠΈΠ²Π° Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Π½Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅. Π’Π°Π·ΠΈ докумСнтация ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС нСясна, Π½Π΅Ρ‚ΠΎΡ‡Π½Π° ΠΈ Π΄Π° оставя ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Π’ Π³ΠΎΠ»Π΅ΠΌΠΈ Π΅ΠΊΠΈΠΏΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ, Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ΅ Π΄Π° станС ΠΈΠ·ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΎΡΡ‚ΡŠΡ€.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Python ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ Π½Π° Ρ€Π°Π½Π½ΠΈΡ‚Π΅ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Python, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ‚ с ТизнСноваТния Π²ΡŠΠΏΡ€ΠΎΡ: "Врябва Π»ΠΈ Π΄Π° ΠΏΡ€Π΅Π½Π°ΠΏΠΈΡˆΠ΅ΠΌ всичко Π½Π° статично Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ Π΅Π·ΠΈΠΊ?".

БистСмитС Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠ°Ρ‚ΠΎ mypy, Ρ€Π΅ΡˆΠ°Π²Π°Ρ‚ спомСнатия ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠ°Ρ‚ΠΎ прСдоставят Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° описаниС Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈ провСряват, Ρ‡Π΅ описанията Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π°Ρ‚ Π½Π° рСализацията Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ (ΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ, провСряват тяхното ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅). Π’ ΠΎΠ±Ρ‰ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Ρ‚Π΅Π·ΠΈ систСми ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Ρ‚ Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π° докумСнтация.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ систСми ΠΈΠΌΠ° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ прСдимства, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ съвсСм Π½Π΅ са Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΈ:

  • БистСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ΅ някои ΠΌΠ°Π»ΠΊΠΈ (Π° ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΈ Π½Π΅ особСно ΠΌΠ°Π»ΠΊΠΈ) Π³Ρ€Π΅ΡˆΠΊΠΈ. Π’ΠΈΠΏΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ забравят Π΄Π° обработят стойност None ΠΈΠ»ΠΈ някакво Π΄Ρ€ΡƒΠ³ΠΎ спСциално условиС.
  • Π Π΅Ρ„actoring ΠΊΠΎΠ΄ΡŠΡ‚ става Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎ-лСсСн, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ систСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ чСсто ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π²Π° ΠΊΠΎΠΉ ΠΊΠΎΠ΄ трябва Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ. ΠŸΡ€ΠΈ Ρ‚ΠΎΠ²Π° Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Ρ€Π°Π·Ρ‡ΠΈΡ‚Π°ΠΌΠ΅ Π½Π° 100% ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΄Π° с тСстовС, ΠΊΠΎΠ΅Ρ‚ΠΎ, Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ нСизпълнимо. НС Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΠΏΡ€ΠΎΡƒΡ‡Π²Π°ΠΌΠ΅ Π΄ΡŠΠ»Π±ΠΎΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΈΡ‚Π΅ Π·Π° трасировка Π½Π° стСка, Π·Π° Π΄Π° установим ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°.
  • Π”ΠΎΡ€ΠΈ Π² Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ mypy чСсто ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ пълна ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π·Π° части ΠΎΡ‚ сСкундата. Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° тСстовСтС ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΎΡ‚Π½Π΅ΠΌΠ° дСсСтки сСкунди ΠΈΠ»ΠΈ Π΄ΠΎΡ€ΠΈ ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. БистСмата Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ прСдоставя Π½Π° програмиститС ΠΌΠΈΠ³Π½ΠΎΠ²Π΅Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ° ΠΈ ΠΈΠΌ позволява Π΄Π° сС справят ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ със Π·Π°Π΄Π°Ρ‡ΠΈΡ‚Π΅ си. НС Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π΄Π° ΠΏΠΈΡˆΠ°Ρ‚ ΠΊΡ€Π΅Ρ…ΠΊΠΈ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ тСстовС, ΠΊΠΎΠΈΡ‚ΠΎ замСнят Ρ€Π΅Π°Π»Π½ΠΈΡ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с Ρ„Π°Π»ΡˆΠΈΠ²ΠΈ ΠΈ ΠΏΠ°Ρ‚Ρ‡ΠΎΠ²Π΅ само Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ ΠΎΡ‚ тСстовСтС Π½Π° ΠΊΠΎΠ΄Π°.

IDE ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΈ, ΠΊΠ°Ρ‚ΠΎ PyCharm ΠΈΠ»ΠΈ Visual Studio Code, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π½Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, Π·Π° Π΄Π° прСдоставят Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°Π½Π΅ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° чСсто ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ конструкции. И Ρ‚ΠΎΠ²Π° Π΅ само част ΠΎΡ‚ прСдимствата, ΠΊΠΎΠΈΡ‚ΠΎ прСдоставя типизацията. Π—Π° някои програмисти всичко Ρ‚ΠΎΠ²Π° Π΅ основният Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΠΎΠ»Π·Π° Π½Π° типизацията. Π’ΠΎΠ²Π° Π΅ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ носи ΠΏΠΎΠ»Π·Π° Π²Π΅Π΄Π½Π°Π³Π° слСд внСдряванС Π² Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π°. Π’Π°Π·ΠΈ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ изисква ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΡ‚Π΄Π΅Π»Π½Π° систСма Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ mypy, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ mypy ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΊΠΎΠ΄Π°.

ΠŸΡ€Π΅Π΄ΠΈΡΡ‚ΠΎΡ€ΠΈΡ Π½Π° mypy

Π˜ΡΡ‚ΠΎΡ€ΠΈΡΡ‚Π° Π½Π° mypy Π·Π°ΠΏΠΎΡ‡Π½Π° във ВСликобритания, Π² ΠšΠ΅ΠΉΠΌΠ±Ρ€ΠΈΠ΄ΠΆ, няколко Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Ρ към Dropbox. Π Π°Π±ΠΎΡ‚Π΅Ρ…, Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° докторската си дисСртация, Π²ΡŠΡ€Ρ…Ρƒ Π²ΡŠΠΏΡ€ΠΎΡΠ° Π·Π° унификацията Π½Π° статично Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ. Π’Π΄ΡŠΡ…Π½ΠΎΠ²Π΅Π½ бях ΠΎΡ‚ статията Π·Π° постСпСнна типизация Π½Π° Π”ΠΆΠ΅Ρ€Π΅ΠΌΠΈ Π‘ΠΈΠΉΠΊ ΠΈ Π’Π°Π»ΠΈΠ΄ Π’Π°Ρ…, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Typed Racket. ΠžΠΏΠΈΡ‚Π²Π°Ρ… сС Π΄Π° намСря Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ β€” ΠΎΡ‚ ΠΌΠ°Π»ΠΊΠΈ скриптовС Π΄ΠΎ ΠΊΠΎΠ΄ΠΎΠ²ΠΈ Π±Π°Π·ΠΈ, ΡΡŠΡΡ‚ΠΎΡΡ‰ΠΈ сС ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΈΠ»ΠΈΠΎΠ½Π½ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π΅. Π‘ΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ исках ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅, нСзависимо ΠΎΡ‚ ΠΌΠ°Ρ‰Π°Π±Π°, Π΄Π° Π½Π΅ Π½Π°Π»Π°Π³Π°Ρ‚ Ρ‚Π²ΡŠΡ€Π΄Π΅ Π³ΠΎΠ»Π΅ΠΌΠΈ компромиси. Π’Π°ΠΆΠ½Π° част ΠΎΡ‚ всичко Ρ‚ΠΎΠ²Π° бСшС концСпцията Π·Π° постСпСнСн ΠΏΡ€Π΅Ρ…ΠΎΠ΄ ΠΎΡ‚ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° към всСстранно тСстван статично Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€Π°Π½ Π³ΠΎΡ‚ΠΎΠ² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π’ днСшно Π²Ρ€Π΅ΠΌΠ΅ Ρ‚Π΅Π·ΠΈ ΠΈΠ΄Π΅ΠΈ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½Π° стСпСн сС ΠΏΡ€ΠΈΠ΅ΠΌΠ°Ρ‚ Π·Π° дадСност, Π½ΠΎ ΠΏΡ€Π΅Π· 2010 Π³ΠΎΠ΄ΠΈΠ½Π° Ρ‚ΠΎΠ²Π° всС ΠΎΡ‰Π΅ бСшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠΉΡ‚ΠΎ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ сС ΠΏΡ€ΠΎΡƒΡ‡Π²Π°ΡˆΠ΅.

ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π°Ρ‚Π° ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π° Π² областта Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π΅ бСшС насочСна към Python. ВмСсто Π½Π΅Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… малък β€žΡΠ°ΠΌΠΎΠ΄Π΅Π»Π΅Π½β€œ Π΅Π·ΠΈΠΊ AloreΠ•Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ (Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Ρ‚ΡƒΠΊ Π½Π΅ са Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΈ):

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 ΠΊΠΎΠ΄. ОсвСн Ρ‚ΠΎΠ²Π° написах транспайлСр Π·Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄, написан Π½Π° Alore Π² Python ΠΊΠΎΠ΄ ΠΈ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Π·Π° транслация Π½Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠΎΠ΅Ρ‚ΠΎ срСдство Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅. Π‘Π΅Π³Π° Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Ρ… с систСма Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, написана Π½Π° Python, която ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ подмноТСство Π½Π° Python, своСго Ρ€ΠΎΠ΄Π° разновидност Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ! (Някои Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ смисъл Π·Π° Alore, Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠΆΠ΄Π°Ρ…Π° Π΄ΠΎΠ±Ρ€Π΅ Π½Π° Python, ΠΊΠΎΠ΅Ρ‚ΠΎ всС ΠΎΡ‰Π΅ Π΅ Π²ΠΈΠ΄Π½ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ части ΠΎΡ‚ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ‚Π° Π±Π°Π·Π° mypy.)

Π’ΡΡŠΡ‰Π½ΠΎΡΡ‚, Π΅Π·ΠΈΠΊΡŠΡ‚, ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ ΠΎΡ‚ моята систСма Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π½Π΅ моТСшС напълно Π΄Π° бъдС Π½Π°Ρ€Π΅Ρ‡Π΅Π½ 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. НапрСднах Π΄ΠΎ Π΅Ρ‚Π°ΠΏΠ° Π½Π° написванС Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, Π½ΠΎ оставих Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ сама ΠΏΠΎ сСбС си изглСТдашС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Π°.

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка прСдставих моя ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° конфСрСнцията PyCon 2013 Π² Π‘Π°Π½Ρ‚Π° ΠšΠ»Π°Ρ€Π°. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π³ΠΎΠ²ΠΎΡ€ΠΈΡ… Π·Π° Ρ‚ΠΎΠ²Π° с Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π²Π΅Π»ΠΈΠΊΠΎΠ΄ΡƒΡˆΠ½ΠΈΡ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ Π½Π° 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, Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΏΠΎ Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅, Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. ΠžΠ±ΡΡŠΠ΄ΠΈΡ… с Π“Π²ΠΈΠ΄ΠΎ ΠΏΠΎ ΠΈΠΌΠ΅ΠΉΠ» Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° синтактична Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ. Π Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π·Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅. Π’ΠΎΠ²Π° позволявашС Π΄Π° постигнСм Ρ†Π΅Π»Ρ‚Π°, Π½ΠΎ изглСТдашС ΠΌΠ°Π»ΠΊΠΎ Ρ‚Ρ€ΠΎΠΌΠ°Π²ΠΎ (Python 3.6 Π½ΠΈ Π΄Π°Π΄Π΅ ΠΏΠΎ-приятСн синтаксис):

products = []  # type: List[str]  # УТасно

ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡ‚Π΅ с Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΡΡŠΡ‰ΠΎ бяха ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π½Π° Python 2, Π² ΠΊΠΎΠΉΡ‚ΠΎ няма Π²Π³Ρ€Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅:

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

Оказа сС, Ρ‡Π΅ Ρ‚Π΅Π·ΠΈ (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ) компромиси Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ нямат особСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” прСдимствата Π½Π° статичната типизация Π΄ΠΎΠ²Π΅Π΄ΠΎΡ…Π° Π΄ΠΎ Ρ‚ΠΎΠ²Π°, Ρ‡Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈΡ‚Π΅ Π±ΡŠΡ€Π·ΠΎ Π·Π°Π±Ρ€Π°Π²ΠΈΡ…Π° Π·Π° Π½Π΅ напълно идСалния синтаксис. Въй ΠΊΠ°Ρ‚ΠΎ сСга Π² Python ΠΊΠΎΠ΄Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Ρ…Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅, Π½Π΅ сС ΠΏΡ€ΠΈΠ»Π°Π³Π°Ρ…Π° спСциални синтактични конструкции, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ‚Π΅ Python инструмСнти ΠΈ процСси ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈΡ…Π° Π΄Π° работят Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ улСсни усвояванСто Π½Π° новия инструмСнт ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅.

Π“Π²ΠΈΠ΄ΠΎ, освСн Ρ‚ΠΎΠ²Π°, ΠΌΠ΅ ΡƒΠ±Π΅Π΄ΠΈ Π΄Π° сС ΠΏΡ€ΠΈΡΡŠΠ΅Π΄ΠΈΠ½Ρ към Dropbox слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ… Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½Π°Ρ‚Π° си Ρ€Π°Π±ΠΎΡ‚Π°. Π’ΡƒΠΊ Π·Π°ΠΏΠΎΡ‡Π²Π° Π½Π°ΠΉ-интСрСсното Π² историята Π½Π° mypy.

ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ слСдва…

Π£Π²Π°ΠΆΠ°Π΅ΠΌΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Ако ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Python, моля, сподСлСтС информация Π·Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ с какъв ΠΌΠ°Ρ‰Π°Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Ρ‚Π΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ.

ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1
ΠŸΡŠΡ‚ΡΡ‚ към ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π½Π° 4 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Ρ€Π΅Π΄Π° Python ΠΊΠΎΠ΄. Част 1

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster