Для Ρ‡Π΅Π³ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½: Π“Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ язык программирования Python – Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ Python? β€” Π₯Π°Π±Ρ€ Q&A

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Β Python: Π½Π΅Ρ‚ смысла ΠΈΠ΄Ρ‚ΠΈ Π½Π°Β ΠΏΠ»Π°Ρ‚Π½Ρ‹Π΅ курсы ΠΏΠΎΠΊΠ° Π½Π΅Β Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚Π΅ΡΡŒ в бСсплатных

Python ча­сто ΡΠΎΒ­Π²Π΅Β­Ρ‚ΡƒΒ­ΡŽΡ‚ ΠΈΠ·ΡƒΒ­Ρ‡Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Π½ΠΈΒ­ΠΊΠΎΒ­Π³Π΄Π° Ρ€Π°Π½ΡŒΒ­ΡˆΠ΅ Π½Π΅Β ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Π». Одно ΠΈΠ·Β Π΅Π³ΠΎ прС­иму­щСств — ΡƒΠ½ΠΈΒ­Π²Π΅Ρ€Β­ΡΠ°Π»ΡŒΒ­Π½ΠΎΡΡ‚ΡŒ, за счёт ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€ΠΎΠΉ ΠΎΠ½Β ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΡƒΒ­Π΅Ρ‚Β­ΡΡ про­фСс­си­о­на­ла­ми Π²Β Ρ€Π°Π·Β­Π½Ρ‹Ρ… об­ла­стях: от Тур­на­ли­сти­ки Π΄ΠΎΒ ΠΏΡ€ΠΎΒ­Π΄Π°ΠΊΡ‚-ΠΌΠ΅Β­Π½Π΅Π΄ΠΆΒ­ΠΌΠ΅Π½Β­Ρ‚Π°. Π•Π³ΠΎ ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΡ‚ΡŒ для Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ Ρ€ΡƒΒ­Ρ‚ΠΈΠ½Β­Π½Ρ‹Ρ… Π·Π°Β­Π΄Π°Ρ‡: Π½Π°Β­ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ Π²ΠΈΒ­Π·ΡƒΒ­Π°Β­Π»ΠΈΒ­Π·ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒ боль­шой ΠΎΠ±ΡŠΒ­Ρ‘ΠΌ Π΄Π°Π½Β­Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΡΠΎΒ­ΡΡ‚Π°Π²Β­Π»ΡΡ‚ΡŒ спис­ки Π΄Π΅Π» ΠΈΒ ΠΏΠΎΒ­ΠΊΡƒΒ­ΠΏΠΎΠΊ. Ав­тор ΠΈΒ ΠΌΠ΅Β­Π½Π΅Β­Π΄ΠΆΠ΅Ρ€ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹ «Ана­лиз Π΄Π°Π½Β­Π½Ρ‹Ρ…Β» в Ян­дСкс.ΠŸΡ€Π°ΠΊΒ­Ρ‚ΠΈΒ­ΠΊΡƒΒ­ΠΌΠ΅ Анна Π§ΡƒΒ­Π²ΠΈΒ­Π»ΠΈΒ­Π½Π° рас­ска­за­ла ΠΊΠ°ΠΊ ΠΎΠΏΒ­Ρ‚ΠΈΒ­ΠΌΠΈΒ­Π·ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒ свой Π±Ρ‹Ρ‚ ΠΈΒ Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΒ­ΠΌΠΎΒ­Ρ‰ΠΈ про­грам­ми­ро­ва­ния, ΠΊΠ°Β­ΠΊΠΈΠ΅ Π±ΠΈΠ±Β­Π»ΠΈΠΎΒ­Ρ‚Π΅Β­ΠΊΠΈ (ΡˆΠ°Π±Β­Π»ΠΎΒ­Π½Ρ‹ Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΠΉ) ΠΌΠΎΒ­Π³ΡƒΡ‚ ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Ρ‚ΡŒ Π½ΠΎΒ­Π²ΠΈΡ‡Β­ΠΊΠΈ ΠΈΒ ΠΊΠ°ΠΊ Π²Ρ‹Β­Π±Ρ€Π°Ρ‚ΡŒ курс ΠΏΠΎΒ ΠΈΠ·ΡƒΒ­Ρ‡Π΅Β­Π½ΠΈΡŽ Python. ΠœΠ°Β­Ρ‚Π΅Β­Ρ€ΠΈΒ­Π°Π» ΠΏΠΎΠ΄Β­Π³ΠΎΒ­Ρ‚ΠΎΠ²Β­Π»Π΅Π½ Ака­дС­ми­Сй Ян­дСк­са

ΠŸΠΎΒ­Ρ‡Π΅Β­ΠΌΡƒ Python ΡΠΎΒ­Π²Π΅Β­Ρ‚ΡƒΒ­ΡŽΡ‚ Π½ΠΎΒ­Π²ΠΈΡ‡Β­ΠΊΠ°ΠΌ

Одно ΠΈΠ·Β Π³Π»Π°Π²Β­Π½Ρ‹Ρ… прС­иму­щСств PythonΒ β€” Π½ΠΈΠ·Β­ΠΊΠΈΠΉ ΠΏΠΎΒ­Ρ€ΠΎΠ³ Π²Ρ…ΠΎΒ­Π΄Π°. Код Π½Π°Β Π½Ρ‘ΠΌ Π»Π°Β­ΠΊΠΎΒ­Π½ΠΈΡ‡Β­Π½Ρ‹ΠΉ ΠΈΒ ΠΎΠ±Ρ‹Ρ‡Β­Π½ΠΎ схо­ду по­ня­тСн Π΄Π°ΠΆΠ΅ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΈΠ·ΡƒΒ­Ρ‡Π°Π» Π΄Ρ€ΡƒΒ­Π³ΠΎΠΉ язык. А по­дроб­ная до­ку­мСн­та­ция ΠΏΠΎΒ­ΠΌΠΎΒ­ΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΎΒ­Π±Ρ€Π°Ρ‚ΡŒΒ­ΡΡ Π²Β ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠΈ с нуля.

РС­сур­сы для изу­чС­ния Python:

Π’ΠΎΒ­ΠΊΡ€ΡƒΠ³ Python ΡΡ„ΠΎΡ€Β­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π»ΠΈΡΡŒ со­об­щС­ства эн­ту­зи­а­стов, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ ΠΏΠΈΒ­ΡˆΡƒΡ‚ на этом язы­кС. На­при­мСр, в МосквС Π΅ΡΡ‚ΡŒ Π³Ρ€ΡƒΠΏΒ­ΠΏΠ° Moscow Python: ΠΎΠ½ΠΈ про­во­дят ΠΊΠΎΠ½Β­Ρ„Π΅Β­Ρ€Π΅Π½Β­Ρ†ΠΈΠΈ ΠΈΒ Π½Π΅Ρ„ΠΎΡ€Β­ΠΌΠ°Π»ΡŒΒ­Π½Ρ‹Π΅ встрС­чи ΠΈΒ ΡΠΎΒ­Ρ‚Ρ€ΡƒΠ΄Β­Π½ΠΈΒ­Ρ‡Π°Β­ΡŽΡ‚ с круп­ны­ми ИВ-ком­па­ни­я­ми.

Для Python су­щС­ству­Ст ΠΎΠ±ΡŠΒ­Ρ‘ΠΌΒ­Π½Π°Ρ си­стС­ма Π±ΠΈΠ±Β­Π»ΠΈΠΎΒ­Ρ‚Π΅ΠΊΒ β€” Π³ΠΎΒ­Ρ‚ΠΎΒ­Π²Ρ‹Ρ… Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΠΉ для Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… Π·Π°Β­Π΄Π°Ρ‡. Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊ Π°Π»Β­Π³ΠΎΒ­Ρ€ΠΈΡ‚Β­ΠΌΡ‹ для Π±Π°Β­Π·ΠΎΒ­Π²Ρ‹Ρ… ма­тС­ма­ти­чС­ских ΠΎΠΏΠ΅Β­Ρ€Π°Β­Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊ и для слоТ­ных Π·Π°Β­Π΄Π°Ρ‡: Π½Π°Β­ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€, рас­по­зна­ва­ния ΠΊΠ°Ρ€Β­Ρ‚ΠΈΒ­Π½ΠΎΠΊ ΠΈΒ Π·Π²ΡƒΒ­ΠΊΠΎΠ².

У язы­ка ΠΌΠ½ΠΎΒ­Π³ΠΎ по­нят­ных ΠΏΡ€ΠΈΒ­Π»ΠΎΒ­ΠΆΠ΅Β­Π½ΠΈΠΉ: Π΅Π³ΠΎ ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Ρ‚ΡŒ для Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ… и ма­шин­но­го обу­чС­ния, бэ­кСн­да, Π²Π΅Π±-Ρ€Π°Π·Β­Ρ€Π°Β­Π±ΠΎΡ‚Β­ΠΊΠΈ, си­стСм­но­го ад­ми­ни­стри­ро­ва­ния ΠΈΒ ΠΈΠ³Ρ€. ΠšΠΎΒ­Π½Π΅Ρ‡Β­Π½ΠΎ, ΠΏΡ€ΠΈ этом Π½ΡƒΒ­ΠΆΠ΅Π½ Ρ€Π°Π·Β­Π½Ρ‹ΠΉ Π½Π°Β­Π±ΠΎΡ€ Π½Π°Β­Π²Ρ‹Β­ΠΊΠΎΠ² ΠΏΠΎΒ­ΠΌΠΈΒ­ΠΌΠΎ про­грам­ми­ро­ва­ния, но с Python ΠΌΠΎΠΆΒ­Π½ΠΎ Π½Π°Β­Ρ‡Π°Ρ‚ΡŒ ΠΎΡΠ²Π°Β­ΠΈΒ­Π²Π°Ρ‚ΡŒ ΠΏΠΎΒ­Ρ‡Ρ‚ΠΈ Π»ΡŽΒ­Π±ΡƒΡŽ ΠΏΡ€Π΅Π΄Β­ΠΌΠ΅Ρ‚Β­Π½ΡƒΡŽ ΠΎΠ±Β­Π»Π°ΡΡ‚ΡŒ.

Π’Π°ΠΆΒ­Π½ΠΎ ΠΏΠΎΒ­Π½ΠΈΒ­ΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ для Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ… язык про­грам­ми­ро­ва­ния — это ин­стру­мСнт. Ана­лиз Π΄Π°Π½Β­Π½Ρ‹Ρ… ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΏΡ€ΠΎΒ­Π²ΠΎΒ­Π΄ΠΈΡ‚ΡŒ ΠΈΒ Π²Β ExΒ­cel, ΠΈΒ Π½Π°Β Π±ΡƒΒ­ΠΌΠ°ΠΆΒ­ΠΊΠ΅, Π°Β ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅Β β€” Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ·Β Π²Π°Β­Ρ€ΠΈΒ­Π°Π½Β­Ρ‚ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΒ­Π½ΠΎ Ρ€Π΅Β­ΡˆΠ°Ρ‚ΡŒ Ρ‚Π°Β­ΠΊΠΈΠ΅ Π·Π°Β­Π΄Π°Β­Ρ‡ΠΈ.

Одно из рас­про­стра­нён­ных ΠΏΡ€ΠΈΒ­Π»ΠΎΒ­ΠΆΠ΅Β­Π½ΠΈΠΉ PythonΒ β€” Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Π° с дан­ны­ми для ΠΏΡ€ΠΎΒ­Π΄Π°ΠΊΡ‚-ΠΌΠ΅Β­Π½Π΅Π΄ΠΆΒ­ΠΌΠ΅Π½Β­Ρ‚Π°. Ана­лиз Π΄Π°Π½Β­Π½Ρ‹Ρ… поз­во­ля­Ст ΠΌΠ΅Β­Π½Π΅Β­Π΄ΠΆΠ΅Β­Ρ€Π°ΠΌ ΠΏΠΎΒ­Π»ΡƒΒ­Ρ‡Π°Ρ‚ΡŒ ин­сай­ты ΠΎΒ ΠΏΠΎΒ­Π²Π΅Β­Π΄Π΅Β­Π½ΠΈΠΈ ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Β­Ρ‚Π΅Β­Π»Π΅ΠΉ ΠΈΒ ΠΏΡ€ΠΈΒ­Π½ΠΈΒ­ΠΌΠ°Ρ‚ΡŒ обос­но­ван­ныС Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ. Π’Β ΠΊΡ€ΡƒΠΏΒ­Π½Ρ‹Ρ… ком­па­ни­ях долТ­но­сти Π°Π½Π°Β­Π»ΠΈΒ­Ρ‚ΠΈΒ­ΠΊΠΎΠ² ΠΈΒ ΠΏΡ€ΠΎΒ­Π΄Π°ΠΊΡ‚-ΠΌΠ΅Β­Π½Π΅Β­Π΄ΠΆΠ΅Β­Ρ€ΠΎΠ² ΠΎΠ±Ρ‹Ρ‡Β­Π½ΠΎ Ρ€Π°Π·Β­Π΄Π΅Β­Π»Π΅Β­Π½Ρ‹, Π½ΠΎΒ Π²Β Π½Π΅Π±ΠΎΠ»ΡŒΒ­ΡˆΠΈΡ… ΠΏΡ€ΠΎΒ­Π΅ΠΊΒ­Ρ‚Π°Ρ… ΠΏΡ€ΠΎΒ­Π΄Π°ΠΊΒ­Ρ‚Π°ΠΌ Π½ΡƒΠΆΒ­Π½ΠΎ Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Π°Ρ‚ΡŒ с дан­ны­ми ΡΠ°Β­ΠΌΠΎΒ­ΡΡ‚ΠΎΒ­ΡΒ­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎ.

Как ΠΏΠΎΒ­Π½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΒ­ΠΆΠ΅Π½ ΠΈΠΌΠ΅Π½Β­Π½ΠΎ Python

ΠΠ°Β­Π·Ρ‹Β­Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Β«ΡƒΠ±ΠΈΠΉΒ­Ρ†Π΅ΠΉ ExΒ­cel» — Π½Π΅ΠΊΠΎΡ€Β­Ρ€Π΅ΠΊΡ‚Β­Π½ΠΎ. Мно­гиС ΠΊΠΎΒ­ΠΌΠ°Π½Β­Π΄Ρ‹ ΠΈΒ ΠΊΠΎΠΌΒ­ΠΏΠ°Β­Π½ΠΈΠΈ в Рос­сии Π²Π΅Β­Π΄ΡƒΡ‚ вСсь ΡƒΡ‡Ρ‘Ρ‚ Π²Β ΠΎΠ±Ρ‹Ρ‡Β­Π½Ρ‹Ρ… Ρ‚Π°Π±Β­Π»ΠΈΒ­Ρ†Π°Ρ…, и им это­го до­ста­точ­но. А Python Π½ΡƒΒ­ΠΆΠ΅Π½ Π²Β Ρ‚ΠΎΡ‚ ΠΌΠΎΒ­ΠΌΠ΅Π½Ρ‚, ΠΊΠΎΒ­Π³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎ Π΄Π΅ΠΉΒ­ΡΡ‚Π²ΠΈΒ­Ρ‚Π΅Π»ΡŒΒ­Π½ΠΎ боль­шиС ΠΎΠ±ΡŠΒ­Π΅Β­ΠΌΡ‹ Π΄Π°Π½Β­Π½Ρ‹Ρ…. На­при­мСр, у Ян­дСкс.ΠœΡƒΒ­Π·Ρ‹Β­ΠΊΠΈ мно­ТС­ство пла­тя­щих ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Β­Ρ‚Π΅Β­Π»Π΅ΠΉ, и их дСй­ствия Π΅ΠΆΠ΅Β­Π΄Π½Π΅Π²Β­Π½ΠΎ Π³Π΅Β­Π½Π΅Β­Ρ€ΠΈΒ­Ρ€ΡƒΒ­ΡŽΡ‚ ΠΊΠ°Β­ΠΊΠΈΠ΅-Ρ‚ΠΎ со­бы­тия (Π»Π°ΠΉΒ­ΠΊΠΈ ΠΈΒ ΠΏΡ€ΠΎΒ­ΡΠ»ΡƒΒ­ΡˆΠΈΒ­Π²Π°Β­Π½ΠΈΡ)Β β€” ΠΈΒ Ρ‚Π΅Β­Ρ€Π°Β­Π±Π°ΠΉΒ­Ρ‚Ρ‹ Π΄Π°Π½Β­Π½Ρ‹Ρ…. Π₯Ρ€Π°Β­Π½ΠΈΡ‚ΡŒ ΠΈΡ…Β Π²Β Ρ‚Π°Π±Β­Π»ΠΈΡ‡Β­ΠΊΠ΅ ExΒ­celΒ β€” из раз­ря­да фан­та­сти­ки.

