ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Как ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Python Π² тысячу Ρ€Π°Π·

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ говорят, Ρ‡Ρ‚ΠΎ Python ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ

Π’ Π»ΡŽΠ±Ρ‹Ρ… сорСвнованиях ΠΏΠΎ скорости выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Python ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ послСдниС мСста. ΠšΡ‚ΠΎ-Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ это ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Python являСтся ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языком. ВсС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅. Но ΠΌΡ‹ Π·Π½Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Java Ρ‚ΠΎΠΆΠ΅ язык Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π΅Ρ‘ Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄ интСрпрСтируСтся JVM. Как ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Π² этом Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ΅, Java Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Python.

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, способный ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΡΡ‚ΡŒ Python. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for для получСния ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½:

3,37 с Β± 582 мс Π½Π° Ρ†ΠΈΠΊΠ» (срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β± стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ послС 7 ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² ΠΏΠΎ 1 Ρ†ΠΈΠΊΠ»Ρƒ)

НичСго сСбС, Π½Π° вычислСниС всСго 1 000 000 ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ трСбуСтся 3,37 с. Π’Π° ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π° C выполняСтся Π·Π° считанныС мгновСния: 9 мс; C# трСбуСтся 19 мс; Nodejs трСбуСтся 26 мс; Java трСбуСтся 5 мс(!), Π° Python трСбуСтся Π°ΠΆ Ρ†Π΅Π»Ρ‹Ρ… 3,37 Π‘Π•ΠšΠ£ΠΠ”Π«. (Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ тСстов ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π² ΠΊΠΎΠ½Ρ†Π΅).

ΠŸΠ΅Ρ€Π²ΠΎΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° Ρ‚Π°ΠΊΠΎΠΉ мСдлСнности

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ Python языком программирования с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° Python всё прСдставляСт собой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹; ΠΈΠ½Ρ‹ΠΌΠΈ словами, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π½Π° Python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ трСбуСтся Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ. ВсС эти 3 сСкунды тратятся Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ².

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… языков Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ C, Π³Π΄Π΅ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ осущСствляСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Π² Python мноТСство Ρ‚Π°ΠΊΡ‚ΠΎΠ² ЦП ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ°.

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Π”Π°ΠΆΠ΅ простоС присвоСниС числового значСния β€” это Π΄ΠΎΠ»Π³ΠΈΠΉ процСсс.

Π¨Π°Π³ 1. Π—Π°Π΄Π°Ρ‘ΠΌ a->PyObject_HEAD->typecode Ρ‚ΠΈΠΏ integer

Π¨Π°Π³ 2. ΠŸΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ a->val =1

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ, стоит ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π² чудСсной ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π”ΠΆΠ΅ΠΉΠΊΠ°: Why Python is Slow: Looking Under the Hood

Π˜Ρ‚Π°ΠΊ, сущСствуСт Π»ΠΈ способ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ‚ΠΈΠΏΠΎΠ², Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΈ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ?

РСшСниС: ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ NumPy

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ list языка Python, массив NumPy β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный Π½Π° основС массива C. Доступ ΠΊ элСмСнту Π² NumPy Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ шагов для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Π­Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ Π½Π°ΠΌΡ‘ΠΊ Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Universal Functions (ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) NumPy, ΠΈΠ»ΠΈ UFunc.

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Если Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅, благодаря UFunc ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ арифмСтичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ нСпосрСдствСнно с Ρ†Π΅Π»Ρ‹ΠΌ массивом. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Python Π² Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° UFunc, ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

Π­Ρ‚ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΈ ΡƒΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠ΄. ΠžΡ‚Π³Π°Π΄Π°Π΅Ρ‚Π΅, сколько Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅? 2,7 мс β€” быстрСС, Ρ‡Π΅ΠΌ всС упомянутыС Π²Ρ‹ΡˆΠ΅ языки:

2,71 мс Β± 50,8 мкс Π½Π° Ρ†ΠΈΠΊΠ» (срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β± стандартноС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ послС =7 ΠΏΡ€ΠΎΠ³ΠΎΠ½ΠΎΠ² ΠΏΠΎ 100 Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ)

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Π—Π΄Π΅ΡΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ufunc.

Подводим ΠΈΡ‚ΠΎΠ³

Если Π²Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ Python, Ρ‚ΠΎ высока Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ числами. Π­Ρ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² NumPy ΠΈΠ»ΠΈ DataFrame Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Pandas, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ DataFrame Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° основС NumPy. Π’ΠΎ Π΅ΡΡ‚ΡŒ с Π½ΠΈΠΌ Ρ‚ΠΎΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ufunc.