Π’Β Python ΠΏΡ€ΠΎΒ­Ρ‰Π΅ Π΄Π΅Β­Π»Π°Ρ‚ΡŒ ΠΈΠ½Β­Ρ‚Π΅Ρ€Β­Π°ΠΊΒ­Ρ‚ΠΈΠ²Β­Π½ΡƒΡŽ ΠΈΒ ΡΠ»ΠΎΠΆΒ­Π½ΡƒΡŽ Π²ΠΈΒ­Π·ΡƒΒ­Π°Β­Π»ΠΈΒ­Π·Π°Β­Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΒ­Π²ΠΎΒ­Π΄ΠΈΡ‚ΡŒ вы­чис­лС­ния — для это­го ΡΡƒΒ­Ρ‰Π΅Β­ΡΡ‚Π²ΡƒΒ­ΡŽΡ‚ Π±ΠΈΠ±Β­Π»ΠΈΠΎΒ­Ρ‚Π΅Β­ΠΊΠΈ Π²Ρ€ΠΎΒ­Π΄Π΅ Seaborn, matΒ­plot ΠΈΒ Plotly. Π’Β ExΒ­cel Π΅ΡΡ‚ΡŒ встро­Сн­ный Π°ΠΏΒ­ΠΏΠ°Β­Ρ€Π°Ρ‚ для Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ ма­тС­ма­ти­чС­ских Π·Π°Β­Π΄Π°Ρ‡ (Π½Π°Β­ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€, Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Ρ‹ с дан­ны­ми), но для Π½Π΅Π³ΠΎ Π½ΡƒΠΆΒ­Π½ΠΎ Π·Π°Β­ΠΏΠΎΒ­ΠΌΠΈΒ­Π½Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΒ­Π³ΠΎ Π½Π°Β­Π·Π²Π°Β­Π½ΠΈΠΉ ΠΎΠΏΠ΅Β­Ρ€Π°Β­Ρ†ΠΈΠΉΒ β€” ΠΈΒ Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Π°Β­Π΅Ρ‚ он до­воль­но Π½Π΅ΠΏΠΎΒ­Π²ΠΎΒ­Ρ€ΠΎΡ‚Β­Π»ΠΈΒ­Π²ΠΎ. ΠšΡ€ΠΎΒ­ΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Β Python ΠΌΠΎΠΆΒ­Π½ΠΎ быст­рСС и с раз­ных сто­рон ΠΏΠΎΒ­ΡΠΌΠΎΡ‚Β­Ρ€Π΅Ρ‚ΡŒ Π½Π°Β Π΄Π°Π½Β­Π½Ρ‹Π΅. Π Π΅Β­Π³Ρ€Π΅ΡΒ­ΡΠΈΡŽ ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΏΠΎΒ­ΡΡ‚Ρ€ΠΎΒ­ΠΈΡ‚ΡŒ ΠΈΒ Π²Β ExΒ­cel, Π½ΠΎΒ Π·Π°Β­Ρ‡Π΅ΠΌ, ΠΊΠΎΒ­Π³Π΄Π° Π²Β Python Π΅ΡΡ‚ΡŒ для это­го Π³ΠΎΒ­Ρ‚ΠΎΒ­Π²Ρ‹Π΅ Π±ΠΈΠ±Β­Π»ΠΈΠΎΒ­Ρ‚Π΅Β­ΠΊΠΈ?

Β©

Jefferson Santos / Unsplash


Для ста­ти­сти­чС­ских рас­чС­тов ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Ρ‚ΡŒ RΒ β€” люди с ма­тС­ма­ти­чС­ским ΠΎΠ±Β­Ρ€Π°Β­Π·ΠΎΒ­Π²Π°Β­Π½ΠΈΒ­Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Β­Π½ΠΎ ΠΎΡΠ²Π°Β­ΠΈΒ­Π²Π°Β­ΡŽΡ‚ Π΅Π³ΠΎ быст­рСС, Ρ‡Π΅ΠΌ Python. Од­на­ко Π±ΠΎΠ»ΡŒΒ­ΡˆΠΈΠ½Β­ΡΡ‚Π²Ρƒ Π±ΡƒΒ­Π΄Π΅Ρ‚ ΠΏΡ€ΠΎΒ­Ρ‰Π΅ Π½Π°Β­Ρ‡Π°Ρ‚ΡŒ с Python.

Для Ρ€Π°Π·Β­Π½Ρ‹Ρ… Π·Π°Β­Π΄Π°Ρ‡ Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ… ΡΡƒΒ­Ρ‰Π΅Β­ΡΡ‚Π²ΡƒΒ­ΡŽΡ‚ ΠΊΠΎΒ­Ρ€ΠΎΒ­Π±ΠΎΡ‡Β­Π½Ρ‹Π΅ Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ. На­при­мСр, AmΒ­pliΒ­tude (для ΠΏΡ€ΠΎΒ­Π΄ΡƒΠΊΒ­Ρ‚ΠΎΒ­Π²ΠΎΠΉ Π°Π½Π°Β­Π»ΠΈΒ­Ρ‚ΠΈΒ­ΠΊΠΈ), MixΒ­panel (для Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° по­вС­дС­ния ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Β­Ρ‚Π΅Β­Π»Π΅ΠΉ) Ян­дСкс.ΠœΠ΅Ρ‚Β­Ρ€ΠΈΒ­ΠΊΠ° ΠΈΒ Google AnΒ­aΒ­lytΒ­ics. ΠŸΡ€ΠΈ этом ΠΈΡ…Β ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅ ча­сто ΠΏΠ»Π°Ρ‚Β­Π½ΠΎΠ΅.

Π“Π΄Π΅ ΠΏΡ€ΠΈΒ­ΠΌΠ΅Β­Π½ΡΡ‚ΡŒ Python, Ссли Π²Ρ‹Β Π½Π΅Β Ρ€Π°Π·Β­Ρ€Π°Β­Π±ΠΎΡ‚Β­Ρ‡ΠΈΠΊ

По­ми­мо Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ… у язы­ка Π΅ΡΡ‚ΡŒ ΠΈΒ Π±ΠΎΒ­Π»Π΅Π΅ про­стыС при­ло­ТС­ния. Π’Π°ΠΊ, Π²Β ΡƒΡ‡Π΅Π±Β­Π½ΠΈΒ­ΠΊΠ°Ρ… ΠΏΠΎΒ Python ча­сто встрС­ча­Ст­ся Π·Π°Β­Π΄Π°Β­Ρ‡Π° с рас­сыл­ка­ми. Π’Β Π½Π΅ΠΉ Π½ΡƒΠΆΒ­Π½ΠΎ ΡΠΎΠ·Β­Π΄Π°Ρ‚ΡŒ рас­сыл­ку, Π½Π°Β­ΠΏΡ€ΠΈΒ­ΠΌΠ΅Ρ€, для лю­дСй, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ нС сда­ли дСнь­ги Π½Π°Β Ρ€Π΅Β­ΠΌΠΎΠ½Ρ‚Β β€” най­дя ΠΈΡ…Β Π΄Π°Π½Β­Π½Ρ‹Π΅ Π²Β ExΒ­cel-Ρ‚Π°Π±Β­Π»ΠΈΒ­Ρ†Π΅. Π‘Β ΠΏΠΎΒ­ΠΌΠΎΒ­Ρ‰ΡŒΡŽ Ρ‚Π°Β­ΠΊΠΎΒ­Π³ΠΎ скрип­та ΠΌΠΎΠΆΒ­Π½ΠΎ Ρ€Π°Π·ΠΎΒ­ΡΠ»Π°Ρ‚ΡŒ пись­ма ΠΏΠΎΒ ΡˆΠ°Π±Β­Π»ΠΎΒ­Π½ΡƒΒ β€” ΠΈΒ ΠΈΠΌΠ΅Β­Π½Π° Π±ΡƒΒ­Π΄ΡƒΡ‚ под­став­лС­ны ав­то­ма­ти­чС­ски.

PythonΒ β€” ΠΏΡ€ΠΎ Π°Π²Β­Ρ‚ΠΎΒ­ΠΌΠ°Β­Ρ‚ΠΈΒ­Π·Π°Β­Ρ†ΠΈΡŽ Ρ€ΡƒΒ­Ρ‚ΠΈΠ½Β­Π½Ρ‹Ρ… Π·Π°Β­Π΄Π°Ρ‡. На­при­мСр, ΠΌΠΎΠΆΒ­Π½ΠΎ Π·Π°Β­ΠΏΡƒΒ­ΡΡ‚ΠΈΡ‚ΡŒ скрипт, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹ΠΉ под­став­ля­Ст ΠΏΠ°Β­Ρ€ΠΎΒ­Π»ΠΈΒ β€” и он ав­то­ма­ти­чС­ски ΠΎΡ‚Β­ΠΊΡ€ΠΎΒ­Π΅Ρ‚ Π·Π°Β­ΠΏΠ°Β­Ρ€ΠΎΒ­Π»Π΅Π½Β­Π½Ρ‹Π΅ стра­ни­цы ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΒ­ΠΊΠΈ. Π•ΡΡ‚ΡŒ Π°Π»Β­Π³ΠΎΒ­Ρ€ΠΈΡ‚Β­ΠΌΡ‹ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ ав­то­ма­ти­чС­ски ΡΠΎΒ­Π·Π΄Π°Β­Π²Π°Ρ‚ΡŒ спис­ки ΠΏΠΎΒ­ΠΊΡƒΒ­ΠΏΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΠ΅Β­Ρ€Π΅Β­ΠΈΠΌΠ΅Β­Π½ΠΎΒ­Π²Ρ‹Β­Π²Π°Ρ‚ΡŒ Ρ„ΠΎΒ­Ρ‚ΠΎΒ­Π³Ρ€Π°Β­Ρ„ΠΈΠΈ ΠΎΠΏΡ€Π΅Β­Π΄Π΅Β­Π»Ρ‘Π½Β­Π½Ρ‹ΠΌ ΠΎΠ±Β­Ρ€Π°Β­Π·ΠΎΠΌ.

Π›ΡŽΠ΄ΠΈ, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ ΡƒΠΌΠ΅Β­ΡŽΡ‚ ΠΏΠΈΒ­ΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΡ€ΠΈΒ­Π΄ΡƒΒ­ΠΌΡ‹Β­Π²Π°Β­ΡŽΡ‚ Ρ‚Π°Β­ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ Β«Π½Π°Β Π°Π²Β­Ρ‚ΠΎΒ­ΠΌΠ°Β­Ρ‚Π΅Β». На­при­мСр, ΠΌΠ°Ρ€Β­ΠΊΠ΅Β­Ρ‚ΠΎΒ­Π»ΠΎΒ­Π³ΠΈ ΠΌΠΎΒ­Π³ΡƒΡ‚ Π·Π°Β­ΠΏΡƒΒ­ΡΡ‚ΠΈΡ‚ΡŒ скрипт для по­стро­С­ния Π²ΠΎΒ­Ρ€ΠΎΒ­Π½ΠΎΠΊ ΠΏΡ€ΠΎΒ­Π΄Π°ΠΆ. А тС­сти­ров­щи­ки — Π½Π°Β­ΠΏΠΈΒ­ΡΠ°Ρ‚ΡŒ Π°Π»Β­Π³ΠΎΒ­Ρ€ΠΈΡ‚ΠΌ, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹ΠΉ Π±ΡƒΒ­Π΄Π΅Ρ‚ ΠΏΠΎΠ΄Β­ΡΡ‚Π°Π²Β­Π»ΡΡ‚ΡŒ Π΄Π°Π½Β­Π½Ρ‹Π΅ Π²Β Ρ„ΠΎΡ€Β­ΠΌΡ‹ ΠΈΒ Ρ‚Π΅Β­ΡΡ‚ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒ при­ло­ТС­ния.

Если Π³ΠΎΒ­Π²ΠΎΒ­Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ Π°Π½Π°Β­Π»ΠΈΠ· Π΄Π°Π½Β­Π½Ρ‹Ρ…, Ρ‚ΠΎΒ ΠΌΠ½ΠΎΒ­Π³ΠΈΠ΅ Π½Π°Β­Ρ‡ΠΈΒ­Π½Π°Β­ΡŽΡ‚ ΠΎΡΠ²Π°Β­ΠΈΒ­Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ·Β Π»ΡŽΒ­Π±ΠΎΒ­ΠΏΡ‹Ρ‚Β­ΡΡ‚Π²Π°Β β€” Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ Π½Π°ΠΉΒ­Ρ‚ΠΈ ин­сай­ты в сфС­рС, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€ΡƒΡŽ ΠΏΠΎΠΊΠ° нС ис­слС­до­ва­ли. На­при­мСр, ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΎΠΏΡ€Π΅Β­Π΄Π΅Β­Π»ΠΈΡ‚ΡŒ ΡΠΎΒ­Ρ†ΠΈΒ­Π°Π»ΡŒΒ­Π½Ρ‹Π΅ ΠΏΡ€ΠΎΒ­Π±Π»Π΅Β­ΠΌΡ‹ сво­С­го Ρ€Π΅Β­Π³ΠΈΒ­ΠΎΒ­Π½Π°, ана­ли­зи­руя ΠΎΠΏΡƒΠ±Β­Π»ΠΈΒ­ΠΊΠΎΒ­Π²Π°Π½Β­Π½ΡƒΡŽ ста­ти­сти­ку. А Ссли Π²Ρ‹Β Ρ…ΠΎΒ­Ρ‚ΠΈΒ­Ρ‚Π΅ Ρ‡Π΅Β­Ρ€Π΅Π· ΠΊΠ°Β­ΠΊΠΎΠ΅-Ρ‚ΠΎ врС­мя ΠΏΠΎΒ­ΠΏΠ°ΡΡ‚ΡŒ на ста­Ти­ров­ку ΠΈΠ»ΠΈ Π½Π°Β Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Ρƒ, Π³Π΄Π΅ Π½ΡƒΒ­ΠΆΠ΅Π½ Π°Π½Π°Β­Π»ΠΈΠ· Π΄Π°Π½Β­Π½Ρ‹Ρ…, Ρ‚ΠΎΒ Ρ‚Π°Β­ΠΊΠΎΠΉ кСйс ΠΏΠΎΒ­ΠΌΠΎΒ­ΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΒ­ΠΊΠ°Β­Π·Π°Ρ‚ΡŒ свои Π½Π°Β­Π²Ρ‹Β­ΠΊΠΈ. ΠΠ°Β­Ρ‡Π°Ρ‚ΡŒ ΠΌΠΎΠΆΒ­Π½ΠΎ с про­стых, стан­дарт­ных ΠΏΡ€ΠΎΒ­Π΅ΠΊΒ­Ρ‚ΠΎΠ², ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Β­Π½ΠΎ ΠΏΡ€Π΅Π΄Β­Π»Π°Β­Π³Π°Β­ΡŽΡ‚ Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΈΠ·ΡƒΒ­Ρ‡Π°Β­Π΅Ρ‚ Python.

Π§Ρ‚ΠΎ Π½ΡƒΠΆΒ­Π½ΠΎ, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ Π²Ρ‹Β­ΡƒΡ‡ΠΈΡ‚ΡŒ Python

Π˜Π·Β ΠΌΠ°Β­Ρ‚Π΅Β­ΠΌΠ°Β­Ρ‚ΠΈΒ­Ρ‡Π΅Β­ΡΠΊΠΎΒ­Π³ΠΎ Π°ΠΏΒ­ΠΏΠ°Β­Ρ€Π°Β­Ρ‚Π° ΠΊΡ€ΠΎΒ­ΠΌΠ΅ Π±Π°Β­Π·ΠΎΒ­Π²ΠΎΠΉ Π°Ρ€ΠΈΡ„Β­ΠΌΠ΅Β­Ρ‚ΠΈΒ­ΠΊΠΈ для про­грам­ми­ро­ва­ния Π½ΠΈΒ­Ρ‡Π΅Β­Π³ΠΎ Π½Π΅Β Π½ΡƒΠΆΒ­Π½ΠΎ. Π§Ρ‚ΠΎΒ­Π±Ρ‹ ΠΏΡ€ΠΈΒ­Π΄ΡƒΒ­ΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°Β­ΠΊΠΎΠΉ Π°Π»Β­Π³ΠΎΒ­Ρ€ΠΈΡ‚ΠΌ ΠΈΡΒ­ΠΏΠΎΠ»ΡŒΒ­Π·ΠΎΒ­Π²Π°Ρ‚ΡŒ для Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Π·Π°Β­Π΄Π°Β­Ρ‡ΠΈ, Π²Π°ΠΆΒ­Π½ΠΎ струк­тур­ноС ΠΌΡ‹ΡˆΒ­Π»Π΅Β­Π½ΠΈΠ΅Β β€” но это нС ма­тС­ма­ти­чС­ская ком­пС­тСн­ция. ΠŸΠ°Β­Ρ€Π°Β­Π΄ΠΎΠΊΡ Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΒ Ρ€Π°Π·Β­Π²ΠΈΒ­Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½ΡƒΠΆΒ­Π½ΠΎ ΡΒ ΠΏΠΎΒ­ΠΌΠΎΒ­Ρ‰ΡŒΡŽ рС­гу­ляр­ной Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Ρ‹ с за­да­ча­ми — Π²Π°ΠΆΒ­Π½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΒ­Ρ‚ΠΎΒ­Π²Ρ‹ΠΌ ΠΏΡ€ΠΎΒ­ΡΠΈΒ­Π΄Π΅Ρ‚ΡŒ Π½Π°Π΄, ΠΊΠ°Β­Π·Π°Β­Π»ΠΎΡΡŒΒ Π±Ρ‹, Ρ‚Ρ€ΠΈΒ­Π²ΠΈΒ­Π°Π»ΡŒΒ­Π½Ρ‹ΠΌ Π·Π°Β­Π΄Π°Β­Π½ΠΈΒ­Π΅ΠΌ нСсколь­ко ча­сов ΠΈΒ Π½Π΅Β ΠΎΡ‚Β­Ρ‡Π°Β­ΡΡ‚ΡŒΒ­ΡΡ.