UFunc позволяСт Π½Π°ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² Python ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ быстрСС Π½Π° порядки Π²Π΅Π»ΠΈΡ‡ΠΈΠ½. Π‘Π°ΠΌΡ‹ΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ Python ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π°ΠΆΠ΅ быстрСС языка C. И это Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β€” ΠΊΠΎΠ΄ тСстов Π½Π° C, C#, Java ΠΈ NodeJS

На ΠΏΡ€Π°Π²Π°Ρ… Ρ€Π΅ΠΊΠ»Π°ΠΌΡ‹

Π’ΠΎΠΏΠ»ΠΎΡ‰Π°ΠΉΡ‚Π΅ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ΄Π΅ΠΈ ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°ΡˆΠΈΡ… VDS с ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ Π½Π° Linux ΠΈΠ»ΠΈ Windows. Π‘ΠΎΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ собствСнный ΠΊΠΎΠ½Ρ„ΠΈΠ³ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΡƒΡ‚Ρ‹!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

ΠŸΡ€ΠΈΡ‘ΠΌΡ‹ для ускорСния ΠΊΠΎΠ΄Π° Π½Π° Python

Для ускорСния ΠΊΠΎΠ΄Π° Π½Π° Python программисты ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ². ΠœΡ‹ собрали нСсколько самых простых ΠΈ ΠΏΡ€ΠΈ этом самых эффСктивных ΠΈΠ· Π½ΠΈΡ….

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

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

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΠ΅ΠΌ Π²Π°ΠΌ нСсколько ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ² ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² для ускорСния ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ Π΅Π³ΠΎ эффСктивности.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ подходящиС структуры Π΄Π°Π½Π½Ρ‹Ρ…

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ… Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Π’ Python встроСны Ρ‚Π°ΠΊΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ список ( list ), ΠΊΠΎΡ€Ρ‚Π΅ΠΆ ( tuple ), мноТСство ( set ) ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ( dictionary ). НСсмотря Π½Π° это, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй Ρ…ΠΎΡ€ΠΎΡˆΠΎ помнят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ списки. Π­Ρ‚ΠΎ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄.

Для ускорСния ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ‚Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ максимально ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ вашСй Π·Π°Π΄Π°Ρ‡Π΅. ОсобСнно это касаСтся Π²Ρ‹Π±ΠΎΡ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ списком ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, вСдь ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ послСднСму Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΡƒΠ΄Π° мСньшС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ†ΠΈΠΊΠ»ΠΎΠ² for

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ списковыС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (list comprehension)

НС ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅, Ссли ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ списковыС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ. НапримСр, этот ΠΊΠΎΠ΄ заносит Π² список всС числа ΠΌΠ΅ΠΆΠ΄Ρƒ 1 ΠΈ 1000, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 3:

Π‘ΠΎ списковыми Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ ΠΊΠΎΠ΄ трансформируСтся Π² ΠΎΠ΄Π½Ρƒ строку:

НС ΠΏΡ€Π΅Π½Π΅Π±Ρ€Π΅Π³Π°ΠΉΡ‚Π΅ мноТСствСнным присваиваниСм

НС стоит ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊ:

Π›ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ синтаксиса:

ΠœΠ°Ρ€ΠΊ Π›ΡƒΡ‚Ρ† Β«Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ PythonΒ»

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ Ρƒ нас Π² Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ

НС создавайтС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π”Π°, Π² Python Π΅ΡΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово global для объявлСния Ρ‚Π°ΠΊΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Но ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π½ΠΈΠΌΠΈ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. ΠŸΠΎΡ‚ΠΎΠΌΡƒ Π½Π΅ создавайтС Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π±Π΅Π· ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ нСобходимости.

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

НС ΠΏΠΈΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ссли ΠΎΠ½Π° ΡƒΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΡ€Π°ΠΉΠ½Π΅ эффСктивны, ΠΈ, скорСС всСго, Π²Π°ΠΌ Π½Π΅ удастся Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

БоСдиняйтС строки ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ join

Всё Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ + ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· создаёт Π½ΠΎΠ²ΡƒΡŽ строку, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π΅Ρ‘ исходныС. join() устроСн ΠΈΠ½Π°Ρ‡Π΅ ΠΈ обСспСчиваСт Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹

ВзглянитС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Ρ‚ΠΎΡ‡Π΅ΠΊ

Π‘Ρ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΈ. ВзглянитС Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

ВмСсто этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 1 Π² бСсконСчных Ρ†ΠΈΠΊΠ»Π°Ρ…

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹

НС Π±ΠΎΠΉΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности ΠΊΠΎΠ΄Π°.

Допустим, Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΊΠΎΠ΄:

ВмСсто этого стоит ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ускоритСли

ΠœΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python послуТила Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π΅Π½ΠΈΠ΅ΠΌ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΡ… Π΅Π³ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹. На Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ сорСвнований ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²Ρ‹ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚Π΅ΡΡŒ с pypy (Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Python).

Π­Ρ‚ΠΈ срСдства ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ врСмя выполнСния Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… датасСтов ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

C/C++ быстрСС Python. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Python, ΠΏΠΈΡˆΡƒΡ‚ΡΡ Π½Π° C/C++. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ – Numpy, Scipy ΠΈ Pandas, ΡΡ‚ΠΎΠ»ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… массивов Π΄Π°Π½Π½Ρ‹Ρ….

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Python

Python рСгулярно обновляСтся ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΡƒΠ΅Ρ‚ΡΡ ΠΈ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Ρ€Π΅Π»ΠΈΠ·ΠΎΠΌ становится всё быстрСС ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π΅Π΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ускорСния ΠΊΠΎΠ΄Π° всСгда ΠΏΠΈΡˆΠΈΡ‚Π΅ Π΅Π³ΠΎ Π½Π° новСйшСй вСрсии языка.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠœΡ‹ рассмотрСли ΠΏΡ€ΠΈΡ‘ΠΌΡ‹ для ускорСния ΠΊΠΎΠ΄Π° Π½Π° Python. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, этот список Π½Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰ΠΈΠΉ: Π΅ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ‰ΠΈΡ‚Π΅ ΠΈΡ… ΠΈ ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄ эффСктивно!

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

УскорСниС ΠΊΠΎΠ΄Π° Π½Π° Python срСдствами самого языка

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° pythonКаким Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π½Π΅ Π±Ρ‹Π» Python, Π΅ΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° извСстная всС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ β€” ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. На эту Ρ‚Π΅ΠΌΡƒ Π±Ρ‹Π»ΠΎ написано мноТСство статСй, Π² Ρ‚ΠΎΠΌ числС ΠΈ Π½Π° Π₯Π°Π±Ρ€Π΅.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Π’ΠΎΠ³Π΄Π°, Ссли для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π²Ρ‹ΡˆΠ΅ пСрСчислСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ подошли, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ? ΠœΠ΅Π½ΡΡ‚ΡŒ Python Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык? НСт, ΡΠ΄Π°Π²Π°Ρ‚ΡŒΡΡ нСльзя. Π‘ΡƒΠ΄Π΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сам ΠΊΠΎΠ΄. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ взяты ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, строящСй мноТСство ΠœΠ°Π½Π΄Π΅Π»ΡŒΠ±Ρ€ΠΎΡ‚Π° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ числом ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ.
ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ исходной вСрсии ΠΏΡ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… 600*600 пиксСлСй, 100 ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ составляло 3.07 сСк, эту Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ ΠΌΡ‹ возьмСм Π·Π° 100%

Π‘ΠΊΠ°ΠΆΡƒ Π·Π°Ρ€Π°Π½Π΅Π΅, Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ станСт ΠΌΠ΅Π½Π΅Π΅ pythonic, Π΄Π° простят мСня Π°Π΄Π΅ΠΏΡ‚Ρ‹ python-way.

Π¨Π°Π³ 0. Вынос основного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ

Π”Π°Π½Π½Ρ‹ΠΉ шаг ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ python Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎ запускС, Π΄Π° ΠΈ ΠΏΡ€ΠΈ использовании psyco Π΄Π°Π½Π½Ρ‹ΠΉ шаг ΠΌΠΎΠΆΠ΅Ρ‚ сильно ΠΏΠΎΠΌΠΎΡ‡ΡŒ, Ρ‚.ΠΊ. psyco ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ лишь Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ затрагивая основноС Ρ‚Π΅Π»ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
Если Ρ€Π°Π½ΡŒΡˆΠ΅ рассчСтная Ρ‡Π°ΡΡ‚ΡŒ исходной ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выглядСла Ρ‚Π°ΠΊ:

ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ врСмя 2.4 сСк, Ρ‚.Π΅. 78% ΠΎΡ‚ исходного.

Π¨Π°Π³ 1. ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

Бтандартная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python’a, это просто ΠΊΠ»ΠΎΠ½Π΄Π°ΠΉΠΊ ΠΏΠΎΠ»Π΅Π·Π½Π΅ΠΉΡˆΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. БСйчас нас интСрСсуСт ΠΌΠΎΠ΄ΡƒΠ»ΡŒ cProfile, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° становится простым ΠΈ, Π΄Π°ΠΆΠ΅, интСрСсным занятиСм.
ΠŸΠΎΠ»Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ ΠΏΠΎ этому ΠΌΠΎΠ΄ΡƒΠ»ΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь, Π½Π°ΠΌ ΠΆΠ΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ ΠΏΠ°Ρ€Ρ‹ простых ΠΊΠΎΠΌΠ°Π½Π΄.

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function)
1 2.309 2.309 2.766 2.766 mand_slow.py:22(mandelbrot)
.

Π‘ Π΅Ρ‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ, Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ мСста, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ (строки с наибольшими значСниями ncalls (ΠΊΠΎΠ»-Π²ΠΎ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ), tottime ΠΈ percall (врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ всСх Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ соотвСтствСнно)).

Π’ ΠΌΠΎΠ΅ΠΌ случаС интСрСсной Ρ‡Π°ΡΡ‚ΡŒΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° Π±Ρ‹Π»ΠΎ (врСмя Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ отличаСтся ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅, Ρ‚.ΠΊ. ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ добавляСт свой Β«ΠΎΠ²Π΅Ρ€Ρ…Π΅Π΄Β»):
4613944 function calls (4613943 primitive calls) in 2.818 seconds

Ordered by: internal time

ncalls tottime percall cumtime percall filename:lineno(function)
1 2.309 2.309 2.766 2.766 mand_slow.py:22(mandelbrot)
3533224 0.296 0.000 0.296 0.000
360000 0.081 0.000 0.081 0.000
360000 0.044 0.000 0.044 0.000
360000 0.036 0.000 0.036 0.000
.
Π˜Ρ‚Π°ΠΊ, ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ займСмся ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π²ΠΏΠ»ΠΎΡ‚Π½ΡƒΡŽ.

Π¨Π°Π³ 2. Анализ профиля

Π’ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ мСстС ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ стоит наша основная функция mandelbrot, Π·Π° Π½Π΅ΠΉ ΠΈΠ΄Π΅Ρ‚ систСмная функция abs, Π·Π° Π½Π΅ΠΉ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· модуля math, Π΄Π°Π»Π΅Π΅ β€” ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌΠΈ, ΠΎΠ½ΠΈ Π½Π°ΠΌ Π½Π΅ интСрСсны.

Π˜Ρ‚Π°ΠΊ, систСмныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Β«Π²Ρ‹Π»ΠΈΠ·Π°Π½Ρ‹Π΅Β» сообщСством, Π½Π°ΠΌ врядли удастся ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ собствСнному ΠΊΠΎΠ΄Ρƒ:

Π¨Π°Π³ 3. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°

БСйчас, ΠΊΠΎΠ΄ выглядит Ρ‚Π°ΠΊ:

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ возвСдСния Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ ** β€” довольно Β«ΠΎΠ±Ρ‰ΠΈΠΉΒ», Π½Π°ΠΌ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ лишь Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ‚.Π΅. всС конструкции Π²ΠΈΠ΄Π° x**2 ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° Ρ…*Ρ…, Π²Ρ‹ΠΈΠ³Ρ€Π°Π² Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π΅Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° врСмя:
1.9 сСк, ΠΈΠ»ΠΈ 62% ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, достигнуто простой Π·Π°ΠΌΠ΅Π½ΠΎΠΉ Π΄Π²ΡƒΡ… строк:

Π¨Π°ΠΆΠΊΠΈ 5, 6 ΠΈ 7. МалСнькиС, Π½ΠΎ Π²Π°ΠΆΠ½Ρ‹Π΅

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

Π•Ρ‰Π΅ 0.1сСк ΠΎΡ‚Π²ΠΎΠ΅Π²Π°Π½ΠΎ.
Вспомним, Ρ‡Ρ‚ΠΎ abs(x) Π²Π΅Ρ€Π½Π΅Ρ‚ число Ρ‚ΠΈΠΏΠ° float. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΈ ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ стоит с float Π° Π½Π΅ int:

Π•Ρ‰Π΅ 0.15сСк. 53% ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, грязный Ρ…Π°ΠΊ.
Π’ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ этой Π·Π°Π΄Π°Ρ‡Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ниТняя ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° изобраТСния, Ρ€Π°Π²Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ, Ρ‚.ΠΎ. число вычислСний ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π΄Π²ΠΎΠ΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² Π² ΠΈΡ‚ΠΎΠ³Π΅ 0.84сСк ΠΈΠ»ΠΈ 27% ΠΎΡ‚ исходного Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΡƒΠΉΡ‚Π΅. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ timeit. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅. Python β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ язык, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π½Π΅ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ, ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π°ΡˆΠ΅ΠΌΡƒ ТСланию Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ ΠΈ всС ΠΎΡ‚ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:)
ЦСль Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π° счСт ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΈ Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… измСнСния, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π·Π°ΠΌΠ΅Π½ ** Π½Π° *, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ змСя ΠΏΠΎΠ»Π·Π°Ρ‚ΡŒ Π΄ΠΎ Π΄Π²ΡƒΡ… Ρ€Π°Π· быстрСС, Π±Π΅Π· примСнСния тяТСлой Π°Ρ€Ρ‚ΠΈΠ»Π»Π΅Ρ€ΠΈΠΈ Π² Π²ΠΈΠ΄Π΅ Π‘ΠΈ, ΠΈΠ»ΠΈ ΡˆΠ°ΠΌΠ°Π½ΡΡ‚Π² psyco.
Π’Π°ΠΊΠΆΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ срСдства, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ psyco, Ρ…ΡƒΠΆΠ΅ Π½Π΅ станСт:)