Для Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ…, ΠΏΠΎΒ­ΠΌΠΈΒ­ΠΌΠΎ школь­ной ΠΌΠ°Β­Ρ‚Π΅Β­ΠΌΠ°Β­Ρ‚ΠΈΒ­ΠΊΠΈ, по­на­до­бят­ся зна­ния ма­тС­ма­ти­чС­ской ста­ти­сти­ки ΠΈΒ Ρ‚Π΅ΠΎΒ­Ρ€ΠΈΠΈ вС­ро­ят­но­сти. ΠΠ°Β­Ρ‡ΠΈΒ­Π½Π°Β­ΡŽΒ­Ρ‰Π΅Β­ΠΌΡƒ спС­ци­а­ли­сту Π²Π°ΠΆΒ­Π½Π΅Π΅ всС­го ΠΎΡΠ²ΠΎΒ­ΠΈΡ‚ΡŒ Π±Π°Β­Π·ΠΎΒ­Π²Ρ‹Π΅ по­ня­тия: ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΒ­Π²Π΅Β­Ρ€ΡΡ‚ΡŒ Π³ΠΈΒ­ΠΏΠΎΒ­Ρ‚Π΅Β­Π·Ρ‹, Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°Β­ΠΊΠΎΠ΅ Π΄ΠΎΒ­Π²Π΅Β­Ρ€ΠΈΒ­Ρ‚Π΅Π»ΡŒΒ­Π½Ρ‹Π΅ ΠΈΠ½Β­Ρ‚Π΅Ρ€Β­Π²Π°Β­Π»Ρ‹, Ρ‡Π΅ΠΌ ΠΎΡ‚Β­Π»ΠΈΒ­Ρ‡Π°Β­ΡŽΡ‚Β­ΡΡ ΠΌΠ΅Β­Π΄ΠΈΒ­Π°Β­Π½Π° ΠΈΒ ΠΌΠΎΠ΄Π°, ΠΏΠΎΒ­Π½ΠΈΒ­ΠΌΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΒ­Π·Π½Π°Β­Ρ‡Π°Ρ‚ΡŒ со­бы­тия и их вС­ро­ят­но­сти.


ΠœΠ°Β­Ρ‚Π΅Β­Ρ€ΠΈΒ­Π°Β­Π»Ρ‹ ΠΏΠΎΒ ΠΌΠ°Β­Ρ‚Π΅Β­ΠΌΠ°Β­Ρ‚ΠΈΒ­ΠΊΠ΅:

Π’Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ…ΠΎΒ­Ρ‡Π΅Ρ‚ Π·Π°Β­Π½ΠΈΒ­ΠΌΠ°Ρ‚ΡŒΒ­ΡΡ Π°Π½Π°Β­Π»ΠΈΒ­Π·ΠΎΠΌ Π΄Π°Π½Β­Π½Ρ‹Ρ… (ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΒ­Ρ„Π΅ΡΒ­ΡΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½ΠΎ, Ρ‚Π°ΠΊ и для сСбя), Π²Π°ΠΆΒ­Π½ΠΎ Ρ€Π°Π·Β­Π²ΠΈΡ‚ΡŒ кри­ти­чС­скоС ΠΌΡ‹ΡˆΒ­Π»Π΅Β­Π½ΠΈΠ΅. На­при­мСр, Π½ΡƒΠΆΒ­Π½ΠΎ са­мо­му Π²Ρ‹Β­Π΄Π΅Β­Π»ΡΡ‚ΡŒ ΠΊΡ€ΠΈΒ­Ρ‚Π΅Β­Ρ€ΠΈΠΈ для срав­нС­ния ΠΎΠ±ΡŠΒ­Π΅ΠΊΒ­Ρ‚ΠΎΠ²: Ρ‚ΡƒΡ‚ Π½Π΅Ρ‚ ΠΊΠ°Β­ΠΊΠΎΒ­Π³ΠΎ-Ρ‚ΠΎ стан­дарт­но­го Ρ€Π΅Β­ΡˆΠ΅Β­Π½ΠΈΡ. Π•Ρ‰Ρ‘ Π²Π°ΠΆΒ­Π½ΠΎ схо­ду Π²ΠΈΒ­Π΄Π΅Ρ‚ΡŒ за­ко­но­мСр­но­сти ΠΈΒ Π°Π½ΠΎΒ­ΠΌΠ°Β­Π»ΠΈΠΈ Π²Β Π΄Π°Π½Β­Π½Ρ‹Ρ….

Π˜Π·ΡƒΒ­Ρ‡Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΠ΅ ΠΈΒ Π°Π½Π°Β­Π»ΠΈΠ· Π΄Π°Π½Β­Π½Ρ‹Ρ… ΠΌΠΎΠΆΒ­Π½ΠΎ и са­мо­му — ΡΒ Π½Π΅Β Ρ€Π΅Β­ΠΊΠΎΒ­ΠΌΠ΅Π½Β­Π΄ΡƒΡŽ ΠΎΠ±Β­Ρ€Π°Β­Ρ‰Π°Ρ‚ΡŒΒ­ΡΡ ΠΊΒ ΠΏΠ»Π°Ρ‚Β­Π½Ρ‹ΠΌ кур­сам Π΄ΠΎΒ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° вы нС по­смот­рС­ли бСс­плат­ный ΠΊΠΎΠ½Β­Ρ‚Π΅Π½Ρ‚.

Π’ΠΎ-ΠΏΠ΅Ρ€Β­Π²Ρ‹Ρ…, он слу­Тит для ΠΏΡ€ΠΎΡ„ΠΎΡ€ΠΈΒ­Π΅Π½Β­Ρ‚Π°Β­Ρ†ΠΈΠΈ: Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ Π»ΡƒΡ‡Β­ΡˆΠ΅ ΠΏΠΎΒ­Π½ΡΡ‚ΡŒ, ΠΊΠ°Β­ΠΊΠΈΠ΅ при­ло­ТС­ния Π΅ΡΡ‚ΡŒ у про­грам­ми­ро­ва­ния ΠΈΠ»ΠΈ Π°Π½Π°Β­Π»ΠΈΒ­Π·Π° Π΄Π°Π½Β­Π½Ρ‹Ρ… для Ρ€Π°Π·Β­Π½Ρ‹Ρ… про­фСс­сий. Π’ΠΎ-Π²Ρ‚ΠΎΒ­Ρ€Ρ‹Ρ…, Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΒ­Π½ΡΡ‚ΡŒ, сколь­ко сил ΠΈΒ Π²Ρ€Π΅Β­ΠΌΠ΅Β­Π½ΠΈ Π½ΡƒΠΆΒ­Π½ΠΎ Π±ΡƒΒ­Π΄Π΅Ρ‚ ΠΏΡ€ΠΈΒ­ΠΊΠ»Π°Β­Π΄Ρ‹Β­Π²Π°Ρ‚ΡŒ для изу­чС­ния.

ΠŸΡ€Π΅Β­ΠΈΠΌΡƒΒ­Ρ‰Π΅Β­ΡΡ‚Π²Π° обу­чС­ния на кур­сах Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°Β Π½ΠΈΡ… ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΏΠΎΒ­Π»ΡƒΒ­Ρ‡ΠΈΡ‚ΡŒ Ρ‡Ρ‘Ρ‚Β­ΠΊΠΎ сфор­му­ли­ро­ван­ныС прак­ти­чС­скиС Π·Π°Β­Π΄Π°Β­Ρ‡ΠΈ. Π’Π°ΠΊΒ­ΠΆΠ΅ ΠΏΡ€Π΅Β­ΠΏΠΎΒ­Π΄Π°Β­Π²Π°Β­Ρ‚Π΅Β­Π»ΠΈ ΠΌΠΎΒ­Π³ΡƒΡ‚ Ρ€Π°ΡΒ­ΡΠΊΠ°Β­Π·Π°Ρ‚ΡŒ ΠΎΒ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ±Β­Ρ‰Π°Ρ‚ΡŒΒ­ΡΡ с за­каз­чи­ком ΠΈΒ ΡƒΡ‚ΠΎΡ‡Β­Π½ΡΡ‚ΡŒ ΡƒΒ Π½Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Β­Ρ…ΠΎΒ­Π΄ΠΈΒ­ΠΌΡƒΡŽ ΠΈΠ½Β­Ρ„ΠΎΡ€Β­ΠΌΠ°Β­Ρ†ΠΈΡŽ.

Β©

Fatos Bytyqi / Unsplash


Как Π²Ρ‹Β­Π±Ρ€Π°Ρ‚ΡŒ ΠΎΠ±Β­Ρ€Π°Β­Π·ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΡƒΡŽ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡƒ

Вы­би­рая ΠΎΠ±Β­Ρ€Π°Β­Π·ΠΎΒ­Π²Π°Β­Ρ‚Π΅Π»ΡŒΒ­Π½ΡƒΡŽ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡƒ, Π²Π°ΠΆΒ­Π½ΠΎ ΠΎΠ±Β­Ρ€Π°Β­Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΒ­ΠΌΠ°Β­Π½ΠΈΠ΅ Π½Π°Β ΠΏΡ€Π΅Β­ΠΏΠΎΒ­Π΄Π°Β­Π²Π°Β­Ρ‚Π΅Β­Π»Π΅ΠΉ, ΠΊΠΎΒ­Ρ‚ΠΎΒ­Ρ€Ρ‹Π΅ Π΅Π³ΠΎ Π²Π΅Β­Π΄ΡƒΡ‚ ΠΈΠ»ΠΈ со­зда­ва­ли для Π½Π΅Π³ΠΎ ΠΊΠΎΠ½Β­Ρ‚Π΅Π½Ρ‚,Β β€” ΠΌΠΎΠΆΒ­Π½ΠΎ ΠΏΠΎΒ­ΡΠΌΠΎΡ‚Β­Ρ€Π΅Ρ‚ΡŒ ΠΈΡ…Β ΠΏΡ€ΠΎΒ­Ρ„ΠΈΒ­Π»ΠΈ Π½Π°Β FaceΒ­book ΠΈΒ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΏΡ€ΠΎΒ­Ρ„Π΅ΡΒ­ΡΠΈΒ­ΠΎΒ­Π½Π°Π»ΡŒΒ­Π½Ρ‹ΠΉ ΠΎΠΏΡ‹Ρ‚.

Π§Ρ‚ΠΎ ка­са­Ст­ся Ρ†Π΅Π½Ρ‹, Ρ‚ΠΎΒ ΠΏΠΎΒ ΠΌΠΎΒ­Π΅Β­ΠΌΡƒ ΠΎΠΏΡ‹Β­Ρ‚Ρƒ, ка­чС­ство кур­са нС всС­гда с нСй ΠΊΠΎΡ€Β­Ρ€Π΅Β­Π»ΠΈΒ­Ρ€ΡƒΒ­Π΅Ρ‚Β β€” по­это­му ΠΎΡ€ΠΈΒ­Π΅Π½Β­Ρ‚ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒΒ­ΡΡ Π½ΡƒΠΆΒ­Π½ΠΎ Π½Π°Β Ρ‚ΠΎ, сколь­ко Π²Π°ΠΌ ΠΊΠΎΠΌΒ­Ρ„ΠΎΡ€Ρ‚Β­Π½ΠΎ ΠΏΠΎΒ­Ρ‚Ρ€Π°Β­Ρ‚ΠΈΡ‚ΡŒ Π½Π°Β ΠΎΠ±ΡƒΒ­Ρ‡Π΅Β­Π½ΠΈΠ΅.

Π’Π°ΠΊΒ­ΠΆΠ΅ сто­ит Ρ‡Ρ‘Ρ‚Β­ΠΊΠΎ ΡΡ„ΠΎΡ€Β­ΠΌΡƒΒ­Π»ΠΈΒ­Ρ€ΠΎΒ­Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ хо­чСт­ся ΠΏΠΎΒ­Π»ΡƒΒ­Ρ‡ΠΈΡ‚ΡŒ Π²Β Ρ€Π΅Β­Π·ΡƒΠ»ΡŒΒ­Ρ‚Π°Β­Ρ‚Π΅,Β β€” ΠΈΒ ΡΠ΄Π΅Β­Π»Π°Ρ‚ΡŒ это ΠΊΠ»ΡŽΒ­Ρ‡Π΅Β­Π²Ρ‹ΠΌ ΠΊΡ€ΠΈΒ­Ρ‚Π΅Β­Ρ€ΠΈΒ­Π΅ΠΌ для Π²Ρ‹Β­Π±ΠΎΒ­Ρ€Π°. Π‘Ρ‹Β­Π²Π°Β­ΡŽΡ‚ слу­чаи, ΠΊΠΎΒ­Π³Π΄Π° сту­дСн­ты при­хо­дят на курс ΠΏΠΎΒ Π°Π½Π°Β­Π»ΠΈΒ­Π·Ρƒ Π΄Π°Π½Β­Π½Ρ‹Ρ… для ΠΌΠ΅Β­Π½Π΅Β­Π΄ΠΆΠ΅Β­Ρ€ΠΎΠ² ΠΈΒ ΠΎΠΆΠΈΒ­Π΄Π°Β­ΡŽΡ‚ за­ня­тия ΠΏΠΎΒ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠΈΒ­Ρ€ΠΎΒ­Π²Π°Β­Π½ΠΈΡŽΒ β€” Π°Β ΠΈΡ…Β ΡƒΡ‡Π°Ρ‚ ΠΎΠ±Β­Ρ‰Π°Ρ‚ΡŒΒ­ΡΡ с ана­ли­ти­ка­ми ΠΈΒ Ρ€Π°ΡΒ­ΡΠΊΠ°Β­Π·Ρ‹Β­Π²Π°Β­ΡŽΡ‚ ΠΎΠ±Β­Ρ‰ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΎ, ΠΊΠ°ΠΊ Π²Π½Π΅Π΄Β­Ρ€ΡΡ‚ΡŒ Π°Π½Π°Β­Π»ΠΈΠ· Π΄Π°Π½Β­Π½Ρ‹Ρ…. Π—Π°Β­Ρ‡Π°Β­ΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΒ­Π±Π»Π΅Β­ΠΌΠ° Π½Π΅Β Π²Β ΠΏΠ»ΠΎΒ­Ρ…ΠΎΠΉ ΠΎΡ€Β­Π³Π°Β­Π½ΠΈΒ­Π·Π°Β­Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ прС­по­да­ва­тС­лях, Π°Β Π²Β Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Β­Π»ΠΎΒ­Π²Π΅ΠΊ сам Π½Π΅Β ΠΏΡ€ΠΎΒ­Π²Π΅Β­Ρ€ΠΈΠ», со­от­вСт­ству­Ст ли ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΠ° Π΅Π³ΠΎ Π·Π°Β­Π΄Π°Β­Ρ‡Π°ΠΌ. ΠŸΡ€Π°Β­Π²ΠΈΒ­Π»ΠΎ с по­ста­нов­кой Ρ†Π΅Β­Π»Π΅ΠΉ Ρ€Π°Β­Π±ΠΎΒ­Ρ‚Π°Β­Π΅Ρ‚ Π½Π΅Β Ρ‚ΠΎΠ»ΡŒΒ­ΠΊΠΎ Π½Π°Β Π²Ρ‹Β­Π±ΠΎΡ€ ΠΏΡ€ΠΎΒ­Π³Ρ€Π°ΠΌΒ­ΠΌΡ‹, Π½ΠΎΒ ΠΈΒ Π½Π°Β ΠΎΠ±ΡƒΒ­Ρ‡Π΅Β­Π½ΠΈΠ΅ Π²Β Ρ†Π΅Β­Π»ΠΎΠΌΒ β€” нС сто­ит ΠΎΡΠ²Π°Β­ΠΈΒ­Π²Π°Ρ‚ΡŒ язык про­грам­ми­ро­ва­ния, Ρ‡Ρ‚ΠΎΒ­Π±Ρ‹ ΠΏΠΎΒ­ΡΡ‚Π°Β­Π²ΠΈΡ‚ΡŒ Π³Π°Β­Π»ΠΎΡ‡Β­ΠΊΡƒ.

ВозмоТности Python 3, достойныС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠΈ пользовались / RUVDS.com corporate blog / Habr

МногиС программисты Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ со Π²Ρ‚ΠΎΡ€ΠΎΠΉ вСрсии Python Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡŽ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ довольно скоро ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Python 2 Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π°. Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ основной ΠΎΠ±ΡŠΡ‘ΠΌ Python 3-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΅ΠΌΡƒ доводилось Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, выглядит ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ со скобками, написанный Π½Π° Python 2. По Π΅Π³ΠΎ словам, ΠΎΠ½ ΠΈ сам Π³Ρ€Π΅ΡˆΠΈΡ‚ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ. Π—Π΄Π΅ΡΡŒ ΠΎΠ½ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… возмоТностСй, доступных лишь Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Python 3. Он надССтся, Ρ‡Ρ‚ΠΎ эти возмоТности ΠΎΠ±Π»Π΅Π³Ρ‡Π°Ρ‚ Тизнь Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ ΠΎ Π½ΠΈΡ… ΡƒΠ·Π½Π°Π΅Ρ‚.

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅, написаны с использованиСм Python 3.7. Π’ описании ΠΊΠ°ΠΆΠ΄ΠΎΠΉ возмоТности ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ свСдСния ΠΎ минимальной вСрсии Python, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для Π΅Ρ‘ примСнСния.

Π€ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Π΅ строки (3.6+)


Π‘Π΅Π· использования строк слоТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π½Π° любом языкС программирования. Но для эффСктивной Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½ΡƒΠΆΠ½Ρ‹ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты. Π’Π°ΠΊΠΈΠ΅ инструмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТными структурами, Π½Π΅ тСряя ΠΏΡ€ΠΈ этом Π΄ΡƒΡˆΠ΅Π²Π½ΠΎΠ³ΠΎ равновСсия. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ format:
user = "Jane Doe"
action = "buy"
log_message = 'User {} has logged in and did an action {}.'.format(
 Β user,
 Β action
)
print(log_message)
# User Jane Doe has logged in and did an action buy.

Python 3, наряду с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ format, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Π΅ строки (f-strings, f-строки). Они ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π³ΠΈΠ±ΠΊΠΈΠΉ инструмСнт для выполнСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… манипуляций со строками. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСписанный с использованиСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Ρ… строк:
user = "Jane Doe"
action = "buy"
log_message = f'User {user} has logged in and did an action {action}.'
print(log_message)
# User Jane Doe has logged in and did an action buy.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ pathlib (3.4+)


Π€ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Π΅ строки β€” Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ тСхнология, Π½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ строками, Π²Ρ€ΠΎΠ΄Π΅ ΠΏΡƒΡ‚Π΅ΠΉ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ, созданы ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ инструмСнты, сильно ΡƒΠΏΡ€ΠΎΡ‰Π°ΡŽΡ‰ΠΈΠ΅ манипуляции с Π½ΠΈΠΌΠΈ. Π’ Python 3 имССтся ΠΌΠΎΠ΄ΡƒΠ»ΡŒ pathlib, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдставляСт собой ΡƒΠ΄ΠΎΠ±Π½ΡƒΡŽ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с путями ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ. Если Π²Ρ‹ ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² полСзности этого модуля для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π²Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡ β€” взглянитС Π½Π° этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π».
from pathlib import Path
root = Path('post_sub_folder')
print(root)
# post_sub_folder
path = root / 'happy_user'
# Π”Π΅Π»Π°Π΅ΠΌ ΠΏΡƒΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ
print(path.resolve())
# /home/weenkus/Workspace/Projects/DataWhatNow-Codes/how_your_python3_should_look_like/post_sub_folder/happy_user

Аннотации Ρ‚ΠΈΠΏΠΎΠ² (3.5+)


Π§Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ β€” статичСская ΠΈΠ»ΠΈ динамичСская типизация? ΠŸΠΎΠΆΠ°Π»ΡƒΠΉ, ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ программист ΠΈΠΌΠ΅Π΅Ρ‚ собствСнный ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° этот нСпростой вопрос. Π― ΠΎΡΡ‚Π°Π²Π»ΡΡŽ Π½Π° усмотрСниС Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ свои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Но я ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ всСм ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ хотя Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python 3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ².
def sentence_has_animal(sentence: str) -> bool: Β return "animal" in sentence sentence_has_animal("Donald had a farm without animals") # True

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ (3.4+)


Python 3 ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚, благодаря классу Enum, простой ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с пСрСчислСниями. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для хранСния списков констант. ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ бСспорядочно разбросанными Π² ΠΊΠΎΠ΄Π΅.
from enum import Enum, auto
class Monster(Enum):
 Β Β Β ZOMBIE = auto()
 Β Β Β WARRIOR = auto()
 Β Β Β BEAR = auto()
 Β Β Β 
print(Monster.ZOMBIE)
# Monster.ZOMBIE

Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ Python 3 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ пСрСчислСниС β€” это Π½Π°Π±ΠΎΡ€ символичСских ΠΈΠΌΡ‘Π½ (Ρ‡Π»Π΅Π½ΠΎΠ²), привязанных ΠΊ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ значСниям. Π§Π»Π΅Π½Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ пСрСчислСния ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ.
for monster in Monster:
 Β Β Β print(monster)
# Monster.ZOMBIE
# Monster.WARRIOR
# Monster.BEAR

ВстроСнный LRU-кэш (3.2+)


Π’ наши Π΄Π½ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ практичСски Π²ΠΎ всСх ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… систСмах. Python 3 Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ благодаря Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρƒ lru_cache, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ LRU-ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ (Least Recently Used).

НиТС ΠΏΠΎΠΊΠ°Π·Π°Π½Π° функция, которая вычисляСт числа Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. Π­Ρ‚Π° функция Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π· Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ…ΠΎΠ΄Π΅ рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ оказываСтся, Ρ‡Ρ‚ΠΎ Π΅Ρ‘ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ благодаря ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ.

import time
def fib(number: int) -> int:
 Β Β Β if number == 0: return 0
 Β Β Β if number == 1: return 1
 Β Β Β 
 Β Β Β return fib(number-1) + fib(number-2)