Бпасибо всСм ΠΊΡ‚ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π» Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π°, Π±ΡƒΠ΄Ρƒ Ρ€Π°Π΄ Π²Ρ‹ΡΠ»ΡƒΡˆΠ°Ρ‚ΡŒ ваши мнСния ΠΈ замСчания Π² коммСнтариях!

UPD ΠŸΠΎΠ»Π΅Π·Π½ΡƒΡŽ ссылку Π² комСнтариях ΠΏΡ€ΠΈΠ²Π΅Π» funca.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

10 ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊ ΠΊΠΎΠ΄Π°, ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‰ΠΈΡ… Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python 🐍

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Β«ΠŸΠΈΡ‚ΠΎΠ½ – ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉΒ». НавСрняка Π²Ρ‹ Π½Π΅ Ρ€Π°Π· ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с этим ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, особСнно ΠΎΡ‚ людСй, ΠΏΡ€ΠΈΡˆΠ΅Π΄ΡˆΠΈΡ… Π² Python ΠΈΠ· C, C++ ΠΈΠ»ΠΈ Java. Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях это Π²Π΅Ρ€Π½ΠΎ. Π¦ΠΈΠΊΠ»Ρ‹ ΠΈΠ»ΠΈ сортировка массивов, списков ΠΈΠ»ΠΈ словарСй ΠΈΠ½ΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², главная миссия Python – ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ приятным ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ. Π Π°Π΄ΠΈ лаконичности ΠΈ удобочитаСмости ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ отчасти принСсти Π² ΠΆΠ΅Ρ€Ρ‚Π²Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² послСдниС Π³ΠΎΠ΄Ρ‹ прСдпринято Π½Π΅ΠΌΠ°Π»ΠΎ усилий для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ эффСктивно ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ большиС Π½Π°Π±ΠΎΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ NumPy, SciPy, Pandas ΠΈ numba, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС эти Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ написаны Π½Π° C/C++. Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ интСрСсный ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ – PyPy ускоряСт ΠΊΠΎΠ΄ Python Π² 4.4 Ρ€Π°Π·Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с CPython (ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ рСализация Python).

Но ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Python ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ. Π’ Π½Π°ΡˆΠΈΡ… силах Ρ€Π°Π·ΠΎΠ³Π½Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² повсСднСвной ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΊΠΎΠ΄ΠΈΠ½Π³Π°.

1. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π² 36 ( set ) ΠΈ 20 ( sum ) Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, написанныС самим Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ.

2. sort() vs sorted()

Π’Π°ΠΊ происходит ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ sort() измСняСт список прямо Π½Π° мСстС, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ sorted() создаСт Π½ΠΎΠ²Ρ‹ΠΉ отсортированный список, сохраняя исходный Π½Π΅Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, порядок Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ a_long_list фактичСски ΡƒΠΆΠ΅ измСнился.

Однако функция sorted() Π±ΠΎΠ»Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°. Она ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с любой ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ структурой. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Π°ΠΌ ΠΈΠ»ΠΈ ΠΏΠΎ значСниям), придСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ sorted() :

3. Π›ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ вмСсто Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

4. Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ списков

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ список ΠΈΠ· старого Π½Π° основС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… условий, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» for – ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ всС значСния ΠΈ сохраняСм Π½ΡƒΠΆΠ½Ρ‹Π΅ Π² Π½ΠΎΠ²ΠΎΠΌ спискС.

НапримСр, ΠΎΡ‚Π±Π΅Ρ€Ρ‘ΠΌ всС Ρ‡Ρ‘Ρ‚Π½Ρ‹Π΅ числа ΠΈΠ· списка another_long_list :

Но Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈ элСгантный способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС. Код Ρ†ΠΈΠΊΠ»Π° for ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠΉ-СдинствСнной строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка, Π²Ρ‹ΠΈΠ³Ρ€Π°Π² ΠΏΡ€ΠΈ этом Π² скорости ΠΏΠΎΡ‡Ρ‚ΠΈ Π² Π΄Π²Π° Ρ€Π°Π·Π°:

БочСтая это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ с ΠŸΡ€Π°Π²ΠΈΠ»ΠΎΠΌ #3 (использованиС Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²), ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ список Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΈΠ»ΠΈ мноТСство, просто ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² скобки:

5. enumerate() для значСния ΠΈ индСкса

Иногда ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅ списка Π½ΡƒΠΆΠ½Ρ‹ ΠΈ значСния, ΠΈ ΠΈΡ… индСксы. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΄Π²ΠΎΠ΅ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ enumerate() для прСвращСния списка Π² ΠΏΠ°Ρ€Ρ‹ индСкс-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅:

6. zip() для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… списков

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, списки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ функция zip() останавливаСтся, ΠΊΠΎΠ³Π΄Π° заканчиваСтся Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ список.

И Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ элСмСнтам ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ список ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ ( * ) ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ мноТСствСнноС присваиваниС:

7. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ set() ΠΈ in

Если Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, содСрТит Π»ΠΈ список Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Π½Π΅ΡƒΠΊΠ»ΡŽΠΆΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Однако Π΅ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ для Python способ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ in :

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ списка Π² мноТСство заняло 20 мс. Но это ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. Π—Π°Ρ‚ΠΎ сама ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° заняла 5 мкс – Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π² 2 тыс. Ρ€Π°Π· мСньшС, Ρ‡Ρ‚ΠΎ становится Π²Π°ΠΆΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ частых обращСниях.

8. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° True

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅/списки/словари/. пустыми. На этих ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ… Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠΆΠΊΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ.

Аналогично ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ условиС, Π΄ΠΎΠ±Π°Π²ΠΈΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ not :

9. ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с Counter()

Если Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² спискС, ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡ΠΈ – это значСния списка, Π° значСния – счСтчик встрСчаСмости.

Однако Π±ΠΎΠ»Π΅Π΅ эффСктивный способ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ – использованиС Counter() ΠΈΠ· модуля collections. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ этом умСстится Π² ΠΎΠ΄Π½ΠΎΠΉ строчкС:

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 10 Ρ€Π°Π· быстрСС, Ρ‡Π΅ΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ.

Одним словом, collections – это Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ инструмСнтов любого Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. НС ΠΏΠΎΠ»Π΅Π½ΠΈΡ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нашС руководство ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡŽ модуля.

10. Π¦ΠΈΠΊΠ» for Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Однако ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π΅Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ – ΠΈ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Ρ†ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ (Π΄Π»ΠΈΠ½Π° a_long_list ) ΠΌΡ‹ сэкономили ΠΎΠΊΠΎΠ»ΠΎ 22% Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π΄Ρ‹, Ссли Π²Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ Π² коммСнтариях своими ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌΠΈ ΠΊ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π° Π² Python. Π’ΠΎΡ‚ Π΅Ρ‰Ρ‘ нСсколько статСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ вас Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Python & оптимизация Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния python оставляСт ΠΆΠ΅Π»Π°Ρ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅Π³ΠΎ. НСкоторыС ΠΎΡ‚ΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ использования python ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Π½ΠΎ сущСствуСт нСсколько способов ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ python ΠΊΠ°ΠΊ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ памяти.

Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ нСсколькими ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π― ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ win10 x64.

Π­ΠΊΠΎΠ½ΠΎΠΌΠΈΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ силами Python

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотрим Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡƒΡΡ‚ΡŒ Ρƒ нас имССтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π΅ΡΡ‚ΡŒ список Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ². Π’ΠΎΡ‚ Π½Π°ΠΌ понадобилось ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с этими Ρ‚ΠΎΠ²Π°Ρ€Π°ΠΌΠΈ. Π‘Π°ΠΌΡ‹ΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° всС Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ хранятся Π² Π‘Π”, Π½ΠΎ Π²Π΄Ρ€ΡƒΠ³ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ, ΠΈ ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ всС Ρ‚ΠΎΠ²Π°Ρ€Ρ‹ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π΄Π°Π±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡ…. И Ρ‚ΡƒΡ‚ встаСт Ρ€Π΅Π·ΠΎΠ½Π½Ρ‹ΠΉ вопрос, Π° Ρ…Π²Π°Ρ‚ΠΈΡ‚ Π»ΠΈ Π½Π°ΠΌ памяти для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ‚Π°ΠΊΠΈΠΌ количСством Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²?

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π΅Π»ΠΎΠΌ создадим Π½Π΅ΠΊΠΈΠΉ класс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° наш ΠΌΠ°Π³Π°Π·ΠΈΠ½. Π£ Π½Π΅Π³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ лишь 2 поля: name ΠΈ listGoods, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ Π·Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΈ список Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² соотвСтствСнно.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ°Π³Π°Π·ΠΈΠ½ Ρ‚ΠΎΠ²Π°Ρ€Π°ΠΌΠΈ (Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ listGoods). Для этого создадим класс, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ Ρ‚ΠΎΠ²Π°Ρ€Π΅ (я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ dataclass’ы для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²).

Π”Π°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ Ρ‚ΠΎΠ²Π°Ρ€Π°ΠΌΠΈ. Для чистоты экспСримСнта я создам ΠΏΠΎ 200 ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π² 3Ρ… катСгориях:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΡˆΠ»ΠΎ врСмя ΠΈΠ·ΠΌΠ΅Ρ€ΠΈΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠ΅ (для измСрСния памяти я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ pympler):

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ наш ΠΌΠ°Π³Π°Π·ΠΈΠ½ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²ΠΊΠ΅ занял ΠΏΠΎΡ‡Ρ‚ΠΈ 106Кб. Π”Π°, это Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ Ссли ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ я сохранил лишь 600 Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², Π·Π°ΠΏΠΎΠ»Π½ΠΈΠ² Π² Π½ΠΈΡ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ, Ρ†Π΅Π½Π΅ ΠΈ Π²Π°Π»ΡŽΡ‚Π΅, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ придСтся Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² нСсколько Ρ€Π°Π· большС ΠΏΠΎΠ»Π΅ΠΉ. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π°Ρ€Ρ‚ΠΈΠΊΡƒΠ», производитСля, количСство Ρ‚ΠΎΠ²Π°Ρ€Π° Π½Π° складС, страну производитСля, Ρ†Π²Π΅Ρ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ, вСс ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ВсС эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π΄ΡƒΡ‚ΡŒ ваш ΠΌΠ°Π³Π°Π·ΠΈΠ½ с Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ Π΄ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ (ΠΈ это ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ Π΅Ρ‰Π΅ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Python создаСт Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ Π½Π΅Π³ΠΎ выдСляСтся ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ догадываСмся. Надо ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ python создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ __dict__ Π²Π½ΡƒΡ‚Ρ€ΠΈ класса для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΡƒΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ Π±Π΅Π· особых усилий ΠΈ послСдствий. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ динамичСски Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π² класс.

Однако Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ. ΠœΡ‹ ΡƒΠΆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρƒ нас. Π’ python’e Π΅ΡΡ‚ΡŒ магичСский Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ __slots__, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ __dict__. ΠžΡ‚ΠΊΠ°Π· ΠΎΡ‚ __dict__ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ для Π½ΠΎΠ²Ρ‹Ρ… классов Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ со всСми Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΈ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹ΠΌ Π² Π½ΠΈΡ… Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Ρƒ объСм Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ памяти Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒΡΡ. ИзмСним Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ наши классы:

И протСстируСм ΠΏΠΎ памяти наш ΠΌΠ°Π³Π°Π·ΠΈΠ½.

Как Π²ΠΈΠ΄Π½ΠΎ, объСм, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ ΠΌΠ°Π³Π°Π·ΠΈΠ½ΠΎΠΌ, ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΠ»ΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 2.4 Ρ€Π°Π·Π° (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, вСрсии Python, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²). Π£ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡ‹ΠΉ объСм памяти, Π΄ΠΎΠ±Π°Π²ΠΈΠ² всСго ΠΏΠ°Ρ€Ρƒ строчСк ΠΊΠΎΠ΄Π°. Но Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ ΠΈ минусы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ:

На этом прСимущСства использования слотов Π½Π΅ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ избавились ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° __dict__ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ptyhon’Ρƒ Π½Π΅Ρ‚ нСобходимости Π·Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ класса, Ρ‡Ρ‚ΠΎ влияСт ΠΈ Π½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ наш ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ модуля timeit, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· протСстируСм наш ΠΊΠΎΠ΄ Π½Π° ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… __slots__ (Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΌ__dict__):

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ оказался Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π½Π° 15% (тСстированиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ нСсколько Ρ€Π°Π·, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Ρ‹Π» всСгда ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ).

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ объСм памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½ΠΎ ΠΈ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄.

ΠŸΡ‹Ρ‚Π°Π΅ΠΌΡΡ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄

Бпособов ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ python сущСствуСт нСсколько, начиная ΠΎΡ‚ использования встроСнных Ρ„ΠΈΡˆΠ΅ΠΊ язык (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, описанных Π² ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π³Π»Π°Π²Π΅), заканчивая написаниСм Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ Π½Π° C/C++ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

Π― расскаТу лишь ΠΎ Ρ‚Π΅Ρ… способах, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π·Π°ΠΉΠΌΡƒΡ‚ Ρƒ вас ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ позволят Π² ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ срок Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ этим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ.

Cython

На ΠΌΠΎΠΉ взгляд Cython являСтся ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° Python, Π½ΠΎ ΠΏΡ€ΠΈ этом Π²Π°ΠΌ Π²Π°ΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΊΠΎΠ΄Π°. Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ΄ для подсчСта сумм стоимости всСх Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€ΠΎΠ², Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΠΈ тостСров Π½Π° чистом Python ΠΈ рассчитаСм врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±Ρ‹Π»ΠΎ Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½ΠΎ (Π±ΡƒΠ΄Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ 20.000.000 Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ²):

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ класс ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° ΠΏΠΎΠ΄ cython:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² main.py нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сдСлаСм Π²Ρ‹Π·ΠΎΠ² cython ΠΊΠΎΠ΄Π°. Для этого Π΄Π΅Π»Π°Π΅ΠΌ сначала ΠΈΠΌΠΏΠΎΡ€Ρ‚ всСх установлСнных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ:

И Π΄Π΅Π»Π°Π΅ΠΌ сразу ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ нашСго cython ΠΈ Π΅Π³ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Π² основной python ΠΊΠΎΠ΄

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ cython

ЗапускаСм. ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ Π² консоли. Π’ cython, Π³Π΄Π΅ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° созданиС Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ², ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ:

А Ρ‚Π°ΠΌ Π³Π΄Π΅ Π±Ρ‹Π» Π²Ρ‹Π²ΠΎΠ΄ послС подсчСта сумм ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ:

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ создания Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»Π°ΡΡŒ с 44 Π΄ΠΎ 4 сСкунд, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΌΡ‹ ускорили Π΄Π°Π½Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 11 Ρ€Π°Π·. ΠŸΡ€ΠΈ подсчСтС сумм врСмя ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ с 13 сСкунд Π΄ΠΎ 1 сСкунды, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 13 Ρ€Π°Π·.

Магия Python

Π‘Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ возмоТности ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° cython ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ язык, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ имССтся достаточно большая кодовая Π±Π°Π·Π° (ΠΈΠ»ΠΈ ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅), Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ хочСтся ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ. Рассмотрим ΠΊΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π³Π΄Π΅ ΠΌΡ‹ использовали лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ списков. Π’ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ PyPy, это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ языка python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ JIT компилятор. Однако PyPy ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ всС сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² ΠΊΠΎΠ΄Π΅ Ρ‚Π°ΠΊΠΎΠ²Ρ‹Π΅, Ρ‚ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ python ΠΊΠΎΠ΄ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ PyPy ΠΎΡ‡Π΅Π½ΡŒ Π»Π΅Π³ΠΊΠΎ.

Для Π½Π°Ρ‡Π°Π»Π° ΠΊΠ°Ρ‡Π°Π΅ΠΌ PyPy с ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сайта. РаспаковываСм Π² Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ°ΠΏΠΊΡƒ, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ cmd ΠΈ Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ, Π³Π΄Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π»Π΅ΠΆΠΈΡ‚ Ρ„Π°ΠΉΠ» pypy3.exe, Π² эту ΠΆΠ΅ ΠΏΠ°ΠΏΠΊΡƒ ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ наш ΠΊΠΎΠ΄ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² cmd ΠΏΡ€ΠΎΠΏΠΈΡˆΠ΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python. Π€ΠΎΡ‚ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° python

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, 19 сСкунд python’овского ΠΊΠΎΠ΄Π° ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ Π΄ΠΎ 4.5 сСкунд Π²ΠΎΠΎΠ±Ρ‰Π΅ Π±Π΅Π· пСрСписывания ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ Π² 4 Ρ€Π°Π·Π°.

Π’Ρ‹Π²ΠΎΠ΄

ΠœΡ‹ рассмотрСли нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти. На Π·Π»ΠΎ всСм Ρ…Π΅ΠΉΡ‚Π΅Ρ€Π°ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ говорят, Ρ‡Ρ‚ΠΎ python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΉ, ΠΌΡ‹ смогли Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ ускорСния ΠΊΠΎΠ΄Π° Π² дСсятки Ρ€Π°Π·.

Π‘Ρ‹Π»ΠΈ рассмотрСны Π½Π΅ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ускорСния ΠΊΠΎΠ΄Π°. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Numba, NumPy, Nim ΠΈΠ»ΠΈ multiprocessing. ВсС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅. НСкоторыС Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ‰Π΅ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ python Π½Π΅ способСн Ρ€Π΅ΡˆΠΈΡ‚ΡŒ всё Π½Π° этом свСтС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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