start = time.time()
fib(40)
print(f'Duration: {time.time() - start}s')
# Duration: 30.684099674224854s

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ lru_cache для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (такая Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ называСтся ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΈΠ·ΠΌΠ΅Ρ€ΡΠ»ΠΎΡΡŒ сСкундами, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ измСряСтся наносСкундами.
from functools import lru_cache @lru_cache(maxsize=512) def fib_memoization(number: int) -> int: Β Β Β if number == 0: return 0 Β Β Β if number == 1: return 1 Β Β Β  Β Β Β return fib_memoization(number-1) + fib_memoization(number-2) start = time.time() fib_memoization(40) print(f'Duration: {time.time() - start}s') # Duration: 6.866455078125e-05s

Распаковка ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (3.0+)


ΠŸΡ€ΠΈ распаковкС ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ставят Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΡƒ. Π’ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ всё Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π’Π°ΠΊ, Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ head ΠΈ tail ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΈ послСднСС значСния ΠΈΠ· списка, сформированного ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ range(5). Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ body ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ всё Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ находится ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΈ послСдним Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.
head, *body, tail = range(5)
print(head, body, tail)
# 0 [1, 2, 3] 4
py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
print(py)
print(filename)
print(cmds)
# python3.7
# script.py
# ['-n', '5', '-l', '15']
first, _, third, *_ = range(10)
print(first, third)
# 0 2

ΠšΠ»Π°ΡΡΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… (3.7+)


Π’ Python 3 появились классы Π΄Π°Π½Π½Ρ‹Ρ… (data classes). Они Π΄Π°ΡŽΡ‚ программисту достаточно Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ свободу дСйствий. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ ΠΎΠ±ΡŠΡ‘ΠΌΠ° шаблонного ΠΊΠΎΠ΄Π°. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ dataclass автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ __init__() ΠΈ __repr__(). Π’ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ тСкстС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСдлоТСния ΠΎΠ½ΠΈ описаны ΠΊΠ°ΠΊ «измСняСмыС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽΒ». Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ создания класса Π±Π΅Π· использования Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π° dataclass:
class Armor:
 Β Β Β 
 Β Β Β def __init__(self, armor: float, description: str, level: int = 1):
 Β Β Β Β Β Β Β self.armor = armor
 Β Β Β Β Β Β Β self.level = level
 Β Β Β Β Β Β Β self.description = description
 Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β 
 Β Β Β def power(self) -> float:
 Β Β Β Β Β Β Β return self.armor * self.level
 Β Β Β 
armor = Armor(5.2, "Common armor.", 2)
armor.power()
# 10.4
print(armor)
# <__main__.Armor object at 0x7fc4800e2cf8>

Π’ΠΎΡ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΡƒΠΆΠ΅ написанноС с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ dataclass:
from dataclasses import dataclass
@dataclass
class Armor:
 Β Β Β armor: float
 Β Β Β description: str
 Β Β Β level: int = 1
 Β Β Β 
 Β Β Β def power(self) -> float:
 Β Β Β Β Β Β Β return self.armor * self.level
 Β Β Β 
armor = Armor(5.2, "Common armor.", 2)
armor.power()
# 10.4
print(armor)
# Armor(armor=5.2, description='Common armor.', level=2)

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠ°ΠΏΠΎΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π±Π΅Π· Ρ„Π°ΠΉΠ»Π° __init__.py (3.3+)


Один ΠΈΠ· способов структурирования Python-ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² (ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» __init__.py). Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:
sound/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠ°ΠΊΠ΅Ρ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня
 Β Β Β Β Β __init__.py Β Β Β Β Β Β Β Β Β Β Β Β Β Β Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π° sound
 Β Β Β Β Β formats/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для прСобразования Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²
 Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β wavread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β wavwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β aiffread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β aiffwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β auread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β auwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...
 Β Β Β Β Β effects/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… эффСктов
 Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β echo.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β surround.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β reverse.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...
 Β Β Β Β Β filters/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²
 Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β equalizer.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β vocoder.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β karaoke.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...

ΠŸΡ€ΠΈ использовании Python 2 Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ, упомянутых Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Π» Π±Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» __init__.py. Благодаря этому Ρ„Π°ΠΉΠ»Ρƒ ΠΏΠ°ΠΏΠΊΠ° воспринимаСтся Π² Π²ΠΈΠ΄Π΅ Python-ΠΏΠ°ΠΊΠ΅Ρ‚Π°. Π’ Python 3, с появлСниСм возмоТности Implicit Namespace Packages, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² большС Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.
sound/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠ°ΠΊΠ΅Ρ‚ Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня
 Β Β Β Β Β __init__.py Β Β Β Β Β Β Β Β Β Β Β Β Β Β Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠ°ΠΊΠ΅Ρ‚Π° sound
 Β Β Β Β Β formats/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для прСобразования Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²
 Β Β Β Β Β Β Β Β Β Β Β Β Β wavread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β wavwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β aiffread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β aiffwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β auread.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β auwrite.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...
 Β Β Β Β Β effects/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… эффСктов
 Β Β Β Β Β Β Β Β Β Β Β Β Β echo.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β surround.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β reverse.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...
 Β Β Β Β Β filters/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠŸΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ‚ для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²
 Β Β Β Β Β Β Β Β Β Β Β Β Β equalizer.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β vocoder.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β karaoke.py
 Β Β Β Β Β Β Β Β Β Β Β Β Β ...

Надо ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ всё Π½Π΅ Ρ‚Π°ΠΊ просто. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Π² соотвСтствии с этой ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ спСцификациСй, Ρ„Π°ΠΉΠ» __init__.py всё Π΅Ρ‰Ρ‘ Π½ΡƒΠΆΠ΅Π½ для ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ². Если ΡƒΠ±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ, Ρ‚ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚ прСвращаСтся Π² Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ пространства ΠΈΠΌΡ‘Π½, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ограничСния.

Π˜Ρ‚ΠΎΠ³ΠΈ


Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ рассмотрСны Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС интСрСсныС возмоТности Python 3, Π½ΠΎ ΠΌΡ‹ надССмся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ нашли здСсь Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅. Код ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² этом Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! КакиС возмоТности Python 3 Π²Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π±Ρ‹ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Ρ‹ΠΉ здСсь список?

Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Python?

Π£ вас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ: Π²Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»ΠΈ курсы, ΠΈΠ»ΠΈ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ ΠΊΠ½ΠΈΠ³Ρƒ, которая Π΄Π°Π΅Ρ‚ Π²Π°ΠΌ Π±Π°Π·Ρƒ для программирования Π² Python. Π’Ρ‹ освоили списки, словари, классы, ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ.

ΠœΡ‹ собрали ВОП Книг для Python программиста ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ быстро ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ язык программирования Python. Бписок ΠΊΠ½ΠΈΠ³: Книги ΠΏΠΎ Python

И Ρ‡Ρ‚ΠΎ дальшС?

Python – это ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык программирования, с плСядой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π²ΠΎ всСх Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… сфСрах. Если Π²Ρ‹ освоили основы Python, ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΠΌ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ – Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ шаг слСдуСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим нСсколько Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², рСсурсов ΠΈ руководств, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для создания Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π² Python.

Π§Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π΅Π»Π°ΡŽΡ‚ Π² Python?

Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ люди ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π² Python Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ? Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π±Ρ‹ΡΡ‚Ρ€Π΅Π½ΡŒΠΊΠΎ пройдСмся ΠΏΠΎ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌ компаниям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΉ язык.

Google, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, использовали Python с самого Π½Π°Ρ‡Π°Π»Π°, ΠΈ сСгодня ΠΎΠ½ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСсто Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… Π³ΠΈΠ³Π°Π½Ρ‚ΠΎΠ² срСди языков, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ сторону. Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум, Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ ΠΏΠΎΠΆΠΈΠ·Π½Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΈΠΊΡ‚Π°Ρ‚ΠΎΡ€ Python (ΡƒΠΆΠ΅ Π½Π΅Ρ‚) Π΄Π°ΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π» Π½Π°ΠΌ Π½Π° протяТСнии Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π»Π΅Ρ‚, наблюдая Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ развиваСтся язык.

Π’ Instagram Π»ΡŽΠ±ΡΡ‚ Python Π·Π° Π΅Π³ΠΎ простоту. БСрвис извСстСн «самым большим Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Django, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ написан Π½Π° PythonΒ».

Spotify ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ язык ΠΈΠ·-Π·Π° Π΅Π³ΠΎ сСрвисов Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ бэкСнда. Богласно ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², простота использования Python позволяСт Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ молниСносной скорости Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Spotify выполняСт Ρ‚ΠΎΠ½Π½Ρ‹ Π°Π½Π°Π»ΠΈΠ·ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ своим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ быстро. Python – это Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅!

Π§Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Python?

Начиная с Π²Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π°ΡƒΡ‡Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΏΡ€., прилоТСния Python Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π³Ρ€Π°Π½ΠΈΡ†. Рассмотрим нСсколько ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ ваши Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Python.

#1: Автоматизация Π½ΡƒΠ΄Π½Ρ‹Ρ… Π΄Π΅Π»

Π­Ρ‚ΠΎ рСсурс ΠΏΠΎ «практичСскому ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…Β». Как ΠΈ говорится Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅, с этой ΠΊΠ½ΠΈΠ³ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ скучныС процСссы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ элСктронных Ρ‚Π°Π±Π»ΠΈΡ†, ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π­Ρ‚ΠΎ отличная отправная Ρ‚ΠΎΡ‡ΠΊΠ° для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ ΡƒΠΆΠ΅ освоил основы Python.Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с Python?

Π£ вас Π±ΡƒΠ΄Π΅Ρ‚ шанс ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π²Ρ‹ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, создавая словари, проводя скрСйпинг сайтов, работая с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ создавая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ классы. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ прилоТСния, Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ Π² этой ΠΊΠ½ΠΈΠ³Π΅ Π΄Π°Π΄ΡƒΡ‚ Π²Π°ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ.

#2: Π”Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€ΡƒΠΊΡƒ Π½Π° курсС Π‘ΠΈΡ‚ΠΊΠΎΠΈΠ½Π°

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ сСгодня ΠΎ Bitcoin Python говорят всС. Π‘ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΊΠ°ΠΊ Π² Π΄Π΅ΠΊΠ°Π±Ρ€Π΅ 2017, ΠΊΠΎΠ³Π΄Π° курс ΠΏΠΎΡ‡Ρ‚ΠΈ поднялся Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠΈ Π² 20Β 000 Π΄ΠΎΠ»Π»Π°Ρ€ΠΎΠ², ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚Π° стала Π½Π° слуху Ρƒ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ². Π¦Π΅Π½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΠ»Π΅Π±Π°Ρ‚ΡŒΡΡ, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ инвСстиции цСлСсообразными.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±ΠΎΠ³Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ Π·ΠΎΠ»ΠΎΡ‚Π΅ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг, Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎ Π»ΡƒΡ‡ΡˆΠΈΡ… Ρ†Π΅Π½Π°Ρ… Π½Π° bitcoin. Π­Ρ‚ΠΎ руководство ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒ вас, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ систСму ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΎ курсС Bitcoin.

Основа этого ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° – это созданиС IFTTT (if this, then that) Π°ΠΏΠΏΠ»Π΅Ρ‚ΠΎΠ². Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ requests для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ запросов HTTP ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ webhook для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ вашСго прилоТСния ΠΊ внСшним сСрвисам.

Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ – отличная отправная Ρ‚ΠΎΡ‡ΠΊΠ° для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ питониста, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заинтСрСсован Π² ΠΊΡ€ΠΈΠΏΡ‚Π΅. БСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ построитС с Π΄Π°Π½Π½Ρ‹ΠΌ руководством ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ ΠΏΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°Π»ΡŽΡ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ рассматриваСтС Ethereum – Π΄Π²Π΅Ρ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹!

#3: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π°

Π­Ρ‚ΠΎΡ‚ простой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ – ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ шлюз Π² ΠΌΠΈΡ€Π΅ GUI программирования. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π΅ΠΊΠ΅Π½Π΄ сСрвисов – это ваТная Ρ‡Π°ΡΡ‚ΡŒ развСртывания, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²ΠΎ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ – это пСрвостСпСнная Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ.

Если Π²Π°ΠΌ интСрСсСн UX\UI Π΄ΠΈΠ·Π°ΠΉΠ½, Ρ‚ΠΎ это руководство Π²Π°ΠΌ понравится. Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ tkinter, стандартным ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠΌ графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ поставляСтся вмСстС с Python.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ tkinter – это ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° Π²ΠΎΠΊΡ€ΡƒΠ³ Tcl/Tk, комбинация скриптового языка Tcl ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса Tk. Если Ρƒ вас Π΅ΡΡ‚ΡŒ установлСнный Python, Ρ‚ΠΎ Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΊ использованию tkinter. Π’Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ простой Π²Ρ‹Π·ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ:

<span>from</span> <span>tkinter</span> <span>import</span> <span>*</span>

<span>from</span> <span>tkinter</span> <span>import</span> <span>*</span>

ПослС провСдСния установки, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с постройкой своСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ GUI ΠΊΠ°Π»ΡŒΠΊΡƒΠ»ΡΡ‚ΠΎΡ€Π° Π² Python.
ΠŸΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΠΉΡ‚Π΅ΡΡŒ Π² использовании модуля tkinter ΠΈ Π½Π°Π±Π»ΡŽΠ΄Π°ΠΉΡ‚Π΅ Π·Π° Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ вашС видСньС матСриализуСтся Π½Π° экранС. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΎΠΊΡ€Π΅ΠΏΠ½Π΅Ρ‚Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ GUI инструмСнтами Python. ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ ΠΊ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ GUI программирования Π² Python для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

#4: Майнинг Π΄Π°Π½Π½Ρ‹Ρ… Twitter

Благодаря ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ, ΠΈ (всС Ρ‡Π°Ρ‰Π΅ ΠΈ Ρ‡Π°Ρ‰Π΅) ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ Π²Π΅Ρ‰Π΅ΠΉ (IoT) – Ρƒ нас Π΅ΡΡ‚ΡŒ доступ ΠΊ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠΌΡƒ количСству Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ ΠΌΠ΅Ρ‡Ρ‚Π°Ρ‚ΡŒ всСго Π΄Π΅ΡΡΡ‚ΡŒ Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄. Аналитика – это огромная Ρ‡Π°ΡΡ‚ΡŒ любой сфСры, которая связана с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. О Ρ‡Π΅ΠΌ люди Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°ΡŽΡ‚? КакиС ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π²ΠΈΠ΄Π½Ρ‹ Π² ΠΈΡ… ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ?

Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€ – ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠ΅ мСсто, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы. Если Π²Π°ΠΌ интСрСсСн Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠ³Π΄Π° ΠΌΠ°ΠΉΠ½ΠΈΠ½Π³ Π΄Π°Π½Π½Ρ‹Ρ… Π² Twitter – ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ способ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ свои Π½Π°Π²Ρ‹ΠΊΠΈ Π² Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° вопросы ΠΎΠ± ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΌ ΠΌΠΈΡ€Π΅.

Π’ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ пособии ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ настроСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² срСдС docker. Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ вмСстС с Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€ΠΎΠΌ, это ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π²Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹ΠΌ API.

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Tweepy для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Ρ‚Π²ΠΈΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Ρ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ, TextBlob для подсчСта настроСния этих Ρ‚Π²ΠΈΡ‚ΠΎΠ², Elasticsearch для Π°Π½Π°Π»ΠΈΠ·Π° содСрТимого этих Ρ‚Π²ΠΈΡ‚ΠΎΠ² ΠΈ Kibana для ΠΏΠΎΠΊΠ°Π·Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ руководства, Π²Ρ‹ ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π½ΡΡ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Python для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкстов ΠΈ распознавания Ρ€Π΅Ρ‡ΠΈ.

#5: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΌΠΈΠΊΡ€ΠΎΠ±Π»ΠΎΠ³Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Flask

ΠŸΠΎΡ…ΠΎΠΆΠ΅, Ρ‡Ρ‚ΠΎ Ρƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сСгодня Π΅ΡΡ‚ΡŒ Π±Π»ΠΎΠ³, ΠΈ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ собствСнный ΡƒΡŽΡ‚Π½Ρ‹ΠΉ Ρ…Π°Π± ΠΎΠ½Π»Π°ΠΉΠ½. Π‘ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ΠΌ Twitter ΠΈ Instagram, ΠΌΠΈΠΊΡ€ΠΎΠ±Π»ΠΎΠ³ΠΈ стали Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ популярными. Π’ этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ МигСля Π“Ρ€ΠΈΠ½Π΅Ρ€Π³Π°, Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ собствСнный ΠΌΠΈΠΊΡ€ΠΎΠ±Π»ΠΎΠ³.

Он называСтся «МСга-руководство FlaskΒ», ΠΈ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ соотвСтствуСт названию. ΠŸΡ€ΠΎΡ€Π°Π±ΠΎΡ‚Π°Π² 23 Π³Π»Π°Π²Ρ‹, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ прСдставлСниС ΠΎ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Flask. К ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹ смоТСтС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
Π’Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎ Flask, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π΄Π΅Π»Ρƒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это идСально для Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΠ³ΠΎ Ρ‡Π΅ΡˆΡƒΡ‚ΡΡ Ρ€ΡƒΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Π²Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅.

Руководство Π½Π΅Π΄Π°Π²Π½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΎ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΡΡ‚Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠΈΠΌ Π²Π΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π΅Π³ΠΎ бСсплатно ΠΎΠ½Π»Π°ΠΉΠ½, ΠΊΡƒΠΏΠΈΡ‚ΡŒ экзСмпляр Π² Amazon, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ с Π°Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΠΎ ΠΎΠ½Π»Π°ΠΉΠ½ курсу пошагово. ПослС окончания курса, Π²Ρ‹ смоТСтС ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ Django ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½Ρ‹Π΅ Π²Π΅Π± прилоТСния.

#6: Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Π°

Π₯отя Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ Π² основном разрабатываСтся ΠΊΠ°ΠΊ финансовая тСхнология, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Π‘Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ практичСски Π²ΠΎ всСх транзакциях: ΠΎΡ‚ сдСлок с Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΎΡΡ‚ΡŒΡŽ, Π΄ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ мСдицинских ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ².

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, построив свой Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½! Руководство Hackernoon ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ с нуля. К ΠΊΠΎΠ½Ρ†Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ прСдставлСниС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ эта тСхнология Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΉ.

Π’Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с HTTP ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ requests. ПослС установки Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ° Flask, Π²Ρ‹ смоТСтС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запросы HTTP ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ со своим Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ΠΎΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Π±Π»ΠΎΠΊΡ‡Π΅ΠΉΠ½ – это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ„Π°Π½Π°Ρ‚ΠΎΠ² ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ²Π°Π»ΡŽΡ‚Ρ‹. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΠ² Ρ‚Π°ΠΊΠΎΠΉ самим, Π²Ρ‹ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΡ€Π΅Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅ΠΉ вас области.

#7: РазбираСмся с Π»Π΅Π½Ρ‚ΠΎΠΉ Twitter

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΡƒΠ΅Ρ‚ постройка Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ увСрСнности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ΅Π³Π°-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚? НС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡ‚Π΅ΡΡŒ, ΠΌΡ‹ ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ»ΠΈ для вас. Π‘ Π½Π°ΠΌΠΈ Π²Ρ‹ смоТСтС Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ простоС Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ всСго Π·Π° нСсколько часов.

Π‘ΠΎΠ± БСлдСрброс дСлится кСйсом, Π³Π΄Π΅ ΠΎΠ½ создал 40th PyBites Code Challenge, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ участникам Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ простоС Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ Π»Π΅Π½Ρ‚Π΅ новостСй Daily Python Tip Π² Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π΅. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‡Π΅Π»Π΅Π½Π΄ΠΆΠ° ΠΈ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с ΠΊΠΎΠ΄ΠΎΠΌ.

ВмСсто Flask, Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΈΠΊΡ€ΠΎ Π²Π΅Π±-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Bottle. Он славится Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ являСтся слабо зависимым Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ для быстрого создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΈΠΌ ΠΈ простым Π² использовании, Π²Ρ‹ смоТСтС ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ практичСски ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ.
Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ смоТСтС Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ Tweepy, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· API Π’Π²ΠΈΡ‚Ρ‚Π΅Ρ€Π°. Π’Ρ‹ смоТСтС Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π±Π°Π·Π΅ SQLAlchemy ΠΈΠ»ΠΈ Peewee, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒ Π² запросах SQL.

#8: Π˜Π³Ρ€Π°ΠΉΡ‚Π΅ Π² PyGames

Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ вСсСло провСсти врСмя. Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для написания Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π°Ρ€ΠΊΠ°Π΄Π½Ρ‹Ρ… ΠΈΠ³Ρ€, Π°Π΄Π²Π΅Π½Ρ‡ΡƒΡ€ ΠΈ ΠΏΠ°Π·Π»ΠΎΠ², Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΉΠ΄Π΅Ρ‚ всСго нСсколько Π΄Π½Π΅ΠΉ. К классичСским ΠΈΠ³Ρ€Π°ΠΌ, Ρ‚ΠΈΠΏΠ° ΠΏΠΈΠ½Π³-ΠΏΠΎΠ½Π³Π° Π²Ρ‹ смоТСтС ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ, ΠΊΠΎΠ³Π΄Π° освоитС Π½ΠΎΠ²Ρ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ программирования.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Pygame Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ собствСнных ΠΈΠ³Ρ€. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя практичСски всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ³Ρ€.

Pygame ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСсплатный ΠΈ находится Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ доступС. Он Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ со Π·Π²ΡƒΠΊΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для внСдрСния ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° Π² вашС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Π’Π°ΠΌ доступны дСсятки ΠΈΠ³Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π§Ρ‚ΠΎ-Π±Ρ‹ Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, чувствуйтС сСбя ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ ΠΈ Π΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими Ρ€Π°Π±ΠΎΡ‚Π°ΠΌΠΈ Π² сообщСствС Pygame!

#9:Β Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ своС собствСнноС ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Если Π²Π°ΠΌ большС ΠΏΠΎ Π΄ΡƒΡ…Ρƒ повСствованиС, Ρ‚ΠΎ Ρƒ вас всС Π΅Ρ‰Π΅ масса инструмСнтов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΊΡ€ΡƒΡ‚ΠΎΠ΅ Π² Python.
Π―Π·Ρ‹ΠΊ ΠΎΡ‡Π΅Π½ΡŒ прост для написания, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ идСальной срСдой для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΈΠ²Π°. Π‘ этим бСсплатным руководством, Π²Ρ‹ смоТСтС пошагово ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с написаниСм тСкстовых ΠΈΠ³Ρ€ Π² Python.

Руководство ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ программирования Π² Python, ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ мост ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΈ Π½Π΅ΠΈΠ·Π²Π΅Π΄Π°Π½Π½Ρ‹ΠΌΠΈ зСмлями для построСния прилоТСния.

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваша история Π²Ρ‹ΡˆΠ»Π° Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΈΠΆΠΎΠΊ, Π²Ρ€ΠΎΠ΄Π΅ RenPy, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π·Π²ΡƒΠΊΠΈ ΠΈ изобраТСния Π² Π²Π°ΡˆΡƒ ΠΈΠ³Ρ€Ρƒ, создав Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΡƒΡŽ Π½ΠΎΠ²Π΅Π»Π»Ρƒ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ΠΌ. (ПослС этого, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ³Ρ€Ρƒ Π² Steam ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΎΠ½Π° расходится! Π›ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π² ΠΎ вашСй Ρ€Π°Π±ΠΎΡ‚Π΅ – ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ собствСнный Ρ€Π΅Π»ΠΈΠ· Π½Π° ΠΌΠΈΡ€ΠΎΠ²ΠΎΠΌ Ρ€Ρ‹Π½ΠΊΠ΅.)

#10: Π‘ΠΊΠ°ΠΆΠΈΡ‚Π΅ β€œΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!” ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΡŽ

МашинноС ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ Π² ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°. Однако, Π² этой сфСрС Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒΡΡ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° постоянно развиваСтся ΠΈ мСняСтся.
К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² вашСм распоряТСнии ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ ΠΎΠ½Π»Π°ΠΉΠ½ рСсурсы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒΡΡ, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π½Ρ‹Ρ€Π½ΡƒΡ‚ΡŒ с Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ Π² ΠΌΠΈΡ€ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ data science. Π­Ρ‚ΠΎ руководство создано ДТСйсоном Π‘Ρ€Π°ΡƒΠ½Π»ΠΈ, ΠΈ являСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² использованиС Python для машинного обучСния.

Π’Ρ‹ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΎ ряду Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² машинного обучСния, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π² составлСнии ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΎΠ².

Руководство ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΈ Π² Π½Π΅ΠΌ Π»Π΅Π³ΠΊΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ всСго Π·Π° нСсколько часов. По ΠΎΠΊΠΎΠ½Ρ‡Π°Π½ΠΈΡŽ курса, Ρƒ вас Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Python Π² Π½Π°ΡƒΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Ρ….

Когда Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Ρ‹Ρ€ΡΡ‚ΡŒ с Π³ΠΎΠ»ΠΎΠ²ΠΎΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с этими руководствами, Π³Π΄Π΅ Π²Ρ‹ смоТСтС Π½Π°ΡƒΡ‡ΠΈΡ‚ΡŒΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠΈ, ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Ρ‡ΡŒ ΠΈ Π»ΠΈΡ†Π°, ΠΈ всС это Π² Python!

#11: БросаСм Π²Ρ‹Π·ΠΎΠ²!

Если Π²Ρ‹ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΎΠΊΡƒΠ½Π°Ρ‚ΡŒΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, упомянутыС Ρ€Π°Π½Π΅Π΅, ΠΏΡ€ΠΈ этом ΠΌΠ΅Π»ΠΊΠΈΠ΅ вас Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ: Π° Ρ‡Π΅ΠΌ Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΡΡ‚ΡŒΡΡ?

ΠšΠΎΠ΄Π΅Ρ€ΡΠΊΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠΎΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π½Π°Π²Ρ‹ΠΊΠ°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Python ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ повСрхностноС прСдставлСниС ΠΎΠ±ΠΎ всСм спСктрС Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Python,
ΠŸΡ€ΠΎΡ‰Π΅ говоря: Π²Π°ΠΌ прСдоставят ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Python.

Π£ вас Π±ΡƒΠ΄Π΅Ρ‚ шанс Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ смысл для вас, ΠΏΡ€ΠΈ этом Ρƒ вас Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² язык Python ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ подсказок. Π’Π°ΠΊ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ прСдставлСниС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

ΠšΠΎΠ΄ΠΎΠ²Ρ‹Π΅ Ρ‡Π΅Π»Π΅Π½Π΄ΠΆΡ‹ – это Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ способ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ наибольшСС количСство Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ². Π’Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π°Ρ†Π΅ΠΏΠΈΡ‚ ваш интСрСс, ΠΈ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π΅Π»ΡΡ‚ΡŒ этому свободноС врСмя. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ этому списку ΠΈ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π°ΠΆΠ³Π»ΠΎ Π² вас интСрСс, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ использовали это Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· Ρ‡Π΅Π»Π΅Π½Π΄ΠΆΠ΅ΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ свои силы:

  • Python Challenge. Π‘ΠΎΠ»Π΅Π΅ 20 доступных ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ простыС скрипты Π² Python, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. По ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Ρƒ Π΅ΡΡ‚ΡŒ разбросанныС подсказки, Π½ΠΎ ΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ!
  • PyBites Code Challenge. Π’ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя 50 Π·Π°Π΄Π°Ρ‡, ΠΈ количСство растСт! Π­Ρ‚ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² Python для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Если Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… Π·Π°Π΄Π°Ρ‡Π°Ρ… ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ вмСсто ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Ρ… инструкций, Ρ‚ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ лишним ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ рСсурс.

Книга Python Tricks – это ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ источник ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ. Π’ ΠΊΠ½ΠΈΠ³Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ малоизвСстныС части Python, Π½Π° основании ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π°Π΄Π°Ρ‡ΠΈ.

Π§Π΅Π³ΠΎ (скорСС всСго) Π½Π΅ стоит Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Python?

ΠžΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Python – Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ язык, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ массу Π²Π΅Ρ‰Π΅ΠΉ. Но Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π΅Π»Π°Ρ‚ΡŒ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ всё. ЀактичСски, Π΅ΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ сфСры, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Python Π½Π΅ рассчитан.

Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ языка, Ρƒ Python Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со взаимодСйствия с Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ устройствами, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π°ΠΌΠΈ устройств. НапримСр, Ρƒ вас Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Python. Π’Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΅Π³ΠΎ с Π‘ ΠΈΠ»ΠΈ Π‘++ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Однако, Π΄Π°ΠΆΠ΅ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π½Π΅ Π΄ΠΎΠ»Π³ΠΎ. Π’ качСствС подтвСрТдСния гибкости Python, Π΅ΡΡ‚ΡŒ люди, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π°Π΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ ΡŽΠ·Π°Π±ΠΈΠ»ΠΈΡ‚ΠΈ Python для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… взаимодСйствий. MicroPython – это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ возмоТности Python.

Π§Ρ‚ΠΎ Ссли вашСй ΠΈΠ΄Π΅ΠΈ Π½Π΅Ρ‚ Π² этом спискС?

НичСго ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ! Π­Ρ‚ΠΎΡ‚ список вряд Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΌ: сущСствуСт ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство Π΄Ρ€ΡƒΠ³ΠΈΡ… инструмСнтов ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π² Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π½Π΅ рассмотрСли Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅. НС Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ваши ΠΈΠ΄Π΅ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠ°ΠΊ-Π»ΠΈΠ±ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½Ρ‹ΠΌ списком. Π­Ρ‚ΠΎ просто Π±Π°Π·Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ.

Π’ этом Π²ΠΈΠ΄Π΅ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡ‡Π΅Ρ€ΠΏΠ½ΡƒΡ‚ΡŒ нСсколько ΠΈΠ΄Π΅ΠΉ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Python Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π°Ρ‚ΠΎΡ‡Π΅Π½. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Π΄Π°Π½Π½Ρ‹ΠΌ постом Π² Π±Π»ΠΎΠ³Π΅, Π°Π²Ρ‚ΠΎΡ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ подсказываСт, Π³Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ для Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Python.
НаконСц, Π²Ρ‹ Π²ΠΎΠ»ΡŒΠ½Ρ‹ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΠΌ интСрСсны.

Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ дальшС?

Ну, Π²ΠΎΡ‚ ΠΈ всС! ΠžΠ΄ΠΈΠ½Π½Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΏΡƒΡ‚Π΅ΠΉ ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π² Python Π΄ΠΎ ΠΏΡ€ΠΎΠΆΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ питониста!
НСваТно, с Ρ‡Π΅Π³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ, Π²Π°ΠΌ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ бСсчислСнныС проспСкты для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π°ΡˆΠΈΡ… Π½Π°Π²Ρ‹ΠΊΠΎΠ² программирования. НачинайтС с Ρ‡Π΅Π³ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ! Родилась идСя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚ Π² этом спискС? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях! Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ для программиста-ΠΏΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠ°.

Если Π²Ρ‹ застряли ΠΈ ΠΈΡ‰Π΅Ρ‚Π΅ Ρ‚ΠΎΠ»Ρ‡ΠΎΠΊ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎΠ± этом! ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ.

Если Π²Ρ‹ ΠΈΡ‰Π΅Ρ‚Π΅ способ Π·Π°Π΄Π°Ρ‚ΡŒ вопрос ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ быстрый ΠΎΡ‚Π²Π΅Ρ‚ ΠΎΡ‚ профСссионалов – Python Π€ΠΎΡ€ΡƒΠΌ всСгда свободСн. Π­Ρ‚ΠΎ частноС сообщСство ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ с Ρ‚Π΅ΠΌΠΈ, ΠΊΡ‚ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· возникшиС стСны, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°Ρ‚ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ, работая Π² Pyhton.

Python β€” это ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? / RUVDS.com corporate blog / Habr

Π’ послСднСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рост популярности языка программирования Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DevOps, Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π² сфСрС бСзопасности ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Но Π²ΠΎΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒβ€¦ Π—Π΄Π΅ΡΡŒ этому языку ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Ρ‡Π΅ΠΌ. Автор ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python ΠΈ Π½Π°ΠΉΡ‚ΠΈ срСдства Π΅Π³ΠΎ ускорСния.



ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния


Как Java, Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, соотносится с C ΠΈΠ»ΠΈ C++? Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ C# ΠΈ Python? ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… исслСдоватСлСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НС сущСствуСт идСального Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, Π½ΠΎ, изучая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ The Computer Language Benchmarks Game.

Π― ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° The Computer Language Benchmarks Game ΡƒΠΆΠ΅ большС дСсяти Π»Π΅Ρ‚. Python, Π² сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Java, C#, Go, JavaScript, C++, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ…. Бюда входят языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компиляция (C#, Java), ΠΈ AOT-компиляция (C, C++), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ JavaScript.

Π’ΡƒΡ‚ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ говоря Β«PythonΒ», я имСю Π² Π²ΠΈΠ΄Ρƒ ΡΡ‚Π°Π»ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python β€” CPython. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ коснёмся ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. БобствСнно говоря, здСсь ΠΌΠ½Π΅ хочСтся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Python трСбуСтся Π² 2-10 Ρ€Π°Π· большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам, Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сопоставимых Π·Π°Π΄Π°Ρ‡, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ быстрСС.

Π’ΠΎΡ‚ основныС Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python:

  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого β€” Π² GIL (Global Interpreter Lock, глобальная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°).
  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python β€” это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык.
  • ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° β€” Π² динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ эти ΠΈΠ΄Π΅ΠΈ ΠΈ попытаСмся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сильнСС всСго ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

GIL


Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ многоядСрными процСссорами, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ многопроцСссорныС систСмы. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю эту Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΌΠΎΡ‰ΡŒ, опСрационная систСма примСняСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ структуры, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ процСссы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” процСсс Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome) ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ процСсс особСнно сильно нуТдаСтся Π² рСсурсах процСссора, Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ядрами, Ρ‡Ρ‚ΠΎ позволяСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ быстрСС Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ.

НапримСр, Ρƒ ΠΌΠΎΠ΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome, Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° я это ΠΏΠΈΡˆΡƒ, имССтся 44 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡƒΡ‚ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ структура ΠΈ API систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ различаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, основанных Π½Π° Posix (Mac OS, Linux), ΠΈ Π² ОБ сСмСйства Windows. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, занимаСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Если Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹ Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ сСйчас Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (locks). Бмысл Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы, ΠΊΠΎΠ³Π΄Π°, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² памяти, доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти (для чтСния ΠΈΠ»ΠΈ измСнСния) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Когда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython создаёт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ подсчитываСт количСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ссылок Π½Π° эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π­Ρ‚Π° концСпция извСстна ΠΊΠ°ΠΊ подсчёт ссылок (reference counting). Если число ссылок равняСтся Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ участок памяти освобоТдаСтся. ИмСнно поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС Β«Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, скаТСм, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… областСй видимости Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти, потрСбляСмого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ совмСстно ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ CPython выполняСт подсчёт ссылок. Π’ΡƒΡ‚ ΠΈ проявляСтся дСйствиС «глобальной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Β», которая Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π° Ρ€Π°Π·, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² имССтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

β–ΠšΠ°ΠΊ GIL влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ?


Если Ρƒ нас имССтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ GIL Π½ΠΈΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ влияСт. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ GIL, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ.

Если ΠΆΠ΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² многопоточности, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсистСму Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ с диском), Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ послСдствия Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ GIL управляСт ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² случаС использования Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², интСнсивно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… процСссов.


Визуализация Ρ€Π°Π±ΠΎΡ‚Ρ‹ GIL (взято ΠΎΡ‚ΡΡŽΠ΄Π°)

Если Ρƒ вас имССтся Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, основанноС Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Django), ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ WSGI, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρƒ нас имССтся лишь 1 Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° запрос. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python запускаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях WSGI имССтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ€Π΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΎΠ½Π°Β», ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ процСссы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, Ρ‡Ρ‚ΠΎ позволяСт систСмС быстрСС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы.

β–ΠšΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Python?


Π’ PyPy Π΅ΡΡ‚ΡŒ GIL, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 3 Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ CPython.

Π’ Jython Π½Π΅Ρ‚ GIL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Python Π² Jython прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM.

β–ΠšΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² JavaScript?


Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ JavaScript, Ρ‚ΠΎ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС JS-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сборки мусора mark-and-sweep. Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСобходимости использования GIL β€” это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, примСняСмый Π² CPython.

Π’ JavaScript Π½Π΅Ρ‚ GIL, ΠΎΠ΄Π½Π°ΠΊΠΎ, JS β€” это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык, поэтому Π² Π½Ρ‘ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ВмСсто ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π° Π² JavaScript ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ асинхронного программирования, основанныС Π½Π° Ρ†ΠΈΠΊΠ»Π΅ событий, промисах ΠΈ коллбэках. Π’ Python Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, прСдставлСнноС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ asyncio.

Python β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык


МнС часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python являСтся слСдствиСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ утвСрТдСния основаны Π½Π° Π³Ρ€ΡƒΠ±ΠΎΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, Π½Π° самом Π΄Π΅Π»Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CPython. Если, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ€ΠΎΠ΄Π΅ python myscript.py, Ρ‚ΠΎΠ³Π΄Π° CPython Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, лСксичСском Π°Π½Π°Π»ΠΈΠ·Π΅, парсингС, компиляции, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° скрипта. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ подробности β€” взглянитС Π½Π° этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π».

Для нас, ΠΏΡ€ΠΈ рассмотрСнии этого процСсса, особСнно Π²Π°ΠΆΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ здСсь, Π½Π° стадии компиляции, создаётся .pyc-Ρ„Π°ΠΉΠ», ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ __pycache__/, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Python 3, ΠΈ Π² Python 2.

ПодобноС примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ написанным Π½Π°ΠΌΠΈ скриптам, Π½ΠΎ ΠΈ ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сторонниС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) Python занимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² Java ΠΈ Π² C#, окаТСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° Java компилируСтся Π² Β«Intermediate LanguageΒ», ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ выполняСт Π΅Π³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Β«ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» .NET CIL (это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ .NET Common-Language-Runtime, CLR), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈ Π² Java ΠΈ Π² C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΈΠΉ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ρ‡Π΅ΠΌ Java ΠΈ C#, Ссли всС эти языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ разновидности Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² .NET ΠΈ Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компиляция.

JIT-компиляция (Just In Time compilation, компиляция Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΈΠ»ΠΈ Β«Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок») Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ (ΠΊΠ°Π΄Ρ€Ρ‹). БистСмы AOT-компиляции (Ahead Of Time compilation, компиляция ΠΏΠ΅Ρ€Π΅Π΄ исполнСниСм) спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ начнётся взаимодСйствиС этого ΠΊΠΎΠ΄Π° с систСмой.

Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС использованиС JIT Π½Π΅ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈ Π² Python, Π½Π΅ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Однако JIT позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² процСссС Π΅Π³ΠΎ выполнСния. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ JIT-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ способСн Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ части прилоТСния (Ρ‚Π°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«hot spotΒ») ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ использовались Ρ€Π°Π½Π΅Π΅.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ снова ΠΈ снова выполняСт Π½Π΅ΠΊΠΈΠ΅ дСйствия, подобная оптимизация способна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… дСйствий. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΈ C# β€” это языки со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, поэтому ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅ большС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

JIT-компилятор Π΅ΡΡ‚ΡŒ Π² PyPy, ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, эта рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ CPython. БвСдСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ сравнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅.

β–ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² CPython Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компилятор?


Π£ JIT-компиляторов Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки. Один ΠΈΠ· Π½ΠΈΡ… β€” врСмя запуска. CPython ΠΈ Ρ‚Π°ΠΊ запускаСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° PyPy Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ CPython. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя запуска JVM β€” это Ρ‚ΠΎΠΆΠ΅ извСстный Ρ„Π°ΠΊΡ‚. CLR .NET ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы, Π½ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ CLR, ΠΈ Ρ‚Π° опСрационная систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ запускаСтся CLR, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ.

Если Ρƒ вас имССтся ΠΎΠ΄ΠΈΠ½ процСсс Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΡ€ΠΈ этом Π² Ρ‚Π°ΠΊΠΎΠΌ процСссС имССтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ содСрТит интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ участки, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ стоит ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ JIT-компилятор.

Однако, CPython β€” это рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅, с использованиСм Python, прилоТСния ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ оТидания запуска JIT-компилятора ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС этого прилоТСния сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

CPython пытаСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСго количСства Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Python. НапримСр, сущСствуСт возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ JIT-компилятора ΠΊ Python, ΠΏΡ€Π°Π²Π΄Π°, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рСализуСтся эта идСя, развиваСтся Π½Π΅ особСнно Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании JIT-компилятора β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ PyPy.

Python β€” динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык


Π’ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… языков ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ C, C++, Java, C#, Go.

Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках понятиС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл, Π½ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся динамичСским.

a = 1
a = "foo"

Π’ этом ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python сначала создаёт ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ a, ΠΏΠΎΡ‚ΠΎΠΌ β€” Π²Ρ‚ΠΎΡ€ΡƒΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ str, ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a.

ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π½Π° языках со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ языки созданы Π½Π΅ ΠΏΠΎ Ρ‡ΡŒΠ΅ΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. Всё, Ρ‡Ρ‚ΠΎ написано Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΈΡ‚ΠΎΠ³Π΅, сводится ΠΊ инструкциям процСссора. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ структурам.

Python выполняСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСобразования автоматичСски, программист этих процСссов Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚, ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… прСобразованиях Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π΅Ρ‘ объявлСнии β€” это Π½Π΅ Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка, которая Π΄Π΅Π»Π°Π΅Ρ‚ Python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ. АрхитСктура языка позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ динамичСским практичСски всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. НапримСр, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Β«ΠΎΠ±Π΅Π·ΡŒΡΠ½ΡŒΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉΒ» Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π’ Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ практичСски всё.

ИмСнно Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Python Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ услоТняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту идСю, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом для трассировки систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² MacOS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся DTrace.

Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ дистрибутивС CPython Π½Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DTrace, поэтому CPython Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ настройками. Π’ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия 3.6.6. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ дСйствий:

wget https://github.com/python/cpython/archive/v3.6.6.zip
unzip v3.6.6.zip
cd v3.6.6
./configure --with-dtrace
make

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ python.exe, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ DTRace для трассировки ΠΊΠΎΠ΄Π°. Об использовании DTrace с Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь. А Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ скрипты для измСрСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DTrace Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, врСмя использования процСссора, свСдСния ΠΎ систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ dtrace:
sudo dtrace -s toolkit/<tracer>.d -c β€˜../cpython/python.exe script.py’

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ срСдство трассировки py_callflow ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ.
Врассировка с использованиСм DTrace

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, влияСт Π»ΠΈ динамичСская типизация Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообраТСния ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ:

  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ конвСрсия Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ тяТёлыС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Ρ‘ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись, производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ°.
  • Π―Π·Ρ‹ΠΊ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, слоТно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстрСС Python, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ΄ΡƒΡ‚ Π½Π° Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ компромиссы, выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Cython ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Python ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ 84-ΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² сравнСнии с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Python. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ.

Π˜Ρ‚ΠΎΠ³ΠΈ


ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python являСтся Π΅Π³ΠΎ динамичСская ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π΅ΠΉΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. Для достиТСния Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… удастся, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” Π½Π΅Ρ‚.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, написанныС Π½Π° Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ возмоТности ΠΏΠΎ асинхронному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, инструмСнты профилирования, ΠΈ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ подбирая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π’Π°ΠΊ, для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, врСмя запуска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ использования JIT-компилятора, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования PyPy. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ограничСниям статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” взглянитС Π½Π° Cython.

Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python?

Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ программисту, пСрСходящСму Π½Π° Python / Habr

Когда-Ρ‚ΠΎ Π΄Π°Π²Π½ΠΎ, Π² студСнчСскиС Π³ΠΎΠ΄Ρ‹, мСня укусил ΠΏΠΈΡ‚ΠΎΠ½, ΠΏΡ€Π°Π²Π΄Π° ΠΈΠ½ΠΊΡƒΠ±Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ затянулся ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ я стал программистом Π½Π° ΠΏΠ΅Ρ€Π»Π΅.

Однако Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π» исчСрпал сСбя ΠΈ я Ρ€Π΅ΡˆΠΈΠ» Π·Π°Π½ΡΡ‚ΡŒΡΡ ΠΏΠΈΡ‚ΠΎΠ½ΠΎΠΌ, сначала просто Π΄Π΅Π»Π°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΈ разбирался с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, Π° ΠΏΠΎΡ‚ΠΎΠΌ понял, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½Ρ‹ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ систСматизированныС знания ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π» нСсколько ΠΊΠ½ΠΈΠ³:


  • Π‘ΠΈΠ»Π» Π›ΡŽΠ±Π°Π½ΠΎΠ²ΠΈΡ‡ Β«ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Python. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ программирования»
  • Дэн Π‘Π΅ΠΉΠ΄Π΅Ρ€ «Чистый Python. Вонкости программирования для ΠΏΡ€ΠΎΡ„ΠΈΒ»
  • Π‘Ρ€Π΅Ρ‚Ρ‚ Π‘Π»Π°Ρ‚ΠΊΠΈΠ½ Β«Π‘Π΅ΠΊΡ€Π΅Ρ‚Ρ‹ Python: 59 Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ написанию эффСктивного ΠΊΠΎΠ΄Π°Β»

ΠšΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠ½Π΅ показались Π²ΠΏΠΎΠ»Π½Π΅ подходящими для понимания основных тонкостСй языка, хотя Π½Π΅ помню, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½ΠΈΡ… ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΎ slots, Π½ΠΎ ΠΈ Π½Π΅ ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ нуТная Ρ„ΠΈΡ‡Π° β€” Ссли ΡƒΠΆΠ΅ ΠΏΠΎ памяти ΠΏΡ€ΠΈΠΆΠ°Π»ΠΎ, Ρ‚ΠΎ скорСС всСго ΠΎΠ΄Π½ΠΎΠ³ΠΎ этого способа Π±ΡƒΠ΄Π΅Ρ‚ нСдостаточно, Π½ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ это всё зависит ΠΎΡ‚ ситуации.

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Ρƒ мСня накопились ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΎΠ± особСнностях ΠΏΠΈΡ‚ΠΎΠ½Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Ρ‚ΠΎΠΌΡƒ ΠΊΡ‚ΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ с Π΄Ρ€ΡƒΠ³ΠΈΡ… языков.

Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Π½Π° собСсСдованиях ΠΏΠΎ ΠΏΠΈΡ‚ΠΎΠ½Ρƒ достаточно часто Π·Π°Π΄Π°ΡŽΡ‚ вопросы ΠΏΡ€ΠΎ Π²Π΅Ρ‰ΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Ρ‚ΠΈΠΏΠ° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ словаря (ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ x = yield y), Π½Ρƒ Ρ‡ΡƒΠ²Π°ΠΊΠΈ, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ число ΠΈΠ»ΠΈ строка, Π² Ρ‚Π΅Ρ… ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… случаях ΠΊΠΎΠ³Π΄Π° это Π½Π΅ Ρ‚Π°ΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Π·Π°Ρ‡Π΅ΠΌ ΡΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅? Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ Ρ‡Π΅Π³ΠΎ собСсСдуСмый Π½Π΅ Π·Π½Π°Π΅Ρ‚? Π’Π°ΠΊ Π² ΠΈΡ‚ΠΎΠ³Π΅ всС запомнят ΠΎΡ‚Π²Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° этот вопрос ΠΈ это пСрСстанСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

ΠΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΏΠΈΡ‚ΠΎΠ½ вСрсий Π²Ρ‹ΡˆΠ΅ 3.5 (ΠΏΡ€ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΈΡ‚ΠΎΠ½ Π΄Π°Π²Π½ΠΎ ΠΏΠΎΡ€Π° Π·Π°Π±Ρ‹Ρ‚ΡŒ) Ρ‚.ΠΊ. ΠΈΠΌΠ΅Π½Π½ΠΎ такая вСрсия Π² ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π΄Π΅Π±ΠΈΠ°Π½Π΅, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π²ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… мСстах Π±ΠΎΠ»Π΅Π΅ свСТиС вСрсии )

Π’Π°ΠΊ ΠΊΠ°ΠΊ я вовсС Π½Π΅ Π³ΡƒΡ€Ρƒ ΠΏΠΈΡ‚ΠΎΠ½Π°, Ρ‚ΠΎ надСюсь мСня поправят Π² коммСнтариях Ссли я Π²Π΄Ρ€ΡƒΠ³ сморозил ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π³Π»ΡƒΠΏΠΎΡΡ‚ΡŒ.


Випизация

ΠŸΠΈΡ‚ΠΎΠ½ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Ρ‚.Π΅. ΠΎΠ½ провСряСт соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² Π² процСссС выполнСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

cat type.py

a=5
b='5'
print(a+b)

выполняСм:

python3 type.py
... TypeError: unsupported operand type(s) for +: 'int' and 'str'

Однако, Ссли ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ·Ρ€Π΅Π» Π΄ΠΎ нСобходимости статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ прСдоставляСт ΠΈ Ρ‚Π°ΠΊΡƒΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡƒΡ‚Ρ‘ΠΌ использования статичСского Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° mypy:

mypy type.py
type.py:3: error: Unsupported operand types for + ("int" and "str")

ΠŸΡ€Π°Π²Π΄Π° Ρ‚Π°ΠΊ ловятся Π½Π΅ всС ошибки:

cat type2.py

def greeting(name):
    return 'Hello ' + name

greeting(5)

mypy Ρ‚ΡƒΡ‚ Π½Π΅ ругнётся, Π° ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ случится ошибка, поэтому Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ вСрсии ΠΏΠΈΡ‚ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ синтаксис для указания Ρ‚ΠΈΠΏΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

cat type3.py
def greeting(name: str) -> str:
    return 'Hello ' + name

greeting(5)

Π° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ:

mypy type3.py
type3.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str"

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅ хранят Π΄Π°Π½Π½Ρ‹Π΅, Π° лишь ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π½ΠΈΡ…, Π° Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚ измСняСмыС (ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅) ΠΈ нСизмСняСмыС (ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅).
Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ повСдСнию Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… Π² практичСски ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… ситуациях, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

x = 1
y = x
x = 2
print(y)

ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ x ΠΈ y ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π° Ρ‚Π°ΠΊΠΎΠΉ:

x = [1, 2, 3]
y = x
x[0] = 7
print(y)

Π½Π΅Ρ‚, x ΠΈ y ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ссылками Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ список (хотя ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ Π² коммСнтариях ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΉ, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ я ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»), Ρ‡Ρ‚ΠΎ кстати Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ is (я ΡƒΠ²Π΅Ρ€Π΅Π½ Ρ‡Ρ‚ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚Π΅Π»ΡŒ Π΄ΠΆΠ°Π²Ρ‹ навсСгда лишился Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ сна ΠΎΡ‚ стыда ΠΊΠΎΠ³Π΄Π° ΡƒΠ·Π½Π°Π» ΠΏΡ€ΠΎ этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅).

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ хотя ΠΈ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° список ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ саму строку ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ нСльзя, ΠΌΠΎΠΆΠ½ΠΎ лишь ΠΏΠΎΡ€ΠΎΠ΄ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, хотя исходныС Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ этом Π½Π΅ измСнятся:

>>> mystr = 'sss'
>>> newstr = mystr  # Π΄Π΅Π»Π°Π΅ΠΌ ссылку Π½Π° Ρ‚Π΅ ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅
>>> mystr[0] = 'a'
...
  TypeError: 'str' object does not support item assignment
>>> mystr = 'ssa'  # мСняСм ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
>>> newstr  # Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ измСнились ΠΈ доступны ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ссылкС
  'sss'

ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΎ строках, ΠΈΠ·-Π·Π° ΠΈΡ… ΠΈΠΌΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ конкатСнация ΠΎΡ‡Π΅Π½ΡŒ большого списка строк слоТСниСм ΠΈΠ»ΠΈ append’ΠΎΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ эффСктивной (зависит ΠΎΡ‚ Ρ€Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ компиляторС/вСрсии), ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ для Ρ‚Π°ΠΊΠΈΡ… случаСв Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ join, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Π΅Π΄Ρ‘Ρ‚ сСбя Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ:

>>> str_list = ['ss', 'dd', 'gg']
>>> 'XXX'.join(str_list)
'ssXXXddXXXgg'
>>> str = 'hello'
>>> 'XXX'.join(str)
'hXXXeXXXlXXXlXXXo'

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, строка Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ, Π° Π½Π΅ Π½Π°Ρ‡Π°Π»ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ строки ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π° Π²ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΠΎ список (ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚), Π° Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ строку ΠΈΠ±ΠΎ таковая Ρ‚ΠΎΠΆΠ΅ являСтся ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ сдТойнСна посимвольно.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ это ссылки, Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ являСтся ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ копию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π»ΠΎΠΌΠ°Ρ‚ΡŒ исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹ΠΉ камСнь β€” функция copy ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Ρ‡Ρ‚ΠΎ явно Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ оТидаСтся ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, поэтому ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ deepcopy.

Аналогичная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π½Π° скаляр, ΠΊΠ°ΠΊ Ρ€Π°Π·Π±ΠΈΡ€Π°Π»ΠΎΡΡŒ Ρ‚ΡƒΡ‚.


ΠžΠ±Π»Π°ΡΡ‚ΡŒ видимости

Π’Π΅ΠΌΠ° области видимости скорСС заслуТиваСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, Π½ΠΎ Π΅ΡΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° SO.
Если ΠΊΡ€Π°Ρ‚ΠΊΠΎ, Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ видимости лСксичСская ΠΈ Π΅ΡΡ‚ΡŒ ΡˆΠ΅ΡΡ‚ΡŒ областСй видимости β€” ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ, Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅, Π² Ρ‚Π΅Π»Π΅ класса, встроСнныС Π² ΠΏΠΈΡ‚ΠΎΠ½ Ρ„ΡƒΠ½Ρ†ΠΈΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ списковых ΠΈ ΠΈΠ½Ρ‹Ρ… Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ.
Π•ΡΡ‚ΡŒ Ρ‚ΠΎΠ½ΠΊΠΎΡΡ‚ΡŒ β€” пСрСмСнная ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ доступна для чтСния Π² лСксичСски Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… пространствах ΠΈΠΌΡ‘Π½, Π½ΠΎ модификация Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов nonlocal ΠΈ global для ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π° ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅ ΠΈΠ»ΠΈ глобальной видимости соотвСтствСнно.

НапримСр, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄:

x = 7
print(id(x))

def func():
    print(id(x))
    return x

print(func())

Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с ΠΎΠ΄Π½ΠΎΠΉ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π° Ρ‚Π°ΠΊΠΎΠΉ:

x = 7
print(id(x))

def func():
    x = 1
    print(id(x))
    return x

print(func())
print(x)

ΡƒΠΆΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ.
Π‘ ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния это Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎ ΠΈΠ΄Π΅Π΅ любоС использованиС Π½Π΅Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ интСрфСйса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΅Ρ‘ сигнатуры, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒΡΡ явно ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½Ρ‹ β€” global Π·Π²ΡƒΡ‡ΠΈΡ‚ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ глобальной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ use global.

Π’ ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅Ρ‚ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π²Ρ…ΠΎΠ΄Π° с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ начинаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ это сдСлано Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках, просто всё Ρ‡Ρ‚ΠΎ написано Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ модуля ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ выполняСтся, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ модуля это Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‚ΠΎ, с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΈΡ…ΠΈΠ²Π°Π½ΠΈΠ΅ основного ΠΊΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ main() с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΅Ρ‘ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π² ΠΊΠΎΠ½Ρ†Π΅ Ρ„Π°ΠΉΠ»Π°:

if __name__ == '__main__':
    main()

Ρ‚Π°ΠΊΠΎΠ΅ условиС сработаСт Ссли Ρ„Π°ΠΉΠ» Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΊΠ°ΠΊ скрипт, Π° Π½Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ.


АргумСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΠΈΡ‚ΠΎΠ½ прСдоставляСт просто ΡˆΠΈΠΊΠ°Ρ€Π½Ρ‹Π΅ возмоТности Π·Π° заданию Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ β€” ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ.

Но Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΊΠ°ΠΊ осущСствляСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² β€” Ρ‚.ΠΊ. Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ это ссылки Π½Π° Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° осущСствляСтся ΠΏΠΎ ссылкС, ΠΎΠ΄Π½Π°ΠΊΠΎ Ρ‚ΡƒΡ‚ Π΅ΡΡ‚ΡŒ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ β€” сама ссылка пСрСдаётся ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Ρ‚.Π΅. Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ссылкС:

def add_element(mylist):
    mylist.append(3)

mylist = [1,2]
add_element(mylist)
print(mylist)

выполняСм:

python3 arg_modify.py
[1, 2, 3]

ΠΎΠ΄Π½Π°ΠΊΠΎ нСльзя Π·Π°Ρ‚Π΅Ρ€Π΅Ρ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ ссылку Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def try_del(mylist):
    mylist = []
    return mylist

mylist = [1,2]
try_del(mylist)
print(mylist)

исходная ссылка ΠΆΠΈΠ²Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

python3 arg_kill.py
[1, 2]

Π’Π°ΠΊΠΆΠ΅ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½ΠΎ с этим Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° нСочСвидная Π²Π΅Ρ‰ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ β€” значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, это Π½Π΅ создаёт Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Ссли Π²Ρ‹ Π² качСствС значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘Ρ‚Π΅ нСизмСняСмыС Π΄Π°Π½Π½Ρ‹Π΅, Π° Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ измСняСмыС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ динамичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅ΠΌ Ρ‡ΡƒΡ‚ΠΎΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ:

измСняСмыС Π΄Π°Π½Π½Ρ‹Π΅:

cat arg_list.py

def func(arg = []):
    arg.append('x')
    return arg

print(func())
print(func())
print(func())

Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

python3 arg_list.py
['x']
['x', 'x']
['x', 'x', 'x']

динамичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

cat arg_now.py

from datetime import datetime

def func(arg = datetime.now()):
    return arg

print(func())
print(func())
print(func())

ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

python3 arg_now.py
2018-09-28 10:28:40.771879
2018-09-28 10:28:40.771879
2018-09-28 10:28:40.771879

ООП

ООП Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ сдСлано вСсьма интСрСсно (ΠΎΠ΄Π½ΠΈ property Ρ‡Π΅Π³ΠΎ стоят) ΠΈ это большая Ρ‚Π΅ΠΌΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ сапиСнс Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ с ООП Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π³ΡƒΠ³Π»ΠΈΡ‚ΡŒ всё (ΠΈΠ»ΠΈ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Ρ…Π°Π±Ρ€Π΅), Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ захочСтся, поэтому Π½Π΅Ρ‚ смысла ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ, хотя стоит ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ слСдуСт Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ философии β€” считаСтся, Ρ‡Ρ‚ΠΎ программист ΡƒΠΌΠ½Π΅Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ Π½Π΅ являСтся Π²Ρ€Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ (UPD: ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅), поэтому Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа: private ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ подчёркивания (Ρ‡Ρ‚ΠΎ Π² Ρ€Π°Π½Ρ‚Π°ΠΉΠΌΠ΅ измСняСт имя ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π΅ позволяя случайно Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ), Π° protected ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ΄Ρ‡Ρ‘Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ (Ρ‡Ρ‚ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, это просто соглашСниС ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ).
Π’Π΅ ΠΊΡ‚ΠΎ скучаСт ΠΏΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ привнСсти Π² ΠΏΠΈΡ‚ΠΎΠ½ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности, ΠΌΠ½Π΅ Π½Π°Π³ΡƒΠ³Π»ΠΈΠ»Π°ΡΡŒ ΠΏΠ°Ρ€Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² (lang, python-access), Π½ΠΎ я ΠΈΡ… Π½Π΅ тСстировал ΠΈ Π½Π΅ ΠΈΠ·ΡƒΡ‡Π°Π».

ЕдинствСнный минус стандартных классов β€” ΡˆΠ°Π±Π»ΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π²ΠΎ всяких Π΄Π°Π½Π΄Π΅Ρ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, Π»ΠΈΡ‡Π½ΠΎ ΠΌΠ½Π΅ нравится Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° attrs, ΠΎΠ½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ питоничСская.
Π‘Ρ‚ΠΎΠΈΡ‚ ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ всё ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ классы, Ρ‚ΠΎ классы ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ динамичСски (Π±Π΅Π· использования eval) Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ type.
Π’Π°ΠΊΠΆΠ΅ стоит ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ мСтаклассы (Π½Π° Ρ…Π°Π±Ρ€Π΅) ΠΈ дСскрипторы (Ρ…Π°Π±Ρ€).
ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ стоит Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ β€” Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ класса ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° это Π½Π΅ ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎΠΆΠ΅, Π² случаС нСизмСняСмых Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² это Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ «Π·Π°Ρ‚Π΅Π½ΡΡŽΡ‚ΡΡ» (shadowing) β€” ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ автоматичСски Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π° Π²ΠΎΡ‚ Π² случаС измСняСмых Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ совсСм Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ оТидалось:

cat class_attr.py
class MyClass:
    storage = [7,]
    def __init__(self, number):
        self.number = number

obj = MyClass(1)
obj2 = MyClass(2)

obj.number = 5
obj.storage.append(8)

print(obj2.storage, obj2.number)

ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

python3 class_attr.py
[7, 8] 2

ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ β€” измСняли obj, Π° storage измСнился ΠΈ Π² obj2 Ρ‚.ΠΊ. этот Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ number) ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π½Π΅ экзСмпляру, Π° классу.


ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚Ρ‹

Как ΠΈ Π² случаС с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ доступа ΠΏΠΈΡ‚ΠΎΠ½ Π½Π΅ пытаСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, поэтому Π·Π°Π΄Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΊΠ°Π»ΡΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΡƒΡŽ ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ стандартным способом нСльзя, просто Π΅ΡΡ‚ΡŒ соглашСниС, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС Π½ΡƒΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ константами.
Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ нСизмСняСмыС структуры Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ tuple, поэтому Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСизмСняСмой ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ структуру Π²Ρ€ΠΎΠ΄Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° ΠΈ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… зависимостСй, Ρ‚ΠΎ namedtuple, Π²ΠΏΠΎΠ»Π½Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Ρ‹Π±ΠΎΡ€, хотя ΠΎΠ½ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ большС усилий для описания Ρ‚ΠΈΠΏΠΎΠ², поэтому ΠΌΠ½Π΅ нравится Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ рСализация нСизмСняСмой структуры с dot-notation β€” Box (см. ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ frozen_box).
Ну Π° Ссли Π²Π°ΠΌ хочСтся скалярных констант, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ доступа ΠΊ Π½ΠΈΠΌ Π½Π° стадии «ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΠΈ» Ρ‚.Π΅. ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· mypy, ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈ подробности.


.sort() vs sorted()

Π’ ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ Π΄Π²Π° способо ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ это ΠΌΠ΅Ρ‚ΠΎΠ΄ .sort() ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСт исходный список ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ (None) Ρ‚.Π΅. Π½Π΅ получится ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

my_list = my_list.sort()

Π’Ρ‚ΠΎΡ€ΠΎΠΉ, это функция sorted() которая ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ список ΠΈ ΡƒΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСми ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. ΠšΠΎΠΌΡƒ хочСтся большС ΠΈΠ½Ρ„Ρ‹ стоит Π½Π°Ρ‡Π°Ρ‚ΡŒ с SO.


Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ стандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΈΡ‚ΠΎΠ½Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ стоит ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ критичСски, ΠΈΠ±ΠΎ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΈ странностСй. ΠŸΡ€Π°Π²Π΄Π° Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΈ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд каТСтся странным, Π² ΠΈΡ‚ΠΎΠ³Π΅ оказываСтся Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, просто Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ всС условия (см. Π΄Π°Π»Π΅Π΅ ΠΏΡ€ΠΎ range), Π½ΠΎ всё ΠΆΠ΅ Π΅ΡΡ‚ΡŒ ΠΈ странности.

НапримСр, ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ для ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования unittest Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΊ ΠΏΠΈΡ‚ΠΎΠ½Ρƒ ΠΈ ΠΏΠΎΠΏΠ°Ρ…ΠΈΠ²Π°Π΅Ρ‚ Π΄ΠΆΠ°Π²ΠΎΠΉ, поэтому, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ Π°Π²Ρ‚ΠΎΡ€ ΠΏΠΈΡ‚ΠΎΠ½Π°: «Eveybody is using py.test …». Π₯отя Π²ΠΏΠΎΠ»Π½Π΅ интСрСсный, ΠΏΡƒΡΡ‚ΡŒ ΠΈ Π½Π΅ всСгда подходящий ΠΌΠΎΠ΄ΡƒΠ»ΡŒ doctest ΠΈΠ΄Ρ‘Ρ‚ Π² стандартной поставкС.

Π˜Π΄ΡƒΡ‰ΠΈΠΉ Π² поставкС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ urllib Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прСкрасного интСрфСйса ΠΊΠ°ΠΊ стронний ΠΌΠΎΠ΄ΡƒΠ»ΡŒ requests.

Π’Π° ΠΆΠ΅ история с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ для Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки β€” ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ argparse это дСмонстрация ООП Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ·Π³Π°, Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ docopt каТСтся просто ΡˆΠΈΠΊΠ°Ρ€Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ β€” ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Π°Ρ ΡΠ°ΠΌΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ! Π₯отя, ΠΏΠΎ слухам, нСсмотря Π½Π° docopt ΠΈ для click остаётся ниша.

Π‘ ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠΎΠΌ Ρ‚Π°ΠΊΠΆΠ΅ β€” ΠΊΠ°ΠΊ я понял ΠΈΠ΄ΡƒΡ‰ΠΈΠΉ Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ pdb ΠΌΠ°Π»ΠΎ ΠΊΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ² ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅ основная масса Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ipdb, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠΎΠ΄ΡƒΠ»ΡŒ-ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ debug.
Она позволяСт вмСсто import ipdb;ipdb.set_trace() просто Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ import debug, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° добавляСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ see для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ инспСкции ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

На Π·Π°ΠΌΠ΅Π½Ρƒ стандартному ΠΌΠΎΠ΄ΡƒΠ»ΡŽ сСриализации pickle Π΄Π΅Π»Π°ΡŽΡ‚ dill, Ρ‚ΡƒΡ‚ кстати стоит Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ эти ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π΅ подходят для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² внСшними систСмами Ρ‚.ΠΊ. Π²ΠΎΡΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· Π½Π΅ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ источника нСбСзопасно, для Ρ‚Π°ΠΊΠΈΡ… случаСв Π΅ΡΡ‚ΡŒ json (для REST) ΠΈ gRPC (для RPC).

На Π·Π°ΠΌΠ΅Π½Ρƒ стандартному ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡ‚ΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ re Π΄Π΅Π»Π°ΡŽΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ regex со всякими Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ плюшками, Π²Ρ€ΠΎΠ΄Π΅ классов символов аля \p{Cyrillic}.
ΠšΡΡ‚Π°Ρ‚ΠΈ, Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π΅ попалось для ΠΏΠΈΡ‚ΠΎΠ½Π° вСсёлого ΠΎΡ‚Π»Π°Π΄Ρ‡ΠΈΠΊΠ° для рСгСксов ΠΏΠΎΡ…ΠΎΠΆΠ΅Π³ΠΎ Π½Π° ΠΏΠ΅Ρ€Π»ΠΎΠ²Ρ‹ΠΉ.

Π’ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ сдСлал свой ΠΌΠΎΠ΄ΡƒΠ»ΡŒ in-place, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡ„ΠΈΠΊΡΠΈΡ‚ΡŒ ΠΊΡ€ΠΈΠ²ΠΈΠ·Π½Ρƒ ΠΈ Π½Π΅ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ API стандартного модуля fileinput Π² части in place рСдактирования Ρ„Π°ΠΉΠ»ΠΎΠ².

Ну ΠΈ Ρ‚Π°ΠΊΠΈΡ… случаСв Π΄ΡƒΠΌΠ°ΡŽ ΠΌΠ½ΠΎΠ³ΠΎ, Ρ€Π°Π· Π΄Π°ΠΆΠ΅ ΠΌΠ½Π΅ попался Π½Π΅ ΠΎΠ΄ΠΈΠ½, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΈ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ Π·Π°Π³Π»ΡΠ΄Ρ‹Π²Π°Ρ‚ΡŒ Π²ΠΎ всякиС списки полСзняшСк Ρ‚ΠΈΠΏΠ° awesome, я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ Ρƒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ ΠΏΠΈΡ‚ΠΎΠ½Ρ‰ΠΈΠΊΠ° Π΅ΡΡ‚ΡŒ Ρ‡ΡƒΠΉΠΊΠ° Π½Π° ΠΌΠ΅Ρ€Ρƒ питоничности Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, это кстати Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π° β€” ΠΏΠΎ ΠΌΠΎΠΈΠΌ ощущСниям (ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ статистики Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π½Π° эту Ρ‚Π΅ΠΌΡƒ Π½Π΅Ρ‚ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ) Π² ΠΏΠΈΡ‚ΠΎΠ½-ΠΌΠΈΡ€Π΅ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ спСциалистов Π²Ρ‹ΡˆΠ΅ срСднСго, ΠΈΠ±ΠΎ часто Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ софтины ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ написанными Π½Π° ΠΏΠΈΡ‚ΠΎΠ½Π΅, Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² коммСнтариях, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄ΡƒΠΌΠ°Π΅Ρ‚Π΅ ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ.


ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ ΠΈ ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ

ΠŸΠΈΡ‚ΠΎΠ½ прСдоставляСт ΡˆΠΈΡ€ΠΎΠΊΠΈΠ΅ возмоТности ΠΊΠ°ΠΊ для ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ, Ρ‚Π°ΠΊ ΠΈ для ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΎΠ³ΠΎ программирования, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π΅ ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π±Π΅Π· особСнностСй.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ, Π° это Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΠ³Π΄Π° ваши Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ вычислСний, Ρ‚ΠΎ Π²Π°ΠΌ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΡŒ multiprocessing.

А Ссли Π² Π²Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡Π°Ρ… ΠΌΠ½ΠΎΠ³ΠΎ оТидания IO, Ρ‚ΠΎ ΠΏΠΈΡ‚ΠΎΠ½ прСдоставляСт массу Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Π½Π° Π²Ρ‹Π±ΠΎΡ€, ΠΎΡ‚ Ρ‚Ρ€Π΅Π΄ΠΎΠ² ΠΈ gevent, Π΄ΠΎ asyncio.
ВсС эти Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ выглядят Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌΠΈ для использования (хотя Ρ‚Ρ€Π΅Π΄Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ большС рСсурсов Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚), Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‰ΡƒΡ‰Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ asyncio ΠΏΠΎΡ‚ΠΈΡ…ΠΎΠ½ΡŒΠΊΡƒ Π²Ρ‹Π΄Π°Π²Π»ΠΈΠ²Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, Π² Ρ‚ΠΎΠΌ числС благодаря всяким плюшками Ρ‚ΠΈΠΏΠ° uvloop.

Если ΠΊΡ‚ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ» β€” Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ Ρ‚Ρ€Π΅Π΄Ρ‹ это Π½Π΅ ΠΏΡ€ΠΎ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, я нСдостаточно ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ‚Π΅Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ GIL, Π½ΠΎ ΠΏΠΎ это Ρ‚Π΅ΠΌΠ΅ достаточно ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², поэтому ΠΈ Π½Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ нСобходимости, Π³Π»Π°Π²Π½ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π΄Ρ‹ Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅ (Ρ‚ΠΎΡ‡Π½Π΅Π΅ Π² CPython) Π²Π΅Π΄ΡƒΡ‚ сСбя Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это принято Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования β€” ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ядрС, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π΅ подходят для случаСв ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° настоящая ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π΄ΠΎΠ² приостанавливаСтся ΠΏΡ€ΠΈ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, поэтому ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для конкурСнтности.


Π˜Π½Ρ‹Π΅ странности

Π’ ΠΏΠΈΡ‚ΠΎΠ½Π΅ a = a + b Π½Π΅ всСгда эквивалСнтно a += b:

a = [1]
a = a + (2,3)
TypeError: can only concatenate list (not "tuple") to list
a += (2,3)
a
[1, 2, 3]

Π—Π° дСталями ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽ Π½Π° SO ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΡˆΡ‘Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΎ Ρ‚Π°ΠΊ, Π² смыслС ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ Ρ‚Π°ΠΊ сдСлали, Π²Ρ€ΠΎΠ΄Π΅ это ΠΎΠΏΡΡ‚ΡŒ ΠΏΡ€ΠΎ ΠΌΡƒΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.


Бтранности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ странности

На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠ½Π΅ показалось странным, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ range Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ, Π½ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ подсказал ΠΌΠ½Π΅ Π½Π΅ΡƒΡ‡Ρƒ Π³Π΄Π΅ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΡƒΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈ оказалось, Ρ‡Ρ‚ΠΎ всё Π²ΠΏΠΎΠ»Π½Π΅ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Π°Ρ большая Ρ‚Π΅ΠΌΠ° это округлСния (хотя это ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° общая практичСски для всСх языков программирования), ΠΏΠΎΠΌΠΈΠΌΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊΠΎΠ΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ всС ΠΈΠ·ΡƒΡ‡Π°Π»ΠΈ Π² школьном курсС ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, Ρ‚Π°ΠΊ Π½Π° это Π΅Ρ‰Ρ‘ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ прСставлСния чисСл с ΠΏΠ»Π°Π²ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΎΡ‚ΡΡ‹Π»Π°ΡŽ ΠΊ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.
Π“Ρ€ΡƒΠ±ΠΎ говоря вмСсто ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ, ΠΏΠΎ ΡˆΠΊΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ курсу ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΈ, округлСния ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° half up ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ half to even, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ искаТСний ΠΏΡ€ΠΈ статистичСском Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈ поэтому рСкомСндуСтся стандартом IEEE 754.

Π’Π°ΠΊΠΆΠ΅ я Π½Π΅ ΠΌΠΎΠ³ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ -22//10=-3, Π° ΠΏΠΎΡ‚ΠΎΠΌ, Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, ΡƒΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ это Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ слСдуСт ΠΈΠ· самого матСматичСского опрСдСлСния, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, остаток Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ повСдСнию для ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… чисСл.
ACHTUNG! Π’Π΅ΠΏΠ΅Ρ€ΡŒ это ΠΎΠΏΡΡ‚ΡŒ ΡΡ‚Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ я Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ понимаю, см. сСй Ρ‚Ρ€Π΅Π΄.


ΠžΡ‚Π»Π°Π΄ΠΊΠ° рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

А Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ оказалось, Ρ‡Ρ‚ΠΎ Π² ΠΌΠΈΡ€Π΅ ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π½Π΅Ρ‚ инструмСнта для ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ рСгулярных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ прСкрасному ΠΏΠ΅Ρ€Π»ΠΎΠ²ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ Regexp::Debugger (видСопрСзСнтация), ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π° ΠΎΠ½Π»Π°ΠΉΠ½-инструмСнтов, Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π²ΠΈΠ½Π΄ΠΎΠ²ΠΎΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π½ΠΎ для мСня это всё Π½Π΅ Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π»ΠΎΠ²Ρ‹ΠΉ инструмСнт, ΠΈΠ±ΠΎ ΠΏΠΈΡ‚ΠΎΠ½Π½Ρ‹Π΅ рСгэксы Π½Π΅ особо ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΏΠ΅Ρ€Π»ΠΎΠ²Ρ‹Ρ…, Π½Π°ΠΏΠΈΡˆΡƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для Π½Π΅Π²Π»Π°Π΄Π΅ΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π»ΠΎΠ²Ρ‹ΠΌ инструмСнтариСм:

sudo apt install cpanminus
cpanm Regexp::Debugger
perl -I ~/perl5/lib/perl5/ -E "use Regexp::Debugger; 'ababc' =~ /(a|b) b+ c/x"

Π”ΡƒΠΌΠ°ΡŽ Π΄Π°ΠΆΠ΅ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ Π½Π΅Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ с ΠΏΠ΅Ρ€Π»ΠΎΠΌ ΠΏΠΎΠΉΠΌΡ‘Ρ‚ Π³Π΄Π΅ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ строку, Π° Π³Π΄Π΅ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, x это Ρ„Π»Π°Π³ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΏΠΈΡ‚ΠΎΠ½Π½ΠΎΠΌΡƒ re.VERBOSE.
НаТимаСм s ΠΈ шагаСм ΠΏΠΎ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ описаниС доступных ΠΊΠΎΠΌΠ°Π½Π΄ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.


ДокумСнтация

Π’ ΠΏΠΈΡ‚ΠΎΠ½Π΅ Π΅ΡΡ‚ΡŒ функция help, которая позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ справку ΠΏΠΎ любой Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (бСрётся ΠΈΠ· Π΅Ρ‘ docstring’Π°), ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ пСрСдаётся имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

$ python3                                                                                                                                        
>>> help(help)

Π½ΠΎ это Π½Π΅ всСгда ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ ΠΈ часто ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ pydoc:

pydoc3 urllib.parse.urlparse

ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° позволяСт ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словам ΠΈ Π΄Π°ΠΆΠ΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ сСрвСр с html Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ, Π½ΠΎ послСднСС Π½Π΅ тСстировал.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *