Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° python: Python/Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° python β ΠΠΈΠΊΠΈΡΡΠ΅Π±Π½ΠΈΠΊ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python. ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ, ΠΊΠ°ΠΊ ΠΏΠΈΡΠΎΠ½ΡΡΠΈΠΉ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΡΠΈΠ»Ρ / Π₯Π°Π±Ρ
- ΠΠ±ΡΠ΅Π΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅
- Π€Π
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π€Π
- ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π€Π
- ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Ρ
- ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ Π€Π ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Python
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Xoltar Toolkit
- ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° returns
- ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ
- ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ vs ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½
- ΠΠΎΠ½ΡΠ΅ΠΏΡ yield from
- ΠΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ (ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π±ΡΠΎΠ°Π΄ΠΊΠ°ΡΡΠΈΠ½Π³)
- ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ΅ΠΉΡΠΈΠ½Π³Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°
- Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ
- ΠΡΠ²ΠΎΠ΄Ρ
- ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
- ΠΡΠΎΠ³ΠΈ
ΠΠΎΠ²ΠΎΡΡ ΠΎ Python, ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΈ ΠΠΠ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠΈΠ»ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ. Π ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΠΈ Π½ΠΈΠΆΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΅ΡΡ ΠΏΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² β Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ². ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π² Python. Π‘ΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΡ Π²ΡΡ ΠΎΠ΄ΡΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΈΡΠ½ΠΎ Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΊΠ½ΠΈΠ³Ρ «Fluent Python», Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΌΡ ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ , ΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΈ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΡΡΠΈ.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π€Π
ΠΠΎΠ²ΠΎΡΡ ΠΎ Π€Π ΡΡΠ°Π·Ρ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π€Π, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ½ΡΡΡ Π€Π β Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅, ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π½Π°ΠΌ Π² ΡΡΠΎΠΌ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°Π½ΠΈΡ.
ΠΡΠ΄Π΅Π»ΡΡΡ Π΄Π²Π΅ ΠΊΡΡΠΏΠ½ΡΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½Π°Ρ.
ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ βΠΠ°ΠΊ?β. Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ Π²Ρ Π·Π°Π΄Π°Π΅ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΡΡΠ΅ΠΉΠΊΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ.
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΠΎΠΏΡΠΎΡ βΠ§ΡΠΎ?β. ΠΠ΄Π΅ΡΡ Π²Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ, Π΄Π°Π΅ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, Π³ΠΎΠ²ΠΎΡΠΈΡΠ΅, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½ΠΎ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎΡ ΠΎΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΡΠΈΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ.
Π ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ΅ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Π³ΡΡΠΏΠΏΡ βΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅β ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Π³ΡΡΠΏΠΏΡ βΠ΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅β.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠ΅Π½ΠΎ Π½Π° Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ β ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ / Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ / ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π²Π΅Π΄ΡΡΡΡ ΠΏΠΎΡΠ°Π³ΠΎΠ²ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ βΡΠ²Π΅ΡΡ Ρ Π²Π½ΠΈΠ·β. ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ·ΡΠΊ C, Π² Π½Π΅ΠΌ, ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ (ΠΠΠ) ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠ»Π°ΡΡΡ ΠΎΠ±ΡΠ°Π·ΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΠ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°Ρ : ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ. ΠΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠ·ΡΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π΅ΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ Π² ΡΡΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ ΡΠ²Π»ΡΡΡΡΡ C#, Java.
Π ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ β ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠ°ΠΊΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ (Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ). Π―Π·ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ β Haskell, Lisp.
Π―Π·ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΡΠ²ΠΎΠΉΡΡΠ². ΠΡΠ»ΠΈ ΡΠ·ΡΠΊ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ, Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΠΎ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΡΡ, Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ Π€Π
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (First Class Object).
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΡΠ°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ β ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ Ρ.ΠΏ. - ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ·ΡΠΊΠ°Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠΈΠΊΠ»Π°, ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ.
- ΠΠΊΡΠ΅Π½Ρ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² (lists, ΠΎΡΡΡΠ΄Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Lisp β LISt Processing). Π‘ΠΏΠΈΡΠΊΠΈ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ ΠΎΠ±Ρ ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΈΠΊΠ»ΠΎΠ².
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (High Order Functions). Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° β ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Python Π²Ρ ΠΎΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ map. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Iterable ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Iterable ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Iterator ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ.
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ βΡΠΈΡΡΡΠΌΠΈβ (Pure Functions) β Ρ.Π΅. Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ² (ΠΈΠ½ΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΡΡ: Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΉΠ΄-ΡΡΡΠ΅ΠΊΡΠΎΠ²).
Π Python ΡΡΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° ΡΠΈΡΡΠΎΠΉ.
- ΠΠΊΡΠ΅Π½Ρ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ, Π° Π½Π΅ Π½Π° ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»ΡΡΡ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Ρ
ΠΠ΅ Π²ΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Ρ Π½ΠΈΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π°, Π½ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π€Π (ΡΠΏΠ°ΡΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ Π΄ΡΡΠ³Ρ Π·Π° ΠΈΡ ΠΏΠΎΠ΄Π±ΠΎΡΠΊΡ)
Π‘ΡΡΠ»ΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ.
Π‘ΡΡΠ»ΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ β ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π»ΡΠ±ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π‘ΡΡΠ»ΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ.
Π€ΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅.
ΠΠ΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π»Ρ ΠΎΠ΄Π½ΠΈΡ ΠΈ ΡΠ΅Ρ ΠΆΠ΅ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .
Π§ΠΈΡΡΡΠ΅.
Π§ΠΈΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π½Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΌΠΈΡΠΎΠΌ Π²Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ. ΠΡΠ΅ ΡΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Ρ, Π½ΠΎ Π½Π΅ Π²ΡΠ΅ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΡΡΡ.
Π’ΠΎΡΠ°Π»ΡΠ½ΡΠ΅.
Π’ΠΎΡΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠ²ΠΎΠ΄ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°.
Π’ΠΎΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ΅Π³Π΄Π° Π·Π°Π²Π΅ΡΡΠ°ΡΡΡΡ ΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ β ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π΄ΡΡΠ³ΠΎΠΉ
Π‘Π°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡ.
Π‘Π°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ-ΡΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π‘Π°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡΡ β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π Π°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠ΅ ΡΠ°ΠΉΠ΄ ΡΡΡΠ΅ΠΊΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ΅Π±Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ , Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΡΠΈ, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π»ΡΠ±ΠΎΠ΅ ΠΈΠ· Π²ΡΡΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ.
ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ.
ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ β ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΎΡΠΌ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ ΡΠΈΠΏΠ°. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΈΠΏΠ°.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΠΏΡΠΈ Π»ΡΠ±ΠΎΠΌ Π²ΡΠ±ΠΎΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ°, ΡΡΠΎ Π΄Π°Π΅Ρ ΠΌΠΎΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°ΡΡΡΠΆΠ΄Π°ΡΡ ΠΎ ΡΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ.
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ (closure)
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ β ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ ΠΊ Π½Π΅ΠΉ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡΡ Π΄Π°Π½Π½ΡΡ . Β© Steve Majewski
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ Π€Π ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Python
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π€Π Π² Python β ΡΡΠ½ΠΊΡΠΈΠΈ map()
, reduce()
, filter()
ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ lambda
. Π Python 1.x Π²Π²Π΅Π΄Π΅Π½Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ apply()
, ΡΠ΄ΠΎΠ±Π½Π°Ρ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΡΠΏΠΈΡΠΊΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΉ. Python 2.0 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Python 2.3 ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ°ΡΠ΅Π²ΡΠ΅ΠΉ, ΡΠ΄Π°Π»Π΅Π½Π° Π² Python 3.0
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ, Π½ΠΎ ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
Π±Π°Π·ΠΎΠ²ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΡΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python; Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (if
, elif
, else
, assert
, try
, except
, finally
, for
, break
, continue
, while
, def
) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π·Π°Π΄Π°ΡΠ° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ
ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΡΡ «Π½Π΅Π²ΡΠ°Π·ΡΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Python» (Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π²ΡΠ³Π»ΡΠ΄ΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Lisp’Π΅), ΡΡΠΎΠΈΡ ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ Π€Π Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΡ.
Π ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ
Π°ΠΊΠΎΠ², ΡΡΠΎΠ±Ρ Π½Π°Ρ ΠΊΠΎΠ΄ Π±ΡΠ» Π±ΠΎΠ»Π΅Π΅ Π€ΠΡΠ½ΡΠΉ. ΠΠ·Π±Π°Π²ΠΈΠΌΡΡ ΠΎΡ if
/elif
/else
Π² Python
# Normal statement-based flow control
if <cond1>:
func1()
elif <cond2>:
func2()
else:
func3()
# Equivalent "short circuit" expression
(<cond1> and func1()) or (<cond2> and func2()) or (func3())
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΠΈΠ» skymorp, ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ ΡΠΎΠ±Π»ΡΠ΄Π°Π΅ΡΡΡ Π»ΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ
func1
,func2
ΠΈ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ)func3
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ non falsy Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ func Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½ΡΡ, ΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (func3
) Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²ΡΠ΅Π³Π΄Π°.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ lambda Π΄Π»Ρ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ
pr = lambda s:s
namenum = lambda x: (x==1 and pr("one")) or (x==2 and pr("two")) or (pr("other"))
assert namenum(1) == 'one'
assert namenum(2) == 'two'
assert namenum(3) == 'other'
ΠΠ°ΠΌΠ΅Π½Π° ΡΠΈΠΊΠ»ΠΎΠ² Π½Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠ°, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΌΠ΅Π½Π° ΡΡΠ»ΠΎΠ²Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ². for ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ map().
for e in lst:
func(e) # statement-based loop
map(func,lst) # map-based loop
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
do_it = lambda f: f()
# let f1, f2, f3 (etc) be functions that perform actions
map(do_it, [f1,f2,f3])
ΠΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ while Π²ΠΏΡΡΠΌΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ.
# statement-based while loop
while <cond>:
<pre-suite>
if <break_condition>:
break
else:
<suite>
# FP-style recursive while loop
def while_block():
<pre-suite>
if <break_condition>:
return 1
else:
<suite>
return 0
while_FP = lambda: (<cond> and while_block()) or while_FP()
while_FP()
Π€Π Π²Π°ΡΠΈΠ°Π½Ρ while Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ while_block(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (statements). ΠΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΌΠ΅Π½Ρ Π±Π»ΠΎΠΊΠ° if/else Π² Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅).
Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΎΠ±ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΠ΅ΡΡΠ΅ (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ while myvar == 7) Π²ΡΡΠ΄ Π»ΠΈ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ ΡΠΈΠΊΠ»Π° (Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (Ρ ΠΎΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ Π² while_block()). ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ β Π·Π°ΡΡΠ°Π²ΠΈΡΡ while_block() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ.
Π‘ΡΠΎΠΈΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ:
# imperative version of "echo()"
def echo_IMP():
while 1:
x = input("IMP -- ")
if x == 'quit':
break
else:
print(x)
echo_IMP()
# utility function for "identity with side-effect"
def monadic_print(x):
print(x)
return x
# FP version of "echo()"
echo_FP = lambda: monadic_print(input("FP -- ")) == 'quit' or echo_FP()
echo_FP()
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅. ΠΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΠΈΠ» skymorp, Π² ΡΠ»ΡΡΠ°Π΅ Ρ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΡΠΈΠ»Π΅ΠΌ,
input("IMP -- ") == 'quit'
. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
ΠΡ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΡΠ°Π·ΠΈΠ»ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄, ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΉ (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ β Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΡΠ΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ).
ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ monadic_print(), Π½ΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π»ΡΠ±ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅. ΠΠ°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ monadic_print(x) Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΎ ΠΏΡΠΎΡΡΠΎ x.
ΠΠΎΡΠ»Π΅ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΈΡ Π½Π° Π½Π΅Π²ΡΠ°Π·ΡΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β «ΠΠ°ΡΠ΅ΠΌ?!». ΠΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ Π€Π, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ Π² Python. ΠΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠ°Ρ (ΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ) Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΌΠΎΠ½Π°Π΄. ΠΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠ΅Π±ΡΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠ², ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ.
# Nested loop procedural style for finding big products
xs = (1,2,3,4)
ys = (10,15,3,22)
bigmuls = []
# ...more stuff...
for x in xs:
for y in ys:
# ...more stuff...
if x*y > 25:
bigmuls.append((x,y))
# ...more stuff...
# ...more stuff...
print(bigmuls)
Π‘Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ #...more stuff...
β ΠΌΠ΅ΡΡΠ°, Π³Π΄Π΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ.
Π Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ
ΡΠΎΡΠ΅ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ xs
, ys
, bigmuls
, x
, y
ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ°Π»Π΅Π΅, ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ, Π° ΠΌΠΎΠ³ΡΡ ΠΈ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΏΠΎΡΠ΄Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡΡ /ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄Π°Π»ΡΡΡ (del) Π²Π°ΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π΅ΡΡΠΌΠ° ΠΎΠ±ΡΡΠ΅Π½. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ Π·Π°Π΄Π°ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ:
bigmuls = lambda xs,ys: filter(lambda (x,y):x*y > 25, combine(xs,ys))
combine = lambda xs,ys: map(None, xs*len(ys), dupelms(ys,len(xs)))
dupelms = lambda lst,n: reduce(lambda s,t:s+t, map(lambda l,n=n: [l]*n, lst))
print(bigmuls((1,2,3,4),(10,15,3,22)))
Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (ΠΈΠ»ΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°) ΠΏΡΠΎΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π±Π΅Π·ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ. ΠΠΌΠ΅ΡΡΠΎ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² β ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ β Π½Π°ΠΈΠ»ΡΡΡΠ°Ρ (ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ) ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
print([(x,y) for x in (1,2,3,4) for y in (10,15,3,22) if x*y > 25])
ΠΠ°, Π²ΡΡ Π²Π΅ΡΠ½ΠΎ, list, tuple, set, dict comprehensions ΠΈ generator expressions β ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π€Π ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅, ΠΏΠ΅ΡΠ΅ΠΊΠΎΡΠ΅Π²Π°Π»ΠΎ Π² Π΄ΡΡΠ³ΠΈΠ΅ Π½Π΅-Π€Π ΡΠ·ΡΠΊΠΈ
Π‘ΡΠ°Π·Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌΡΡ, ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠ°ΡΠ°Ρ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈΡΡ Π΄Π»Ρ Python 2, ΠΎΠ΄Π½Π°ΠΊΠΎ Π΄Π»Ρ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Xoltar Toolkit ΠΡΠΈΠ½Π° ΠΠ΅Π»Π»Π΅ΡΠ° (Bryn Keller) ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ Π½Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π€Π.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π€Π ΠΠ΅Π»Π»Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠ» Π² Π²ΠΈΠ΄Π΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π° ΡΠΈΡΡΠΎΠΌ Python. ΠΠΎΠΌΠΈΠΌΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ functional, Π² Xoltar Toolkit Π²Ρ ΠΎΠ΄ΠΈΡ ΠΌΠΎΠ΄ΡΠ»Ρ lazy, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΡΡΡΡΠΊΡΡΡΡ, Π²ΡΡΠΈΡΠ»ΡΠ΅ΠΌΡΠ΅ «ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ». ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Xoltar Toolkit ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π²Π°ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Haskell.
ΠΠΈΡΡΠΎ Π² Python Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ΠΈ, ΡΡΡΠ»Π°ΡΡΠ΅ΠΌΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π Π€Π ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π΄ΠΎΠΏΡΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΡΡΠ°Π΅ΡΡΡ.
>>> car = lambda lst: lst[0]
>>> cdr = lambda lst: lst[1:]
>>> sum2 = lambda lst: car(lst)+car(cdr(lst))
>>> sum2(range(10))
1
>>> car = lambda lst: lst[2]
>>> sum2(range(10))
5
Π Π½Π΅ΡΡΠ°ΡΡΡΡ, ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ sum2(range(10)) Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΊ ΡΠ°Π·Π½ΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ Π² Π΄Π²ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ.
Π ΡΡΠ°ΡΡΡΡ, ΠΌΠΎΠ΄ΡΠ»Ρ functional ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ Bindings, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅.
>>> from functional import *
>>> let = Bindings()
>>> let.car = lambda lst: lst[0]
>>> let.car = lambda lst: lst[2]
Traceback (innermost last):
File "<stdin>",
line 1, in ? File "d:\tools\functional.py",
line 976, in __setattr__ raise BindingError, "Binding '%s' cannot be modified." % name
functional.BindingError: Binding 'car' cannot be modified. >>> car(range(10)) 0
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΡΠ΅Π°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ BindingError, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΌ ΡΠ°ΠΊΡ Π΅Π³ΠΎ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠ΅Π»ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° returns
Π£ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΠ°Ρ ΠΠΈΠΊΠΈΡΠΎΠΉ Π‘ΠΎΠ±ΠΎΠ»Π΅Π²ΡΠΌ, Π½Π°ΡΠΈΠΌ ΡΠΎΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΈΠΊΠΎΠΌ, ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π€Π Π² Python. ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ maybe ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ
from returns.maybe import Maybe, maybe
@maybe # decorator to convert existing Optional[int] to Maybe[int]
def bad_function() -> Optional[int]:
...
maybe_number: Maybe[float] = bad_function().map(
lambda number: number / 2,
)
# => Maybe will return Some[float] only if there's a non-None value
# Otherwise, will return Nothing
ΠΠΎΠ»Π΅Π΅ ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΊ:
# Imperative style
user: Optional[User]
discount_program: Optional['DiscountProgram'] = None
if user is not None:
balance = user.get_balance()
if balance is not None:
credit = balance.credit_amount()
if credit is not None and credit > 0:
discount_program = choose_discount(credit)
# same with returns
user: Optional[User]
# Type hint here is optional, it only helps the reader here:
discount_program: Maybe['DiscountProgram'] = Maybe.from_value(
user,
).map( # This won't be called if `user is None`
lambda real_user: real_user.get_balance(),
).map( # This won't be called if `real_user.get_balance()` returns None
lambda balance: balance.credit_amount(),
).map( # And so on!
lambda credit: choose_discount(credit) if credit > 0 else None,
)
ΠΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½
# Imperative style
def fetch_user_profile(user_id: int) -> 'UserProfile':
"""Fetches UserProfile dict from foreign API."""
response = requests.get('/api/users/{0}'.format(user_id))
# What if we try to find user that does not exist?
# Or network will go down? Or the server will return 500?
# In this case the next line will fail with an exception.
# We need to handle all possible errors in this function
# and do not return corrupt data to consumers.
response.raise_for_status()
# What if we have received invalid JSON?
# Next line will raise an exception!
return response.json()
Π ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ returns
import requests
from returns.result import Result, safe
from returns.pipeline import flow
from returns.pointfree import bind
def fetch_user_profile(user_id: int) -> Result['UserProfile', Exception]:
"""Fetches `UserProfile` TypedDict from foreign API."""
return flow(
user_id,
_make_request,
bind(_parse_json),
)
@safe
def _make_request(user_id: int) -> requests.Response:
response = requests.get('/api/users/{0}'.format(user_id))
response.raise_for_status()
return response
@safe
def _parse_json(response: requests.Response) -> 'UserProfile':
return response.json()
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠΈΡΡΡΠΉ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΠ°Π·ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΠΈ Π½Π°ΡΠ΅Π³ΠΎ Π±ΠΈΠ·Π½Π΅ΡΠ°: ΠΡ Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ Ρ Π·Π°ΠΏΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ, Π·Π°ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ΅ΠΌ ΠΎΡΠ²Π΅Ρ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΠΎΡ Π±ΡΠ» ΡΡΠΏΠ΅ΡΠ½ΡΠΌ, Π° ΠΏΠΎΡΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠΌΠ΅ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π·Π°ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ @safe
. ΠΠ½ Π²Π΅ΡΠ½Π΅Ρ Success [YourType]
ΠΈΠ»ΠΈ Failure [Exception]
. Π Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠΎΡΠΈΡ Π½Π°ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅!
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎΡΠ½ΠΈΡΡ ΠΈΠ· Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΠ΅.
ΠΡΠΈΠΌ. Π―, ΠΊΠ°ΠΊ Π°Π²ΡΠΎΡ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» returns Π² ΠΏΡΠΎΠ΄Π΅ ΠΈ Π½Π΅ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π±ΡΠ΄Ρ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½ΠΎ Π½Π΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΎΠ± ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ.
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ
ΠΡΠ΅ΡΠ°ΡΠΈΡ β ΠΏΠΎ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΠΎΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ²ΡΡΠ΄Ρ.
>>> for x in [1,4,5,10]:
... print(x, end=' ')
...
1 4 5 10
Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΌΡ Π·Π½Π°Π΅ΠΌ, ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡΡ ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡΠΈΠΏΠ°ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌ). ΠΡΠΈΡΠΈΠ½Π°, ΠΏΠΎΡΠ΅ΠΌΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ β ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°
>>> items = [1, 4, 5]
>>> it = iter(items)
>>> it.__next__()
1
>>> it.__next__()
4
>>> it.__next__()
5
>>> it.__next__()
ΠΠ½ΡΡΡΠΈ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
for x in obj:
# statements
ΠΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
_iter = iter(obj) # Get iterator object
while 1:
try:
x = _iter.__next__() # Get next item
except StopIteration: # No more items
break
# statements
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ iter()
Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΌ. Π§ΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π² ΡΠ²ΠΎΡΠΌ ΠΊΠ»Π°ΡΡΠ΅, Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ __iter__()
ΠΈ __next__()
.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ΅:
>>> for x in Countdown(10):
... print(x, end=' ')
...
10 9 8 7 6 5 4 3 2 1
ΠΠ³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠ²Π°:
class Countdown(object):
def __init__(self,start):
self.start = start
def __iter__(self):
return CountdownIter(self.start)
class CountdownIter(object):
def __init__(self, count):
self.count = count
def __next__(self):
if self.count <= 0:
raise StopIteration
r = self.count
self.count -= 1
return r
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ β ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
def countdown(n):
while n > 0:
yield n
n -= 1
ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΠ΅ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° yield). ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ.
def countdown(n):
print("Counting down from", n)
while n > 0:
yield n
n -= 1
>>> x = countdown(10)
>>> x
<generator object at 0x58490>
>>>
Π€ΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ __next__()
.
>>> x = countdown(10)
>>> x
<generator object at 0x58490>
>>> x.__next__()
Counting down from 10
10
>>>
yield Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π½ΠΎ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π΅ __next__()
. ΠΡΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° Π²ΠΎΠ·Π±ΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ StopIteration
.
>>> x.__next__()
9
>>> x.__next__()
8
>>>
...
>>> x.__next__()
1
>>> x.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
StopIteration
>>>
ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ:
- Π€ΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ β Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°
- ΠΠ°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° (
__next__
,__iter__
ΠΈ Ρ. Π΄.), Ρ.ΠΊ. ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Ρyield
ΠΌΠ°Π³ΠΈΡ Python ΡΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½ΡΠΆΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
>>> def x():
... return 1
...
>>> def y():
... yield 1
...
>>> [i for i in dir(y()) if i not in dir(x())]
['__del__', '__iter__', '__name__', '__next__', '__qualname__', 'close', 'gi_code', 'gi_frame', 'gi_running', 'gi_yieldfrom', 'send', 'throw']
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ generator object
.
>>> a = [1,2,3,4]
>>> b = (2*x for x in a)
>>> b
<generator object at 0x58760>
>>> for i in b: print(b, end=' ')
...
2 4 6 8
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡ
(expression for i in s if condition)
# the same with
for i in s:
if condition:
yield expression
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ vs ΠΈΡΠ΅ΡΠ°ΡΠΎΡΡ
Π€ΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ. ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡ β ΡΠ°Π·ΠΎΠ²Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, Π½ΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΡΠ½ΠΎΠ²Π°, ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½ΠΎΠ²Π° Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ. ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡ ΡΠΏΠΈΡΠΊΠ° (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΠΈΠΌ)
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½
Π’Π΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠΌΠ΅Π΅ΡΡΡ Π·Π°Π΄Π°ΡΠ°:
Π£Π·Π½Π°ΠΉΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±Π°ΠΉΡΠΎΠ² Π΄Π°Π½Π½ΡΡ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ, ΡΡΠΌΠΌΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠΎΠ»Π±Π΅Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΆΡΡΠ½Π°Π»Π΅ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° Apache. Π Π΄Π°, ΡΠ°Π·ΠΌΠ΅Ρ Π»ΠΎΠ³ ΡΠ°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅ΡΡΡΡΡΡ Π² Π³ΠΈΠ³Π°Π±Π°ΠΉΡΠ°Ρ
ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΡΠΎΠΊΠ° Π² Π»ΠΎΠ³Π°Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
81.107.39.38 - ... "GET /ply/ply.html HTTP/1.1" 200 97238
Π§ΠΈΡΠ»ΠΎ Π±Π°ΠΉΡΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅:
bytes_sent = line.rsplit(None,1)[1]
ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΈΡΠ»ΠΎ ΠΈΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
81.107.39.38 - ... "GET /ply/ HTTP/1.1" 304 -
Π‘ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠΈΡΠ»ΠΎ
if bytes_sent != '-':
bytes_sent = int(bytes_sent)
Π ΠΈΡΠΎΠ³Π΅, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄
with open("access-log") as wwwlog:
total = 0
for line in wwwlog:
bytes_sent = line.rsplit(None,1)[1]
if bytes_sent != '-':
total += int(bytes_sent)
print("Total", total)
ΠΡ ΡΠΈΡΠ°Π΅ΠΌ ΡΡΡΠΎΠΊΠ° Π·Π° ΡΡΡΠΎΠΊΠΎΠΉ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌ ΡΡΠΌΠΌΡ. ΠΠΎ ΡΡΠΎ ΡΡΠ°ΡΡΠΉ ΡΡΠΈΠ»Ρ. ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΡ Π·Π°Π΄Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ².
with open("access-log") as wwwlog:
bytecolumn = (line.rsplit(None,1)[1] for line in wwwlog)
bytes_sent = (int(x) for x in bytecolumn if x != '-')
print("Total", sum(bytes_sent))
ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ, ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΡΠΎΠΊ, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ ΠΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½
ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΌΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ Π²Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎ, ΠΌΡ ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΠΌ Π΅Π΅ Π½Π° Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π²ΡΠ΅ΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΡΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄.
ΠΠ΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, ΡΡΠΎΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡΠΈ ΠΏΡΠΈΡΡΠ΄Π»ΠΈΠ²ΠΎΠΉ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠ°Π³ΠΈΠΈ. Π€Π°ΠΉΠ» ΠΈΠ· 1.3 ΠΠ ΠΊΠΎΠ΄ Π² ΡΡΠ°ΡΠΎΠΌ ΡΡΠΈΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΠ» Π·Π° 18.6 ΡΠ΅ΠΊΡΠ½Π΄, ΠΊΠΎΠ΄ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ Π±ΡΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ Π·Π° 16,7 ΡΠ΅ΠΊΡΠ½Π΄.
AWK Ρ ΡΠΎΠΉ ΠΆΠ΅ Π·Π°Π΄Π°ΡΠ΅ΠΉ ΡΠΏΡΠ°Π²ΠΈΠ»ΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π΅Π΅, Π·Π° 70.5 ΡΠ΅ΠΊΡΠ½Π΄
awk '{ total += $NF } END { print total }' big-access-log
ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΡΠ²ΠΎΠ΄Ρ:
- ΠΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π½Π΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π½ΠΎ ΠΈ Π½Π° 10% Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΡΡΠ°ΡΡΠΉ ΡΡΠΈΠ»Ρ
- ΠΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ΄Π°
- ΠΠΎΠ΄ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠΈΡΠ°Π΅ΡΡΡ
- Π, ΡΠ΅ΡΡΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΠΌΠ½Π΅ ΠΎΠ½ Π½ΡΠ°Π²ΠΈΡΡΡ Π² ΡΠ΅Π»ΠΎΠΌ Π±ΠΎΠ»ΡΡΠ΅
- ΠΠΈ ΡΠ°Π·Ρ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΌΡ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ
- Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΡΠ°ΠΉΠ»Π°ΠΌ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ
- ΠΠΎΠ΄Ρ ΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΎΡΠΏΠΎΡΠΎΠ±Π΅Π½ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ. Π§ΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Ρ Π½Π°Ρ Π±ΡΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ Π²ΠΈΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ? ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°Π·Π½ΡΠ΅ Π²ΠΈΠ΄Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄ΡΡΠ³ Π·Π° Π΄ΡΡΠ³ΠΎΠΌ.
ΠΠΎΠ½ΡΠ΅ΠΏΡ yield from
‘yield from’ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ Π΄Π΅Π»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
def countdown(n):
while n > 0:
yield n
n -= 1
def countup(stop):
n = 1
while n < stop:
yield n
n += 1
def up_and_down(n):
yield from countup(n)
yield from countdown(n)
>>> for x in up_and_down(3):
... print(x)
...
1
2
3
2
1
>>>
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ Π² Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
python (3.5 ΠΈ Π½ΠΈΠΆΠ΅) yield from
ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Π²ΠΌΠ΅ΡΡΠΎ await
, ΠΏΠΎΠΊΠ° await
Π½Π΅ ΡΡΠ°Π» Π½ΠΎΠ²ΡΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ»ΠΎΠ²ΠΎΠΌ, Ρ.ΠΊ. await
β ΠΏΠΎ ΡΡΡΠΈ, ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΡΡΡΠΈΠ½Ρ. Π§ΡΠΎΠ±Ρ Π½Π΅ Π²ΠΎΠ·Π»Π°Π³Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ Π½Π° yield from
ΠΈ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΠ°Π½ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ β await
.
ΠΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ (ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π±ΡΠΎΠ°Π΄ΠΊΠ°ΡΡΠΈΠ½Π³)
ΠΠ°Π΄Π°ΡΠ° β ΡΡΠΈΡΠ°ΡΡ Π»ΠΎΠ³ΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², ΠΈ ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΌ
ΠΠ° Π΄Π°Π½Π½ΠΎΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΌΡΠ»ΡΡΠΈΠΏΠ»Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π²ΡΡ Π² ΠΎΠ΄Π½ΠΎ) ΠΈ Π±ΡΠΎΠ°Π΄ΠΊΠ°ΡΡΠΈΠ½Π³ (ΠΎΠ΄Π½ΠΎ Π²ΠΎ Π²ΡΡ). Π§ΡΠΎ ΠΆ, Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠΎΠΌΠΈΡΡ ΠΈ Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ°Π·Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
# same with `tail -f`
def follow(thefile):
thefile.seek(0, os.SEEK_END) # End-of-file
while True:
line = thefile.readline()
if not line:
time.sleep(0.1) # Sleep briefly
continue
yield line
def gen_cat(sources):
# Π Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² ΠΏΠ»ΠΎΡΠΊΠΈΠΉ
for src in sources:
yield from src
def genfrom_queue(thequeue):
while True:
item = thequeue.get()
if item is StopIteration:
break
yield item
def sendto_queue(source, thequeue):
for item in source:
thequeue.put(item)
thequeue.put(StopIteration)
def multiplex(sources):
in_q = queue.Queue()
consumers = []
for src in sources:
thr = threading.Thread(target=sendto_queue, args=(src, in_q))
thr.start()
consumers.append(genfrom_queue(in_q))
return gen_cat(consumers)
def broadcast(source, consumers):
for item in source:
for c in consumers:
c.send(item)
class Consumer(object):
def send(self,item):
print(self, "got", item)
if __name__ == '__main__':
c1 = Consumer()
c2 = Consumer()
c3 = Consumer()
log1 = follow(open("foo/access-log"))
log2 = follow(open("bar/access-log"))
log3 = follow(open("baz/access-log"))
lines = multiplex([log1, log2, log3])
broadcast(lines,[c1,c2,c3])
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° β Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ³ΠΎ Π² ΡΡΠΎΠΌ Π½Π΅Ρ, Π²ΠΏΠΎΠ»Π½Π΅ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠ°ΡΡ ΡΠ°ΠΌΡΠ΅ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ΅ΠΉΡΠΈΠ½Π³Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°
Π’ΡΡ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Ρ ΡΠ΅Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΡΠ½Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΈ Π½Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ±ΠΎΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΈΠ½ΡΠ°.
def trace(source):
for item in source:
print(item)
yield item
lines = follow(open("access-log"))
log = trace(apache_log(lines))
r404 = trace(r for r in log if r['status'] == 404)
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄ΠΈΠΌ β ΡΠ°ΠΊΠΎΠΉ Π΄Π΅Π±Π°Π³ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠΎΠΈΡΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ², Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ Π΅Π³ΠΎ, ΠΏΠΎΠ»ΡΡΠΈΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ²Π΅Π΄Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΠΏΠΎΠ²ΡΡΠ΄Ρ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅. ΠΠ°ΡΠΈΠ½Π°Ρ Ρ 3.0 ΠΈΡ
ΡΡΠ°ΡΠ°ΡΡΡΡ Π²Π½Π΅Π΄ΡΡΡΡ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, pathlib.Path.rglob
, glob.iglob
, os.walk
, range
, map
, filter
. ΠΡΡΡ Π΄Π°ΠΆΠ΅ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ
β itertools
.
ΠΡΠ²ΠΎΠ΄Ρ
ΠΠ»ΡΡΡ:
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ β Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΎΠ±ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ
- Π‘ΠΈΠ»Π° ΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Ρ
- ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½Π°Ρ
- ΠΠ΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ
- ΠΠ°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠΠ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ²
- ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΠΈΠ΄Π΅Ρ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠ² Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ (ΡΠ΅ΡΡ, ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΡΡΠΈΠ½Ρ)
ΠΠΈΠ½ΡΡΡ
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π½Π΅ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π²Π·ΡΡΠ²Ρ Π³ΠΎΠ»ΠΎΠ²Ρ
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ»ΠΎΠΆΠ½Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Π²ΠΌΠ΅ΡΡΠ΅
- ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»ΡΡΡ ΠΎΡΠΎΠ±ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠ΅, Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌ.
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
Π ΠΠΠ ΠΈ Π€Π Π΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ²ΠΎΠΈ ΠΏΠ»ΡΡΡ, ΡΠ°ΠΊ ΠΈ ΡΠ²ΠΎΠΈ ΠΌΠΈΠ½ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° ΡΠΈΡΡΠΎΠΌ Π€Π Π½Π΅ Π½Π°ΠΏΠΈΡΠ΅ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ ΠΈ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Python, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Python ΡΡ ΠΎΠ΄ΡΡ Π½Π° Π½Π΅Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ , ΡΠΎ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π±Π΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ Π½Π° Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°Ρ β Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π€Π, ΡΠ°ΠΊ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎ Π²ΠΎΡΠ΅Π΄ΡΠΈΠΉ Π² Python.
ΠΠ°ΡΠ° Π³Π»Π°Π²Π½Π°Ρ Π·Π°Π΄Π°ΡΠ° β ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΡΠΉ, ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ, ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ, ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. Π€Π β Π½Π΅ ΡΠ°ΠΌΠΎΡΠ΅Π»Ρ, Π° Π»ΠΈΡΡ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, ΠΊΠ°ΠΊ ΠΈ Π²ΡΠ΅Π³Π΄Π°, ΡΡΠΎΠ±Ρ ΠΌΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΅ΡΡ Π»ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄!
ΠΡΠ»ΠΈ Π½Π°ΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΈΡΠΈΡΠ΅ Π² ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌΠΌΠ΅ Niccolum ΠΈΠ»ΠΈ Π½Π° ΠΏΠΎΡΡΡ [email protected]. ΠΡΠ΄Ρ ΡΠ°Π΄ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΊΡΠΈΡΠΈΠΊΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Python
Π₯ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ ΠΎ Python ΠΊΠ°ΠΊ ΠΎ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠΌ ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΎΠ½ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠ΅ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡΡΡ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π° Π½Π° Python.
Python β ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΡΠΉ, ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌΠΎΠΌ (Guido van Rossum). ΠΠ½ ΡΠΎΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Ρ ΠΌΠΎΡΠ½ΠΎΠΉ (Π½ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ) ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ. Python Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎΡΡΠΈ Π½Π° Π²ΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π½ΡΠ½Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΠΌΠΈ.
ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π½Π°ΡΠ°ΡΡ Ρ ΡΡΡΠ΄Π½Π΅ΠΉΡΠ΅Π³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° β Π° ΡΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠ°ΠΊΠΎΠ΅ Β«ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (FP)Β»? ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΎΡΠ²Π΅ΡΠΎΠ² β Β«ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Lisp, Scheme, Haskell, ML, OCAML, Clean, Mercury ΠΈΠ»ΠΈ Erlang (ΠΈΠ»ΠΈ Π΅ΡΠ΅ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ )Β». ΠΡΠΎΡ ΠΎΡΠ²Π΅Ρ, Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ, Π²Π΅ΡΠ΅Π½, Π½ΠΎ Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ½ΡΠ΅Ρ ΡΡΡΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ FP, ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ Π΄Π°ΠΆΠ΅ ΡΡΠ΅Π΄ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ². ΠΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ ΠΏΡΠΈΡΡΠ° ΠΎ ΡΡΠ΅Ρ ΡΠ»Π΅ΠΏΡΠ°Ρ ΠΈ ΡΠ»ΠΎΠ½Π΅. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ FP, ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΡΡΠ°Π²ΠΈΠ² Π΅Π³ΠΎ Β«ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ» (ΡΠΎΠΌΡ, ΡΡΠΎ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π½Π° ΡΠ·ΡΠΊΠ°Ρ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ C, Pascal, C++, Java, Perl, Awk, TCL ΠΈ Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ β ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅Π΅ ΠΌΠ΅ΡΠ΅, Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΡΡ).
Π₯ΠΎΡΡ Π°Π²ΡΠΎΡ Π²ΡΠ΅ΠΌΠΈ ΡΠΈΠ»Π°ΠΌΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ²Π΅ΡΡ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ΅Ρ , ΠΊΡΠΎ Π»ΡΡΡΠ΅ Π½Π΅Π³ΠΎ Π·Π½Π°Π΅Ρ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ, ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°Π΄Π°ΡΡΠ΅Π΅ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ². Π ΡΠ·ΡΠΊΠ°Ρ , Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ, Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π½ΠΈΠΆΠ΅ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, Π° Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΏΠ»ΠΎΡ ΠΎ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π²ΠΎΠ²ΡΠ΅:
* Π€ΡΠ½ΠΊΡΠΈΠΈ β ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°. Π’.Π΅., Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Ρ Β«Π΄Π°Π½Π½ΡΠΌΠΈΒ», ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ (Π²ΡΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°).
* ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠ·ΡΠΊΠ°Ρ
Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠΈΠΊΠ»Π°, ΠΊΡΠΎΠΌΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ.
* ΠΠΊΡΠ΅Π½Ρ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² (lists, ΠΎΡΡΡΠ΄Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Lisp β LISt Processing). Π‘ΠΏΠΈΡΠΊΠΈ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ ΠΎΠ±Ρ
ΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΎΠ² ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°ΠΌΠ΅Π½Ρ ΡΠΈΠΊΠ»ΠΎΠ².
* Β«Π§ΠΈΡΡΡΠ΅Β» ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ². ΠΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΡΠΈ ΠΏΠΎΠ²ΡΠ΅ΠΌΠ΅ΡΡΠ½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΏΠΎΠ΄Ρ
ΠΎΠ΄, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
* FP Π½Π΅ ΠΎΠ΄ΠΎΠ±ΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (statements), ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (Ρ.Π΅. ΡΡΠ½ΠΊΡΠΈΠΉ Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ). Π ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΠ»ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ).
* FP Π°ΠΊΡΠ΅Π½ΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ, Π° Π½Π΅ ΠΊΠ°ΠΊ.
* ΠΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ FP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Β«Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°Β» (ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΠ΅ΡΠΈΡΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΠΎΠΏΠ΅ΡΠΈΡΡΡΡΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ).
ΠΠ°ΡΠΈΡΠ½ΠΈΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΡΡΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ ΠΊ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ ΠΈ Π±Π΅Π·ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²ΡΡΠΎΠΊΠΈΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΠΊΠΈ ΠΎΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π½Π°ΡΠΊΠΈ, Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²Π° ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ .
Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ Python 1.0. ΠΠΎ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Python, ΠΎΠ½ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ Π² ΠΎΡΠ΅Π½Ρ ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅. Π’Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ Python, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ (ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΎ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ). Π Python 2.0 Π±ΡΠ»ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄Π°ΡΠ½ΠΎΠ΅ Β«ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΊΡΠ°ΡΠ΅Π½ΠΈΠ΅Β» β ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ (list comprehensions). Π₯ΠΎΡΡ ΠΈ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΠΏΠΈΡΠΎΡΠ½ΡΠ΅ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΡ Π΄Π΅Π»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ°ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΡΠ½Π΅Π΅.
ΠΠ°Π·ΠΎΠ²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ FP Π² Python β ΡΡΠ½ΠΊΡΠΈΠΈ map(), reduce(), filter() ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ lambda. Π Python 1.x Π²Π²Π΅Π΄Π΅Π½Π° ΡΠ°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ apply(), ΡΠ΄ΠΎΠ±Π½Π°Ρ Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΡΠΏΠΈΡΠΊΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌΡ Π΄ΡΡΠ³ΠΎΠΉ. Python 2.0 ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ, Π½ΠΎ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΡΡΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python; Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (βifβ, βelifβ, βelseβ, βassertβ, βtryβ, βexceptβ, βfinallyβ, βforβ, βbreakβ, βcontinueβ, βwhileβ, βdefβ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π·Π°Π΄Π°ΡΠ° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΡΡ Β«Π½Π΅Π²ΡΠ°Π·ΡΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠΉ PythonΒ» (Ρ ΠΊΠΎΠ΄ΠΎΠΌ, Π²ΡΠ³Π»ΡΠ΄ΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° LispβΠ΅), ΡΡΠΎΠΈΡ ΡΡΡΠ½ΠΈΡΡ, ΠΊΠ°ΠΊ FP Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΡ.
ΠΠ΅ΡΠ²ΠΎΠ΅, ΠΎ ΡΠ΅ΠΌ ΡΡΠΎΠΈΡ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ Π² Π½Π°ΡΠ΅ΠΌ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ β ΡΠΎ, ΡΡΠΎ Python Β«Π·Π°ΠΌΡΠΊΠ°Π΅Ρ Π½Π°ΠΊΠΎΡΠΎΡΠΊΠΎΒ» Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.1 ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π±Π»ΠΎΠΊΠ° βifβ/βelifβ/βelseβ Π² Π²ΠΈΠ΄Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΠ°ΠΊ:
#------ "ΠΠΎΡΠΎΡΠΊΠΎΠ·Π°ΠΌΠΊΠ½ΡΡΡΠ΅" ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π² Python -----# # ΠΠ±ΡΡΠ½ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ if <cond1>: func1() elif <cond2>: func2() else: func3() # ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΠ΅ "Π½Π°ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠ΅" Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ (<cond1> and func1()) or (<cond2> and func2()) or (func3()) # ΠΡΠΈΠΌΠ΅Ρ "Π½Π°ΠΊΠΎΡΠΎΡΠΊΠΎ Π·Π°ΠΌΠΊΠ½ΡΡΠΎΠ³ΠΎ" Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ >>> x = 3 >>> def pr(s): return s >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other')) 'other' >>> x = 2 >>> (x==1 and pr('one')) or (x==2 and pr('two')) or (pr('other')) 'two'
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, Π½Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ β Π½Π΅ Π±ΠΎΠ»Π΅Π΅, ΡΠ΅ΠΌ ΡΠ°Π»ΠΎΠ½Π½ΡΠΉ ΡΠΎΠΊΡΡ; ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅ΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ lambda ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ! Π Π°Π·, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠΎΡΠΊΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ lambda ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π² ΠΎΠ±ΡΠ΅ΠΉ ΡΠΎΡΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΡΠ»ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°Π·ΠΈΡΡΡΡΡ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
#--------- Lambda Ρ ΠΊΠΎΡΠΎΡΠΊΠΎΠ·Π°ΠΌΠΊΠ½ΡΡΡΠΌΠΈ ΡΡΠ»ΠΎΠ²Π½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ Π² Python -------# >>> pr = lambda s:s >>> namenum = lambda x: (x==1 and pr("one")) ... or (x==2 and pr("two")) ... or (pr("other")) >>> namenum(1) 'one' >>> namenum(2) 'two' >>> namenum(3) 'other'
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΆΠ΅ Π·Π°ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² Python. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ, ΡΠΎΠ·Π΄Π°Π² ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ lambda, ΠΌΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π»ΠΈ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅. ΠΡ ΠΈΠΌΠ΅Π»ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ Π½Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊ ΠΈΠΌΠ΅Π½Π°ΠΌ pr ΠΈ namenum Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΈΠ²ΡΠ·Π°ΡΡ ΠΊ ΡΡΠΈΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ ΡΠΈΡΠ»ΠΎ 23 ΠΈΠ»ΠΈ ΡΡΡΠΎΠΊΡ Β«spamΒ». ΠΠΎ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΈΡΠ»ΠΎ 23 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Ρ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ), ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ lambda, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Ρ Π½ΠΈ ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΈΠΌΠ΅Π½ΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ Π² Python β Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΠ»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Ρ Π½Π°ΡΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° β ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΈΡ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ map(), reduce() ΠΈ filter(). ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. map() ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΌ ΡΠΏΠΈΡΠΊΠ΅ (ΡΠΏΠΈΡΠΊΠ°Ρ ) ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². reduce() ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΈ ΠΊΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌΡ Π½Π°ΠΊΠΎΠΏΠΈΡΠ΅Π»Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, reduce(lambda n,m:n*m, range(1,10)) ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ 10! (ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» 10 β ΡΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ). filter() ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠΏΠΈΡΠΊΠ° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²Π΅ΡΠ½ΡΠ»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π°ΡΠΈΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ, Π½ΠΎ ΡΠ°ΡΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠΌ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡ ΡΡΠΈ ΡΡΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ FP-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΡΠΈΡΠΎΠΊΠΈΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π½Π΅ ΠΏΡΠΈΠ±Π΅Π³Π°Ρ ΠΊ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌ (statements), Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π»ΠΈΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
ΠΠ°ΠΌΠ΅Π½Π° ΡΠΈΠΊΠ»ΠΎΠ² Π½Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ°ΠΊ ΠΆΠ΅ ΠΏΡΠΎΡΡΠ°, ΠΊΠ°ΠΊ ΠΈ Π·Π°ΠΌΠ΅Π½Π° ΡΡΠ»ΠΎΠ²Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ². βforβ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΏΡΡΠΌΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ΠΎ Π² map(). Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ Π±Π»ΠΎΠΊ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΌΡ Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π½Π°ΡΡΠΈΡΡΡΡ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅):
#---------- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» 'for' Π² Python ----------# for e in lst: func(e) # ΡΠΈΠΊΠ» Π½Π° ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ 'for' map(func,lst) # ΡΠΈΠΊΠ», ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° map()
ΠΡΡΠ°ΡΠΈ, ΠΏΠΎΡ ΠΎΠΆΠ°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ° ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π’.Π΅., ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡΡΠ΅Π±ΡΡΡΠΈΡ «ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ, Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎ, Π·Π°ΡΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅». βmap()β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΠ°ΠΊ:
#----- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² Python ----------# # ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ do_it = lambda f: f() # ΠΡΡΡΡ f1, f2, f3 (etc) - ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ map(do_it, [f1,f2,f3]) # ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π½Π° map()
Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅, Π²ΡΡ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ βmap()β ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ΅ ΠΎΠ΄Π½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² β ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡ Π² ΡΠΏΠΈΡΠΎΠΊ.
ΠΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ βwhileβ Π²ΠΏΡΡΠΌΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠΆΠ½Π΅Π΅, Π½ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ :
#-------- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» 'while' Π² Python ----------# # ΠΠ±ΡΡΠ½ΡΠΉ (ΠΎΡΠ½ΠΎΠ²Π°Π½ΡΠΉ Π½Π° ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ 'while') ΡΠΈΠΊΠ» while <cond>: <pre-suite> if <break_condition>: break else: <suite> # Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΊΠ» Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅ def while_block(): <pre-suite> if <break_condition>: return 1 else: <suite> return 0 while_FP = lambda: (<cond> and while_block()) or while_FP() while_FP()
ΠΠ°Ρ Π²Π°ΡΠΈΠ°Π½Ρ βwhileβ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ while_block(), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΌΠ° ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ (statements). ΠΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΌΠ΅Π½Ρ Π±Π»ΠΎΠΊΠ° βif/elseβ Π² Π²ΡΡΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½Π΅ Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΎΠ·Π°ΠΌΠΊΠ½ΡΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅). Π ΡΠΎΠΌΡ ΠΆΠ΅, ΠΎΠ±ΡΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΌΠ΅ΡΡΠ΅ <cond> (Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ βwhile myvar==7β) Π²ΡΡΠ΄ Π»ΠΈ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ΅Π»ΠΎ ΡΠΈΠΊΠ»Π° (Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅) Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (Ρ ΠΎΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ Π² while_block()). ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ β Π·Π°ΡΡΠ°Π²ΠΈΡΡ while_block() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π΅Π³ΠΎ Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. Π‘ΡΠΎΠΈΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ:
#---------- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» 'echo' Π² Python ------------# # ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΠΈΡ "echo()" def echo_IMP(): while 1: x = raw_input("IMP -- ") if x == 'quit': break else print x echo_IMP() # Π‘Π»ΡΠΆΠ΅Π±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ "ΡΠΎΠΆΠ΄Π΅ΡΡΠ²ΠΎ Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌ ΡΡΡΠ΅ΠΊΡΠΎΠΌ" def monadic_print(x): print x return x # FP Π²Π΅ΡΡΠΈΡ "echo()" echo_FP = lambda: monadic_print(raw_input("FP -- "))=='quit' or echo_FP() echo_FP()
ΠΡ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²ΡΡΠ°Π·ΠΈΠ»ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄, ΡΠΈΠΊΠ»Ρ ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΈΡΡΠΎΠ³ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΉ (ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ β Π² Π²ΠΈΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ ΠΊΡΠ΄Π° ΡΠ³ΠΎΠ΄Π½ΠΎ). ΠΡ Π²ΡΠ΅ Π΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ monadic_print(), Π½ΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°Ρ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² Π»ΡΠ±ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ·ΠΆΠ΅ (ΡΡΠΎ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ).2 3 ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Π»ΡΠ±ΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π΅ monadic_print(x) Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π»ΠΎ ΠΏΡΠΎΡΡΠΎ x. Π FP (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π² Haskell) Π΅ΡΡΡ ΠΏΠΎΠ½ΡΡΠΈΠ΅ «ΠΌΠΎΠ½Π°Π΄Ρ» Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ «Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ Π½ΠΈΡΠ΅Π³ΠΎ, ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ».
ΠΠΎΡΠ»Π΅ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ΄Π΅Π»Π°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΠΈΠ·Π±Π°Π²Π»Π΅Π½ΠΈΡ ΠΎΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ Π·Π°ΠΌΠ΅Π½Π΅ ΠΈΡ Π½Π° Π½Π΅Π²ΡΠ°Π·ΡΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ β Β«ΠΠ°ΡΠ΅ΠΌ?!Β». ΠΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°Ρ ΠΌΠΎΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ FP, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΡ Π² Python. ΠΠΎ Π²Π°ΠΆΠ½Π΅ΠΉΡΠ°Ρ (ΠΈ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π² Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ) Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° β ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΎΠ±Π»Π°ΡΡΡΠΌΠΈ Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ ΠΌΠΎΠ½Π°Π΄. ΠΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΡΠ΅Π±ΡΡΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠ², ΡΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π½Π΅Π²Π΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ²ΡΠ΅ Π½Π΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ.
ΠΠ·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ³ΠΎ ΡΠ΅Π»Ρ β ΡΠ°ΡΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ ΡΠΈΡΠ΅Π», ΡΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 25. Π§ΠΈΡΠ»Π°, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΡ, ΡΠ°ΠΌΠΈ Π±Π΅ΡΡΡΡΡ ΠΈΠ· Π΄Π²ΡΡ Π΄ΡΡΠ³ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ². ΠΡΠ΅ ΡΡΠΎ Π²Π΅ΡΡΠΌΠ° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ°ΡΡΠΊΠ°Ρ ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΌΠΎΠ³ Π±Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
#--- ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ "ΠΏΠ΅ΡΠ°ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ" ----# # ΠΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ - ΠΏΠΎΠΈΡΠΊ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² xs = (1,2,3,4) ys = (10,15,3,22) bigmuls = [] #...ΠΏΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄... for x in xs: for y in ys: #...ΠΏΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄... if x*y > 25: bigmuls.append((x,y)) #...ΠΏΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄... #...ΠΏΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄... print bigmuls
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π» Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ. ΠΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ Π²ΡΡΡΠΎΠ΅Π½ Π² ΠΊΠΎΠ΄, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ΅Π»Π΅ΠΉ Π² ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. Π‘Π΅ΠΊΡΠΈΠΈ, ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°ΠΊ «#β¦ΠΏΡΠΎΡΠΈΠΉ код⦻ β ΠΌΠ΅ΡΡΠ°, Π³Π΄Π΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌ. Π Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΡΠΎΡΠ΅ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ xs, ys, bigmuls, x, y ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΡΠΈ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅. ΠΠ°Π»Π΅Π΅, ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΊΡΡΠΊΠ° ΠΊΠΎΠ΄Π° Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ, Π° ΠΌΠΎΠ³ΡΡ ΠΈ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡΡΡΡ ΠΏΠΎΡΠ΄Π΅Π΄ΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΡΡΠΈΡ Π² ΡΡΠ½ΠΊΡΠΈΡΡ /ΠΎΠ±ΡΠ΅ΠΊΡΠ°Ρ ΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Π»Π°ΡΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ Π·Π°ΡΠΈΡΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ΅Π³Π΄Π° ΡΠ΄Π°Π»ΡΡΡ (βdelβ) Π²Π°ΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΡΠΈΠΏ ΠΎΡΠΈΠ±ΠΎΠΊ Π²Π΅ΡΡΠΌΠ° ΠΎΠ±ΡΡΠ΅Π½.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΎ Π±Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ:
#--- Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°/ΠΏΠ΅ΡΠ°ΡΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠΉ Π½Π° Python ----# bigmuls = lambda xs,ys: filter(lambda (x,y):x*y > 25, combine(xs,ys)) combine = lambda xs,ys: map(None, xs*len(ys), dupelms(ys,len(xs))) dupelms = lambda lst,n: reduce(lambda s,t:s+t, map(lambda l,n=n: [l]*n, lst)) print bigmuls((1,2,3,4),(10,15,3,22))
ΠΡ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΠ΅ (βlambdaβ) ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΡΡΠΎ Π²Π»ΠΎΠΆΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΊΠ°ΠΊ ΡΠ°Π΄ΠΈ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ, ΡΠ°ΠΊ ΠΈ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ combine() β Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΠ»ΡΠΆΠ΅Π±Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ (Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠ°Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²). Π ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, dupelms() Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π»ΠΈΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ combine(). Π₯ΠΎΡΡ ΡΡΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π΅Π½, ΡΠ΅ΠΌ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ, ΠΏΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠΎΠ΄ Π² ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ bigmuls() ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΌ, ΡΠ΅ΠΌ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅.
Π Π΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ (ΠΈΠ»ΠΈ ΡΠΎ ΡΡΠΎΡΠΎΠ½Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°) ΠΏΡΠΎΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π±Π΅Π·ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ΄Π°, Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ Python, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ², Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ bigmuls, combine ΠΈ dupelms. ΠΡΠ»ΠΈ Π΄Π°Π»ΡΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ combine() Π½Π°ΡΠ½Π΅Ρ Π·Π½Π°ΡΠΈΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π΄ΡΡΠ³ΠΎΠ΅ β ΡΠ²Ρ! ΠΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ»Π°ΡΡ-ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΡ (Singleton) Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (Π½Π°ΠΏΡ. βs.bigmulsβ, etc.), Π½ΠΎ ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ.
ΠΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π·Π°Π΄Π°ΡΠ°, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠ΅ΡΠΈΠ»ΠΈ, ΡΠΊΡΠΎΠ΅Π½Π° Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python 2.0. ΠΠΌΠ΅ΡΡΠΎ Π²ΡΡΠ΅ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² β ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ β Π½Π°ΠΈΠ»ΡΡΡΠ°Ρ (ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ) ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
#----- ΠΠΎΠ΄ Python Π΄Π»Ρ "bigmuls" Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠΈΡΠΎΡΠ½ΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠΉ (list comprehensions) -----# print [(x,y) for x in (1,2,3,4) for y in (10,15,3,22) if x*y > 25]
ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π»Π° ΡΠΏΠΎΡΠΎΠ±Ρ Π·Π°ΠΌΠ΅Π½Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π² Python Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ (ΠΈΠ·Π±Π°Π²Π»ΡΡΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΎΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ²). ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΄ΡΠΌΡΠ²Π°Π½ΠΈΡ, Π½ΠΎ ΠΌΡ ΡΠ²ΠΈΠ΄Π΅Π»ΠΈ, ΡΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΠ»Π½ΡΠΌΠΈ ΠΈ ΠΎΠ±ΡΠΈΠΌΠΈ. Π ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΠ°ΡΡΡΡ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΌΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ; ΠΈ, Ρ Π½Π°Π΄Π΅ΡΡΡ, ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ «pro» ΠΈ «contra» ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°.
ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ ΠΊΠ°Π½Π°Π». ΠΠΎΠ΄ΠΏΠΈΡΠΈΡΡ, Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ!
Python Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ — ΠΎΠ΄ΠΈΠ½ ΠΈΠ· 4-ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΡΠΈΠ»Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΊΠΎΠΏΠ°ΡΠΊ Z
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ Python.
ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΡΠ²Π»ΡΡΡΡΡ:Β ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ², ΡΠ°Π·Π²ΠΈΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°Β ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ²,Β ΡΠ΅ΠΊΡΡΡΠΈΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈΒ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π°ΡΠΌΠΎΠ½ΠΈΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°ΡΡ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ.
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
- 1 ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
- 1.1 ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
- 1.2 Π‘ΠΏΠΈΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
- 1.3 ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²
- 1.3.1 map()
- 1.3.2 filter()
- 1.3.3 reduce()
- 1.3.4 apply()
- 1.4 ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
- 1.5 ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
- 1.6 ΠΠΎΠ΄ΡΠ»Ρ functools
- 1.7 ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
- 1.8 Π€ΡΠ½ΠΊΡΠΎΡΡ
- 2 ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
- 3 Π‘ΡΡΠ»ΠΊΠΈ
- 4 ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ Π² Python ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Β defΒ ΠΈΠ»ΠΈΒ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ:
def Β func(x, y):
return x**2 + y**2
func = lambda x, y: x**2 + y**2
Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ³ΡΡΠΈΡΡΡΡΒ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉΒ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡΒ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
func(2, y=7)
Π Π½Π°ΡΠ°Π»Π΅ ΠΈΠ΄ΡΡΒ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ²ΡΠΎΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈΒ None, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅Β returnΒ ΠΈΠ»ΠΈ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ΅Π½ ΠΏΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΒ ΠΊΠΎΡΡΠ΅ΠΆ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡΒ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
>>> (lambda x: x+2)(5)
7
ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π·Π°ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Python ΡΠ²Π»ΡΡΡΡΡΒ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ Π΅ΡΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π°ΡΠ°Π²Π½Π΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ .
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅Β (Π°Π½Π³Π».Β list comprehension)Β β Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Python. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΌΠ΅Π½ΡΡΠΈΡ 10, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
l = [x**2 for x in range(1,10)]
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅Β ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²
Π Python Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:Β map(),Β filter(),Β reduce(),Β apply().
map()
Π€ΡΠ½ΠΊΡΠΈΡΒ map()Β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> list1 = [7, 2, 3, 10, 12] >>> list2 = [-1, 1, -5, 4, 6] >>> map(lambda x, y: x*y, list1, list2) [-7, 2, -15, 40, 72]
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ ΡΠΏΠΈΡΠΊΠΎΠ²) ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> [x*y for x, y in zip(list1, list2)] [-7, 2, -15, 40, 72]
filter()
Π€ΡΠ½ΠΊΡΠΈΡΒ filter()Β ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠΈΠ½Π½ΠΎ:
>>> numbers = [10, 4, 2, -1, 6] >>> filter(lambda x: x < 5, numbers) # Π ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ x, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ x < 5 ΠΈΡΡΠΈΠ½Π½ΠΎ [4, 2, -1]
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> numbers = [10, 4, 2, -1, 6] >>> [x for x in numbers if x < 5] [4, 2, -1]
reduce()
ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΒ ΡΡΠ½ΠΊΡΠΈΡΒ reduce(). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°ΠΊ (Python 2):
>>> numbers = [2, 3, 4, 5, 6] >>> reduce(lambda res, x: res*x, numbers, 1) 720
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
Π¦Π΅ΠΏΠΎΡΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (res). ΠΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡΠΎΠΉ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π½ΡΠ»Ρ ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Π΅ΠΉ ΡΡΠΎ 1):
>>> reduce(lambda res, x: res*x, [], 1) 1
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΒ ΡΠ΅Π²Π΅ΡΡΒ ΡΠΏΠΈΡΠΊΠ°:
>>> reduce(lambda res, x: [x]+res, [1, 2, 3, 4], []) [4, 3, 2, 1]
ΠΠ»Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Python Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> numbers = [1, 2, 3, 4, 5] >>> sum(numbers) 15 >>> list(reversed(numbers)) [5, 4, 3, 2, 1]
Π Python 3 Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈΒ reduce()Β Π½Π΅Ρ, Π½ΠΎ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅Β functools.
apply()
Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (Python 2):
>>> def f(x, y, z, a=None, b=None): ... print x, y, z, a, b ... >>> apply(f, [1, 2, 3], {'a': 4, 'b': 5}) 1 2 3 4 5
Π Python 3 Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈΒ apply()Β ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
>>> def f(x, y, z, a=None, b=None): ... print(x, y, z, a, b) ... >>> f(*[1, 2, 3], **{'a': 4, 'b': 5}) 1 2 3 4 5
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅Β Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡΒ (Π°Π½Π³Π».Β closures):
def multiplier(n): "multiplier(n) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ Π½Π° n" def mul(k): return n*k return mul # ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ # multiplier = lambda n: lambda k: n*k mul2 = multiplier(2) # mul2 - ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΠ°Ρ Π½Π° 2, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, mul2(5) == 10
ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΡΠ»ΡΒ itertools) ΠΈ Π΄ΡΡΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΠ΅Π³ΠΎ ΠΈ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π³ΠΎΒ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ²Β (ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌΒ print, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ):
>>> it = enumerate(sorted("PYTHON")) # ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±ΡΠΊΠ² ΡΠ»ΠΎΠ²Π° >>> it.next() # ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (0, 'H') >>> print list(it) # ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° [(1, 'N'), (2, 'O'), (3, 'P'), (4, 'T'), (5, 'Y')]
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»ΡΒ itertools:
>>> from itertools import chain >>> print list(chain(iter("ABC"), iter("DEF"))) ['A', 'B', 'C', 'D', 'E', 'F']
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΒ groupbyΒ (Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ (Π² ΡΡΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ°). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ True ΠΈΠ»ΠΈ False Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. (ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ).
from math import cos from itertools import groupby lst = [cos(x*.4) for x in range(30)] # ΠΊΠΎΡΠΈΠ½ΡΡΠΎΠΈΠ΄Π° [list(y) for k, y in groupby(lst, lambda x: x > 0)] # Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π»
Π ΠΌΠΎΠ΄ΡΠ»Π΅Β itertoolsΒ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΊΡΠ°ΡΠΊΠΎ (Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅) ΠΈ Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡΒ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΒ β Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ².
ΠΠΎΠ΄ΡΠ»Ρ functools
Π Python 2.5 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΌΠΎΠ΄ΡΠ»ΡΒ functoolsΒ ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΒ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ:
>>> from functools import partial >>> def myfun(a, b): return a + b ... >>> myfun1 = partial(myfun, 1) >>> print myfun1(2) 3
(Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡΒ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉΒ ΠΈΠ»ΠΈΒ ΡΡΠ½ΠΊΡΠΎΡΠΎΠ²)
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Python Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ:
- ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ or ΠΈ and Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ
- Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ»Π°ΡΡΡ Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉΒ ΠΈΠ»ΠΈΒ ΡΡΠ½ΠΊΡΠΎΡΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- (Python 2.5) if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Β«Π»Π΅Π½ΠΈΠ²ΡΡΒ» ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ (Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ΅Π½)
ΠΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Β printΒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π»ΠΈΡΡ:
>>> def f(): ... print "f" ... return "f" ... >>> def g(): ... print "g" ... return "g" ... >>> f() if True else g() f 'f' >>> f() if False else g() g 'g'
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠΎΠ²:
- ΠΠ΅Π½ΠΈΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°
- ΠΠ΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄ Π³ΡΠ°ΡΠ°
- ΠΠ΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²
- ΠΠ°ΡΡΠΈΠ½Π³
Π€ΡΠ½ΠΊΡΠΎΡΡ
Π€ΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈΒ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°. ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΎΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΒ ()Β Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°Β __call__.
Π Python ΡΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² (func_codeΒ ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π΄ΡΡΠ³ΠΈΡ ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Β ΡΡΠ½ΠΊΡΠΈΠΉ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° (callback)Β Π² Π‘-ΠΊΠΎΠ΄.
Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΒ Ρ.Β ΠΏ.
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΉ Π΅ΠΌΡ ΡΡΠ½ΠΊΡΠΎΡ:
def addClosure(val1): def closure(val2): return val1 + val2 return closure class AddFunctor(object): def __init__(self, val1): self.val1 = val1 def __call__(self, val2): return self.val1 + val2 cl = addClosure(2) fn = AddFunctor(2) print cl(1), fn(1) # Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ "3 3"
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Ρ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ°Β valΒ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉΒ selfΒ (ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ΄Π½Ρ Python ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅).
Π’Π°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΎΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡΒ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ²Β Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΠΠ Π² Python, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Β«Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΒ» ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π°Π΄ Π½ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΈΡ . ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
class SlowFunctor(object): def __init__(self,func): self.func = func def __add__(self,val): # ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠ° Ρ ΡΠ΅ΠΌ-ΡΠΎ if isinstance(val,SlowFunctor): # Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΎΡ new_func = lambda *dt,**mp : self(*dt,**mp) + val(*dt,**mp) else: # Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ new_func = lambda *dt,**mp : self(*dt,**mp) + val return SlowFunctor( new_func ) def __call__(self,*dt): return self.func(*dt) import math def test1(x): return x + 1 def test2(x): return math.sin(x) func = SlowFunctor(test1) # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΎΡ func = func + SlowFunctor(test2) # ΡΡΠΎΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ func = (lambda x : x + 2)(func) # ΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ # ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ def func2(x): # ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ return test1(x) + test2(x) + 2 print func(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 3.14159265359 print func(math.pi) - func2(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 0.0
Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ²Π½ΠΎΡΡΡ Π² Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΒ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΏΡΠΈΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠ°ΠΌ: Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΒ β Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠ½ΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π²ΡΠ·ΠΎΠ²Π°ΠΌ Π²ΡΠ΅Ρ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Β lambda.
ΠΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠ΅Ρ Π½ΠΈΠΊΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ΅ΡΡΡ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ Π²Β ΠΡΠΈΠΌΠ΅ΡΠ°Ρ Python ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎΒ» ΠΊΠΎΠ΄Π° (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠ΅Π±ΡΡΡΠ΅Π³ΠΎΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ).
ΠΠΌΠ΅ΡΡΠΎ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π° Python ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡΒ C, Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈΒ XML-ΡΠ°ΠΉΠ»Ρ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π»Π΅Π½ΠΈΠ²ΡΠΌ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈΒ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΡΠΌΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΡΠΊΡ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΒ XΒ Π»Π΅Π½ΠΈΠ²ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ; Π΄Π»Ρ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ².
Π ΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π³Π΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β XΒ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π°, Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΠΊ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
Π Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠΊΠ΅, Π³Π΄Π΅Β XΒ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΡ Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅.
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΠΎΠΊ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅Β XΒ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ±ΡΠΎΡΠ΅Π½.
ΠΡΠΈΠ³Π»Π°ΡΠ°Ρ Π²ΡΠ΅Ρ Π²ΡΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π² ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ . ΠΡΠΈΡΠΈΠΊΡ ΠΈ ΠΎΠ±ΠΌΠ΅Π½ ΠΎΠΏΡΡΠΎΠΌ ΠΎΠ΄ΠΎΠ±ΡΡΡ ΠΈ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΡ. Π Ρ ΠΎΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΡΠ°ΠΉΡ Π°Π²ΡΠΎΡΠ°!
Π Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π½Π°ΠΆΠΈΠΌΠ°ΡΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΎΡΠΈΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ ΠΏΠΎΠ΄ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ°ΠΉΡΠ°.
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡβ¦
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python β ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python. ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΡΠ²Π»ΡΡΡΡΡ: ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ², ΡΠ°Π·Π²ΠΈΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ², ΡΠ΅ΠΊΡΡΡΠΈΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π°ΡΠΌΠΎΠ½ΠΈΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°ΡΡ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ Π² Python ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° def
ΠΈΠ»ΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ:
def func(x, y): return x**2 + y**2 func = lambda x, y: x**2 + y**2
Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ³ΡΡΠΈΡΡΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Π Π½Π°ΡΠ°Π»Π΅ ΠΈΠ΄ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ²ΡΠΎΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ None
, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ return
ΠΈΠ»ΠΈ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ΅Π½ ΠΏΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π·Π°ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Python ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ Π΅ΡΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π°ΡΠ°Π²Π½Π΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ .
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅[1] (Π°Π½Π³Π».Β list comprehension)Β β Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Python. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΌΠ΅Π½ΡΡΠΈΡ 10, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
l = [x**2 for x in range(1,10)]
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²
Π Python Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΡ
ΡΠ²Π»ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: map()
, filter()
, reduce()
, apply()
.
map()
Π€ΡΠ½ΠΊΡΠΈΡ map()
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> list1 = [7, 2, 3, 10, 12] >>> list2 = [-1, 1, -5, 4, 6] >>> map(lambda x, y: x*y, list1, list2) [-7, 2, -15, 40, 72]
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ ΡΠΏΠΈΡΠΊΠΎΠ²) ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> [x*y for x, y in zip(list1, list2)] [-7, 2, -15, 40, 72]
filter()
Π€ΡΠ½ΠΊΡΠΈΡ filter()
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠΈΠ½Π½ΠΎ:
>>> numbers = [10, 4, 2, -1, 6] >>> filter(lambda x: x < 5, numbers) # Π ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ x, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ x < 5 ΠΈΡΡΠΈΠ½Π½ΠΎ [4, 2, -1]
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> numbers = [10, 4, 2, -1, 6] >>> [x for x in numbers if x < 5] [4, 2, -1]
reduce()
ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΡΠ½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ reduce()
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°ΠΊ (Python 2):
>>>from functools import reduce >>>numbers = [2, 3, 4, 5, 6] >>> reduce(lambda res, x: res*x, numbers, 1) 720
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
Π¦Π΅ΠΏΠΎΡΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (res
). ΠΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡΠΎΠΉ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π½ΡΠ»Ρ ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Π΅ΠΉ ΡΡΠΎ 1):
>>> reduce(lambda res, x: res*x, [], 1) 1
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π²Π΅ΡΡ ΡΠΏΠΈΡΠΊΠ°:
>>> reduce(lambda res, x: [x]+res, [1, 2, 3, 4], []) [4, 3, 2, 1]
ΠΠ»Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Python Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> numbers = [1, 2, 3, 4, 5] >>> sum(numbers) 15 >>> list(reversed(numbers)) [5, 4, 3, 2, 1]
Π Python 3 Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ reduce()
Π½Π΅Ρ, Π½ΠΎ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ functools
.
apply()
Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (Python 2):
>>> def f(x, y, z, a=None, b=None): ... print x, y, z, a, b ... >>> apply(f, [1, 2, 3], {'a': 4, 'b': 5}) 1 2 3 4 5
Π Python 3 Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ apply()
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
>>> def f(x, y, z, a=None, b=None): ... print(x, y, z, a, b) ... >>> f(*[1, 2, 3], **{'a': 4, 'b': 5}) 1 2 3 4 5
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (Π°Π½Π³Π».Β closures)[2]:
def multiplier(n): "multiplier(n) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ Π½Π° n" def mul(k): return n*k return mul # ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ # multiplier = lambda n: lambda k: n*k mul2 = multiplier(2) # mul2 - ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΠ°Ρ Π½Π° 2, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, mul2(5) == 10
ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ itertools
) ΠΈ Π΄ΡΡΠ³ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΠ΅Π³ΠΎ ΠΈ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ print
, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ):
>>> it = enumerate(sorted("PYTHON")) # ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±ΡΠΊΠ² ΡΠ»ΠΎΠ²Π° >>> it.next() # ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (0, 'H') >>> print list(it) # ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° [(1, 'N'), (2, 'O'), (3, 'P'), (4, 'T'), (5, 'Y')]
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ itertools
:
>>> from itertools import chain >>> print list(chain(iter("ABC"), iter("DEF"))) ['A', 'B', 'C', 'D', 'E', 'F']
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ groupby
(Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ (Π² ΡΡΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ°). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ True ΠΈΠ»ΠΈ False Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. (ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ).
from math import cos from itertools import groupby lst = [cos(x*.4) for x in range(30)] # ΠΊΠΎΡΠΈΠ½ΡΡΠΎΠΈΠ΄Π° [list(y) for k, y in groupby(lst, lambda x: x > 0)] # Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π»
Π ΠΌΠΎΠ΄ΡΠ»Π΅ itertools
Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΊΡΠ°ΡΠΊΠΎ (Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅) ΠΈ Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡΒ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΒ β Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ².
ΠΠΎΠ΄ΡΠ»Ρ functools
Π Python 2.5 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ functools
ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ:
>>> from functools import partial >>> def myfun(a, b): return a + b ... >>> myfun1 = partial(myfun, 1) >>> print myfun1(2) 3
(Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΈΠ»ΠΈ
ΡΡΠ½ΠΊΡΠΎΡΠΎΠ²)
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Python Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ:
- ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ or ΠΈ and Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ
- Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ»Π°ΡΡΡ Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ[3] ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΎΡΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- (Python 2.5) if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Β«Π»Π΅Π½ΠΈΠ²ΡΡΒ» ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ (Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ΅Π½)
ΠΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° print
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π»ΠΈΡΡ:
>>> def f(): ... print "f" ... return "f" ... >>> def g(): ... print "g" ... return "g" ... >>> f() if True else g() f 'f' >>> f() if False else g() g 'g'
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠΎΠ²:
- ΠΠ΅Π½ΠΈΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°[4]
- ΠΠ΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄ Π³ΡΠ°ΡΠ°[5]
- ΠΠ΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²[6]
- ΠΠ°ΡΡΠΈΠ½Π³[7]
Π€ΡΠ½ΠΊΡΠΎΡΡ
Π€ΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°.
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΎΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ()
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° __call__
. Π
Python ΡΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
(func_code
ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π΄ΡΡΠ³ΠΈΡ
). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° (callback) Π² Π‘-ΠΊΠΎΠ΄. Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈΒ Ρ.Β ΠΏ.
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΉ Π΅ΠΌΡ ΡΡΠ½ΠΊΡΠΎΡ:
def addClosure(val1): def closure(val2): return val1 + val2 return closure class AddFunctor(object): def __init__(self, val1): self.val1 = val1 def __call__(self, val2): return self.val1 + val2 cl = addClosure(2) fn = AddFunctor(2) print cl(1), fn(1) # Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ "3 3"
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Ρ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎ Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° val
Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ self
(ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ΄Π½Ρ Python ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅).
Π’Π°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΎΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΠΠ Π² Python, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ
ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Β«Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΒ» ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π°Π΄ Π½ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΈΡ
.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
class SlowFunctor(object): def __init__(self,func): self.func = func def __add__(self,val): # ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠ° Ρ ΡΠ΅ΠΌ-ΡΠΎ if isinstance(val,SlowFunctor): # Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΎΡ new_func = lambda *dt,**mp : self(*dt,**mp) + val(*dt,**mp) else: # Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ new_func = lambda *dt,**mp : self(*dt,**mp) + val return SlowFunctor( new_func ) def __call__(self,*dt): return self.func(*dt) import math def test1(x): return x + 1 def test2(x): return math.sin(x) func = SlowFunctor(test1) # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΎΡ func = func + SlowFunctor(test2) # ΡΡΠΎΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ func = (lambda x : x + 2)(func) # ΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ # ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ def func2(x): # ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ return test1(x) + test2(x) + 2 print func(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 3.14159265359 print func(math.pi) - func2(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 0.0
Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ²Π½ΠΎΡΡΡ Π² Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΏΡΠΈΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠ°ΠΌ: Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΒ β Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠ½ΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π²ΡΠ·ΠΎΠ²Π°ΠΌ Π²ΡΠ΅Ρ
Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
lambda
. ΠΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ,
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠ΅Ρ
Π½ΠΈΠΊΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ΅ΡΡΡ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ Π² ΠΡΠΈΠΌΠ΅ΡΠ°Ρ
Python ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎΒ» ΠΊΠΎΠ΄Π° (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠ΅Π±ΡΡΡΠ΅Π³ΠΎΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ).
ΠΠΌΠ΅ΡΡΠΎ Π±Π°ΠΉΡΠΎΠΊΠΎΠ΄Π° Python ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΡ
ΠΎΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
C, Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ XML-ΡΠ°ΠΉΠ»Ρ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π»Π΅Π½ΠΈΠ²ΡΠΌ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈΒ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΡΠΌΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΡΠΊΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ X Π»Π΅Π½ΠΈΠ²ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ; Π΄Π»Ρ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ². Π ΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π³Π΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ X Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π°, Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΠΊ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠΊΠ΅, Π³Π΄Π΅ X ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΡ Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΠΎΠΊ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ X ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ±ΡΠΎΡΠ΅Π½.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
Π€Π Π½Π° Python. Π§Π°ΡΡΡ 7. Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° β ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠΎΡΠ½Π΅ΠΉΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ° ΠΈΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Python, ΠΊΠ°ΠΊ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, ΡΠ°ΠΊ ΠΈ Π² Π΅Π³ΠΎ ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅: Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ functools, operator ΠΈ itertools.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°?
ΠΠ° ΠΏΡΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° ΡΡΠ°ΡΠ΅ΠΉ ΠΌΡ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (High Order Functions ΠΈΠ»ΠΈ HOF), ΡΠ²Π½ΠΎ ΠΏΡΠΎ ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² ΡΡΠ°ΡΡΠ΅ βΠ€Π Π½Π° Python. Π§Π°ΡΡΡ 2. ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΠΈβ. Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° β ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ/ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Python ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ HOF, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ.Β
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°
Π Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±Π΅Π· ΠΈΠΌΠΏΠΎΡΡΠ° ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΡΠ½ΠΎΡΡΡΡΡ map ΠΈ filter.
Π€ΡΠ½ΠΊΡΠΈΡ map ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π²Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΡ:
>>> a = [1, 2, 3, 4, 5] >>> list(map(lambda x: x**2, a)) [1, 4, 9, 16, 25] >>> def fun(x): if x % 2 == 0: return 0 else: return x*2 >>> list(map(fun, a)) [2, 0, 6, 0, 10]
Π€ΡΠ½ΠΊΡΠΈΡ filter ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True.
ΠΡΠΈΠΌΠ΅ΡΡ:
>>> list(filter(lambda x: x > 0, [-1, 1, -2, 2, 0])) [1, 2] >>> list(filter(lambda x: len(x) == 2, ["a", "aa", "b", "bb"])) ['aa', 'bb']
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ βΠΏΠΈΡΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎβ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ map ΠΈ filter Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (list comprehensions) Ρ ΠΊΡΡΠ³Π»ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈΒ (Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ, Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΡΠΌ. βPython. Π£ΡΠΎΠΊ 7. Π Π°Π±ΠΎΡΠ° ΡΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ (list)β):
ΠΠ°ΡΠΈΠ°Π½Ρ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ map:
map(lambda x: x**2, [1,2,3])
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π°:
(v**2 for v in [1,2,3])
ΠΠ»Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΒ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ filter:
filter(lambda x: x > 0, [-1, 1, -2, 2, 0])
Π°Π½Π°Π»ΠΎΠ³ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
(v for v in [-1, 1, -2, 2, 0] if v > 0)
Π ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Python Π΅ΡΡΡ Π΄Π²Π° ΠΌΠΎΠ΄ΡΠ»Ρ: functools ΠΈ operator, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ ΠΈΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ HOF ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅.
ΠΠΎΠ΄ΡΠ»Ρ functools
ΠΠΎΠ΄ΡΠ»Ρ functools ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² ΠΈ HOF ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΈΠ±ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ.
HOF ΡΡΠ½ΠΊΡΠΈΠΈ
partial
Π€ΡΠ½ΠΊΡΠΈΡ partial ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠΌ. βΠ€ΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅β). Π‘ΡΡΡ ΠΈΠ΄Π΅ΠΈ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π° Π±Π°Π·Π΅ Π½Π΅Π΅ Π΄ΡΡΠ³ΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΎΡΠΎΡΠΈΠΏ:
partial(func, /, *args, **keywords)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- func
- Π€ΡΠ½ΠΊΡΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
- args
- ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
- keywords
- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ:
Π ΡΡΠ°ΡΡΠ΅ βΠ€Π Π½Π° Python. Π§Π°ΡΡΡ 2. ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΠΈβ ΠΌΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ Π² Π½Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ ΡΡΡΠΎΠΈΠ»ΠΈ Π΄Π»Ρ Π½Π΅Π΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ Π΅Π΅:
def faddr(x, y, z): Β Β Β return x + 2 * y + 3 * z
ΠΠΎΡΡΡΠΎΠΈΠΌ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ partial():
p_faddr = partial(faddr, 1, 2) >>> p_faddr(3) 14
ΠΠΎΡΡΡΠΎΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ Ρ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² y ΠΈ z:
>>> p_kw_faddr = partial(faddr, y=3, z=5) >>> p_kw_faddr(2) 23
partialmethod
ΠΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ partial(), ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΡΠΎΡΠΎΡΠΈΠΏ:
class partialmethod(func, /, *args, **keywords)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- func
- ΠΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
- args
- ΠΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
- keywords
- ΠΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°.
ΠΡΠΈΠΌΠ΅ΡΡ:
class Math: Β Β Β def mul(self, a, b): Β Β Β Β Β Β Β return a * b Β Β Β x10 = partialmethod(mul, 10) >>> m = Math() >>> m.mul(2,3) 6 >>> m.x10(5) 50
reduce
Π‘Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎΡΠΎΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ:
reduce(function, iterable[, initializer])
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- function
- Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ²Π΅ΡΡΠΊΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.
- iterable
- ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΡΠ²Π΅ΡΡΠΊΠΈ (ΠΈΡΠ΅ΡΠ°ΡΠΎΡ).
- initializer
- ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ²Π΅ΡΠΊΠΈ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ, ΡΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠ°Π½ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΡΠΈΠΌΠ΅ΡΡ:
>>> from operator import add >>> add(1,2) 3 >>> reduce(add, [1,2,3,4,5]) 15
update_wrapper
ΠΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π²ΡΠ³Π»ΡΠ΄Π΅Π»Π° ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±Π΅ΡΡΠΊΠ°.
ΠΡΠΎΡΠΎΡΠΈΠΏ:
update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- wrapper
- ΠΡΡ ΠΎΠ΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
- wrapped
- Π€ΡΠ½ΠΊΡΠΈΡ ΠΎΠ±Π΅ΡΡΠΊΠ°.
- assigned
- ΠΠΎΡΡΠ΅ΠΆ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΡ Ρ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: WRAPPER_ASSIGNMENTS, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½Ρ Π°ΡΡΠΈΠ±ΡΡΡ: __module__, __name__, __qualname__, __annotations__,Β __doc__.
- updated
- ΠΠΎΡΡΠ΅ΠΆ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΎΠ±Π΅ΡΡΠΊΠΈ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: WRAPPER_UPDATES, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π±ΡΠ΄ΡΡ Π·Π°ΠΌΠ΅ΡΠ΅Π½ Π°ΡΡΠΈΠ±ΡΡ: __dict__.
ΠΡΠΈΠΌΠ΅ΡΡ:
def x10(a):Β Β Β Β Β Β return a * 10 def some_mul(a: int) -> int: Β Β Β """a * some value""" Β Β Β return a * 1 wrapped_mul = update_wrapper(x10, some_mul) >>> wrapped_mul(3) 30 >>> wrapped_mul.__name__ 'some_mul' >>> wrapped_mul.__annotations__ {'a': <class 'int'>, 'return': <class 'int'>} >>> wrapped_mul.__doc__ 'a * some value'
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡΡ
@cached_property
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ° Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ Π·Π°ΡΡΠ°ΡΡ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠΎΡΡΡΠΏΠ½Π°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ Python 3.8.
ΠΡΠΎΡΠΎΡΠΈΠΏ:
@cached_property(func)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- func
- ΠΠ΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΈΠΌΠ΅ΡΡ:
ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ mean β ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ²ΠΎΠΉΡΡΠ²Ρ, Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ Ρ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠΌ @cached_property:
import functools class DataProc: Β Β Β def __init__(self, data_set): Β Β Β Β Β Β self._data_set = data_set Β Β Β @functools.cached_property Β Β Β def mean(self): Β Β Β Β Β Β return sum(self._data_set) / len(self._data_set) >>> d = DataProc([1,2,3,4,5]) >>> d.mean 5
@lru_cache
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ»Π°ΡΡΠ°).Β
ΠΡΠΎΡΠΎΡΠΈΠΏ:
@lru_cache(user_function)
@lru_cache(maxsize=128, typed=False)
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
- maxsize
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π½Π°Π±ΠΎΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ: 128.
- typed
- ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠ°Π²Π΅Π½ True, ΡΠΎ ΠΏΡΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ°ΠΊΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅:
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ Π² ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎ maxsize ΡΡΡΠΊ. ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ @lru_cache ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ cache_info(), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ LRU ΠΊΡΡ, ΠΎΠ½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΡΡΠ΅ΠΆ Ρ ΡΠ΅ΡΡΡΡΠΌΡ ΠΏΠΎΠ»ΡΠΌΠΈ: hits (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΉ), misses (ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΌΠ°Ρ ΠΎΠ²), maxsize (ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ°) ΠΈ currsize (ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ°). ΠΠ»Ρ ΠΎΡΠΈΡΡΠΊΠΈ ΠΊΡΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ cache_clear(). ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ typed=True, ΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΊΡΡΠ΅ΠΌ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΈΠΏ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ func(10) ΠΈ func(10.0) Π±ΡΠ΄ΡΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π²ΡΠ·ΠΎΠ²Ρ Π½Π° ΡΠ°Π·Π½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ (Π±ΡΠ΄ΡΡ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½Ρ ΠΏΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΡΡΠΈ).
ΠΡΠΈΠΌΠ΅ΡΡ:
@lru_cache(maxsize=16) def square(value): Β Β Β return value**2 >>> for v in [1, 2, 3, 4, 2, 3, 4, 5, 5, 6]: ... Β Β square(v) ...Β 1 4 9 16 4 9 16 25 25 36 >>> square.cache_info() CacheInfo(hits=4, misses=6, maxsize=16, currsize=6)
@total_ordering
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, Π΅ΡΠ»ΠΈ Π·Π°Π΄Π°Π½ ΠΎΠ΄Π½ΠΈ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²Β __lt__(), __le__(), __gt__(), __ge__() ΠΈ ΠΌΠ΅ΡΠΎΠ΄ __eq__().
ΠΡΠΎΡΠΎΡΠΈΠΏ:
@total_ordering
ΠΡΠΈΠΌΠ΅ΡΡ:
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ (Π΄ΡΠΎΠ±Π½ΡΠΌΠΈ) ΡΠΈΡΠ»Π°ΠΌΠΈ:
class Rational: Β Β Β def __init__(self, a, b): Β Β Β Β Β Β Β self.num = a Β Β Β Β Β Β Β self.den = b Β Β Β def __lt__(self, other): Β Β Β Β Β Β Β return (self.num / self.den) < (other.num / other.den) Β Β Β def __eq__(self, other): Β Β Β Β Β Β Β return (self.num == other.num) and (self.den == other.den)
Π ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ <, >, ==:
>>> a = Rational(1, 2) >>> b = Rational(3, 4) >>> a < b True >>> a == b False >>> a > b False
ΠΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ <=, >= Π½Π΅Π»ΡΠ·Ρ:
>>> a <= b Traceback (most recent call last): Β Β File "<stdin>", line 1, in <module> TypeError: '<=' not supported between instances of 'Rational' and 'Rational'
ΠΡΠ»ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ @total_ordering, ΡΠΎ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ Π² ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΡ Π½Π°Π±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ:
@total_ordering class Rational: Β Β Β def __init__(self, a, b): Β Β Β Β Β Β Β self.num = a Β Β Β Β Β Β Β self.den = b Β Β Β def __lt__(self, other): Β Β Β Β Β Β Β return (self.num / self.den) < (other.num / other.den) Β Β Β def __eq__(self, other): Β Β Β Β Β Β Β return (self.num == other.num) and (self.den == other.den)
ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ:
>>> a = Rational(1, 2) >>> b = Rational(3, 4) >>> a < b True >>> a <= b True >>> a == b False >>> a >= b False >>> a > b False
@singledispatch
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π² single-dispatch ΡΡΠ½ΠΊΡΠΈΡ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ±ΠΎΡ Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΠΏΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ singledispatchmethod.
ΠΡΠΎΡΠΎΡΠΈΠΏ:
@singledispatch
ΠΡΠΈΠΌΠ΅ΡΡ:
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ generic-ΡΡΠΊΡΠΈΡ Ρ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠΌ @singledispatch:
@singledispatch def test(arg): Β Β Β print(f"Generic, arg: {arg}")
ΠΡΠΈΠΌΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ²:
@test.register def _(arg: int): Β Β Β print(f"Int, arg: {arg}")
ΠΡΠΈΠΌΠ΅Ρ ΡΠ²Π½ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ register().
@test.register(float) def _(arg): Β Β Β print(f"Float, arg: {arg}")
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π»ΡΠΌΠ±Π΄Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:
test.register(str, lambda x: f"Str, arg: {x}")
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
def list_printer_already_exist(arg): Β Β Β print(f"List, arg {arg}") test.register(list, lambda x: f"List, arg: {x}")
ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ test() Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠ°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²:
>>> test(None) Generic, arg: None >>> test(1) Int, arg: 1 >>> test(2.0) Float, arg: 2.0 >>> test("hello") 'Str, arg: hello' >>> test([1,2,3]) 'List, arg: [1, 2, 3]'
@wraps
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΄Π»Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ update_wrapper().
ΠΡΠΎΡΠΎΡΠΈΠΏ:
@wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π΄Π»Ρ update_wrapper.
ΠΡΠΈΠΌΠ΅ΡΡ:
def some_mul(a: int) -> int: Β Β Β """a * some value""" Β Β Β return a * 1 @wraps(some_mul) def x20(a): Β Β Β return a * 20 >>> x20(3) 60 >>> x20.__name__ 'some_mul' >>> x20.__annotations__ {'a': <class 'int'>, 'return': <class 'int'>} >>> x20.__doc__ 'a * some value'
ΠΠΎΠ΄ΡΠ»Ρ operator
ΠΠΎΠ΄ΡΠ»Ρ operator ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ reduce ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ functools, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅, ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠ²Π΅ΡΡΠΊΠΈ. ΠΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ Π³Π΄Π΅-ΡΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΌΠ΅ΡΡΡ (Π² Π²ΠΈΠ΄Π΅ Π»ΡΠΌΠ±Π΄Ρ) Π»ΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π΅ΡΡΡ Π² ΡΠΎΡΡΠ°Π²Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ operator, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌ:
>>> from operator import mul >>> from functools import reduce >>> reduce(lambda a, b: a * b, [1,2,3,4,5]) 120 >>> reduce(mul, [1,2,3,4,5]) 120
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ operator.
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ | Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ | Π€ΡΠ½ΠΊΡΠΈΡ |
Π‘Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ | a + b | add(a, b) |
ΠΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡ | seq1 + seq2 | concat(seq1, seq2) |
Π’Π΅ΡΡ Π½Π° Π²Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ | obj in seq | contains(seq, obj) |
ΠΠ΅Π»Π΅Π½ΠΈΠ΅ | a / b | truediv(a, b) |
ΠΠ΅Π»Π΅Π½ΠΈΠ΅ | a // b | floordiv(a, b) |
ΠΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ΅ Π | a & b | and_(a, b) |
ΠΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ ΠΠΠ | a ^ b | xor(a, b) |
ΠΠΈΡΠΎΠ²Π°Ρ ΠΈΠ½Π²Π΅ΡΡΠΈΡ | ~ a | invert(a) |
ΠΠΎΠ±ΠΈΡΠΎΠ²ΠΎΠ΅ ΠΠΠ | a | b | or_(a, b) |
ΠΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ | a ** b | pow(a, b) |
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³ΠΎ, ΡΡΠΎ a Π΅ΡΡΡ b | a is b | is_(a, b) |
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³ΠΎ, ΡΡΠΎ a Π½Π΅ Π΅ΡΡΡ b | a is not b | is_not(a, b) |
ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡΒ ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ | obj[k] = v | setitem(obj, k, v) |
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ | del obj[k] | delitem(obj, k) |
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π΅Π³ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ | obj[k] | getitem(obj, k) |
Π‘Π΄Π²ΠΈΠ³ Π²Π»Π΅Π²ΠΎ | a << b | lshift(a, b) |
ΠΡΡΠ°ΡΠΎΠΊ ΠΎΡ Π΄Π΅Π»Π΅Π½ΠΈΡ | a % b | mod(a, b) |
Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ | a * b | mul(a, b) |
Π£ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ | a @ b | matmul(a, b) |
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠΈΡΠ»Π° | β a | neg(a) |
ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠ | not a | not_(a) |
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠΈΡΠ»Π° | + a | pos(a) |
Π‘Π΄Π²ΠΈΠ³ Π²ΠΏΡΠ°Π²ΠΎ | a >> b | rshift(a, b) |
ΠΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ΅Π·Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ | seq[i:j] = values | setitem(seq, slice(i, j), values) |
Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π·Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² | del seq[i:j] | delitem(seq, slice(i, j)) |
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π·Π° | seq[i:j] | getitem(seq, slice(i, j)) |
Π€ΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ | s % obj | mod(s, obj) |
ΠΡΡΠΈΡΠ°Π½ΠΈΠ΅ | a β b | sub(a, b) |
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΠΈ | obj | truth(obj) |
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° | a < b | lt(a, b) |
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° | a <= b | le(a, b) |
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π²Π΅Π½ΡΡΠ²Π° | a == b | eq(a, b) |
ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ΡΠ°Π²Π΅Π½ΡΡΠ²Π° | a != b | ne(a, b) |
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° | a >= b | ge(a, b) |
ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° | a > b | gt(a, b) |
ΠΠΎΠ΄ΡΠ»Ρ operator ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π² ΡΠ°ΠΌΠΊΠ°Ρ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΎΠ½ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ.
P.S.
ΠΠ²ΠΎΠ΄Π½ΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ βΠΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΠ΅ Π½Π° Pythonβ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΡΠ°. ΠΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΡΠΎΠ±ΡΠ°Π½Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ βΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ Π°Π»Π³Π΅Π±ΡΠ° Π½Π° Pythonβ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠ΅ΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ , ΡΠΎ ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Pandas.Β ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΡΒ Π²Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΡΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Pandas ΡΠΎΠ±ΡΠ°Π½Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ βPandas. Π Π°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΡΠΌΠΈβ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python. Π§Π°ΡΡΡ 2. ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΡΠΎ ΡΡΠΎ Π±ΡΠ΄ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ (Category: The Essence of Composition). Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΈΠ·ΠΌΡ ΠΏΠΎΠ½ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ Π½Π° Python.
ΠΠ»Ρ Π½Π°ΡΠ°Π» ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΡΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ²:Β
ΠΠ±ΡΡΡΠ°ΠΊΡΠΈΡ (Π»Π°Ρ. abstractio β ΠΎΡΠ²Π»Π΅ΡΠ΅Π½ΠΈΠ΅) β ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ·Π½Π°Π½ΠΈΡ ΠΎΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠΎΡΠΎΠ½, ΡΠ²ΠΎΠΉΡΡΠ², ΡΠ²ΡΠ·Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠ° ΠΈΠ»ΠΈ ΡΠ²Π»Π΅Π½ΠΈΡ) Ρ ΡΠ΅Π»ΡΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ , Π·Π°ΠΊΠΎΠ½ΠΎΠΌΠ΅ΡΠ½ΡΡ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠ². Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ β Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ: ΡΠ²Π΅Ρ, ΠΊΡΠΈΠ²ΠΈΠ·Π½Π°, ΠΊΡΠ°ΡΠΎΡΠ° ΠΈ Ρ. Π΄.Β
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ (Π»Π°Ρ. compositio β ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅) β ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ.Β
Π§ΠΈΡΠ»ΠΎ
ΠΠΎΠ³Π΄Π° Π³ΠΎΠ²ΠΎΡΡΡ ΠΏΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ»ΡΡΠ°ΡΡ ΡΡΠ°Π·Ρ, ΡΡΠΎ ΠΎΠ½ΠΎ βΠ±Π»ΠΈΠ·ΠΊΠΎ ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅β ΠΈ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΊ. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ°ΡΠΈΠΌΡΡ ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠ΅ΠΉ, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠ΅ΠΉ ΠΈ ΠΈΡ ΡΠΎΠ»ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.Β
ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΠΈ β Ρ ΠΏΠΎΠ½ΡΡΠΈΡ ΡΠΈΡΠ»Π°. Π’ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΡΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΡΠ²Π°. ΠΠ»Ρ Π½Π°Ρ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ: ΠΏΡΡΡ ΡΠ±Π»ΠΎΠΊ ΠΈΠ»ΠΈ ΠΏΡΡΡ ΡΡΡΠ»ΡΠ΅Π² β ΡΡΠΎ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΏΡΡΠ΅ΡΠΊΠΈ. Π§ΠΈΡΠ»ΠΎ ΠΏΡΡΡ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ Π΄ΡΠΌΠ°ΡΡ ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠΈ (ΡΡΡΠ»ΡΡ, ΡΠ±Π»ΠΎΠΊΠΈ ΠΈ Ρ.ΠΏ.), Π° ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅. ΠΠΎ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΈΡΡ ΡΡΡΡΡΠΈ Π»Π΅Ρ ΡΠ²ΠΎΠ»ΡΡΠΈΠΈ, ΡΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΡ (Π»ΡΠ΄ΠΈ) ΠΌΠΎΠ³Π»ΠΈ ΠΎΡΠ²Π»Π΅ΡΠ΅Π½Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»Π°. ΠΠ± ΡΡΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΏΠΈΡΠ΅Ρ ΠΠ»Π΅ΠΊΡΠ΅ΠΉ Π‘Π°Π²Π²Π°ΡΠ΅Π΅Π² Π² ΠΊΠ½ΠΈΠ³Π΅ βΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ° Π΄Π»Ρ Π³ΡΠΌΠ°Π½ΠΈΡΠ°ΡΠΈΠ΅Π²β, ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΡΠ°ΠΌ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ: ββ¦ Π² ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π³ΠΎΠ²ΠΎΡΡΡ βΡΠΎΡΠΎΠΊβ Π²ΠΌΠ΅ΡΡΠΎ βΡΠ΅ΡΡΡΡΠ΄Π΅ΡΡΡβ, Ρ ΠΎΡΡ ΡΠ°Π½ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°ΡΡ βΡΠΎΡΠΎΠΊ ΡΠΎΠ±ΠΎΠ»ΡΠΈΡ ΡΠΊΡΡΠΎΠΊβ, Π½ΠΎ Π½Π΅ βΡΠΎΡΠΎΠΊ Π΄Π΅ΡΠ΅Π²ΡΠ΅Π²β. Π’ΠΎ Π΅ΡΡΡ ΡΠΎΡΠΎΠΊ ΠΎΠ·Π½Π°ΡΠ°Π»ΠΎ Π½Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² Π²ΠΎΠΎΠ±ΡΠ΅, Π° ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ . Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΎΠΏΠ΅ΡΠΈΡΡΠ΅ΠΌ ΡΠΈΡΠ»Π°ΠΌΠΈ Π΄Π»Ρ ΡΡΠ΅ΡΠ° ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠ² (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ), Π° ΡΠ°ΠΌΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠΆΠ΅ Π² ΠΎΡΡΡΠ²Π΅ ΠΎΡ ΡΠ²ΡΠ·ΠΈ ΡΠΈΡΠ»Π° Ρ ΡΡΡΠ½ΠΎΡΡΡΡ.Β
Π€ΡΠ½ΠΊΡΠΈΡ
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΌ Π²Π°ΠΆΠ½ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ²Π½Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π±ΡΠ»Π° Π·Π°ΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΡΠ΅Π» Π½Π° Π±ΡΠΊΠ²Π΅Π½Π½ΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ β Π°Π»Π³Π΅Π±ΡΡ (ΡΡΠΎΠΈΡ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ Π΅Π΅ ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ²Π»ΠΈΡΠ»ΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΌΠ΅Π½Π° ΡΠΈΡΠ»Π° Π±ΡΠΊΠ²ΠΎΠΉ, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½ΡΠ»Ρ ΠΈ Ρ.Π΄.). ΠΡΠ»ΠΈ ΠΈΠ·ΡΡΠΈΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ:Β
1+2=3Β
4+7=11Β
121+144=265Β
β¦Β
ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΠΌ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΈΡΠ»Π° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ°ΠΌΠ΅Π½ΠΈΠ² ΡΠΈΡΠ»Π° Π½Π° Π±ΡΠΊΠ²Ρ, ΠΌΡ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Ρ ΡΡΠΎΠ²Π½Ρ ΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ, ΠΊΠΎΠ³Π΄Π° Π΄Π»Ρ Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π²Π°ΠΆΠ½Π° ΡΠΆΠ΅ ΡΠ°ΠΌΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ Π΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π° Π½Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠ°ΠΊΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ»ΠΎΠΆΠΈΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΠΈ Π΄Π²ΠΎΠΉΠΊΡ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΡΠΎΠΉΠΊΡ.Β
a + b = cΒ
ΠΠΎΡΡΡΠΎΠΈΠ² ΡΠΎΡΠΌΡΠ»Ρ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π²ΡΡΠ΅, ΠΌΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠΈΡΠ΅Π» ΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ β ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ»Ρ Π½Π°Ρ β ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΡΡΠΎ Π²Π°ΠΆΠ½ΡΠΉ ΡΠ°Π³ Π½Π° ΠΏΡΡΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΈΠ΄Π΅Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· Π·Π°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ, Π° ΠΏΠΎΡΠΎΠΌ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠ°Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎΡΡΡΠΎΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π»:Β
>>> def add(a, b):Β return a + bΒ >>> add(1, 3)Β 4Β >>> add(4, 7)Β 11
ΠΠ°Π»Π΅Π΅, Π½Π° ΡΠΌ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΈΠ΄Π΅Ρ Π²ΡΠ·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΎΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ Π½Π° ΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:Β
ΠΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²ΠΎΠΉ, Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ Π΅Π³ΠΎ ΠΈΠ·ΡΡΠΈΡΡ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² Π½Π΅ΠΌ Π΄Π²Π° ΡΠ°Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ ΡΠ°Π·Π½ΠΎΡΡΠΈ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π», ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ, ΠΈ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠΌΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΊΠΎΡΠ΅Π½Ρ.Β Β
ΠΠ²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ½ΡΡΠΈΠ΅ lambda-ΡΡΠ½ΠΊΡΠΈΠΈ (Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ): lambda-ΡΡΠ½ΠΊΡΠΈΡ β ΡΡΠΎ Π±Π΅Π·ΡΠΌΡΠ½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π²ΡΡΠΈΡΠ»ΡΡΡΠ°Ρ ΠΎΠ΄Π½ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅. Π Python ΠΎΠ½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΊ: Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ lambda, ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°, Π΄Π°Π»Π΅Π΅ ΡΡΠ°Π²ΠΈΡΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅, Π° ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ ΡΠ΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΠΎ Π½Π΅Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π² ΡΡΠ°ΡΡΠ΅ Python. Π£ΡΠΎΠΊ 10. Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Python.Β
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ. Π’ΠΎΡΠΊΡ Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ°ΠΌΠΈ Π±ΡΠ΄Π΅ΠΌ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΊΠ°ΠΊ ΠΊΠΎΡΡΠ΅ΠΆ (ΡΠΌ Python. Π£ΡΠΎΠΊ 8. ΠΠΎΡΡΠ΅ΠΆΠΈ (tuple)). ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ ΡΠ°Π·Π½ΠΎΡΡΡ Π΄Π²ΡΡ ΡΠΈΡΠ΅Π»:Β
>>> sq_sub = lambda x1, x2: (x2 - x1)**2
Π Π΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ dist:Β
>>> dist = lambda p1, p2: (sq_sub(p1[0], p2[0])+sq_sub(p1[1], p2[1]))**0.5
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ:Β
>>> point1 = (1, 1)Β >>> point2 = (4, 5)Β >>> dist(point1, point2)Β 5.0
ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ΄Π΅ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΈΠ· ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ. ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠΌΠΎΠΉ:
ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½Π° Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π²ΠΎΡ ΡΠ°ΠΊ:
h = g β f
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ΄Π° ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π Π΅ΡΠΈΠΌ Π½Π°ΡΡ Π·Π°Π΄Π°ΡΡ, Π·Π°Π΄Π°Π² Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ²Π½ΠΎ β ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ:Β
>>> sub = lambda a, b: a - b # ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΠΈΡΠ°Π½ΠΈΡΒ >>> sq = lambda x: x**2 # ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΒ >>> sm = lambda a, b: a + b # ΡΡΠ½ΠΊΡΠΈΡ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡΒ >>> sqrt = lambda x: x**0.5 # ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠΎΠΌΡ, ΡΡΠΎ Python ΡΠΌΠ΅Π΅Ρ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΠΌΡ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ dist ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:Β
>>> dist = lambda x1, y1, x2, y2: sqrt(sm(sq(sub(x1, x2)), sq(sub(y1, y2))))Β >>> dist(*point1, *point2)Β 5.0
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Ρ.Π΄., ΡΠΎ Π΅ΡΡΡ ΠΌΡ ΠΏΠΎΡΡΡΠΎΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΡΠ΄Π° ΠΏΡΠΎΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ dist Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»Π΅Π½, Π²ΡΠΎΡΠΎΠΉ Π±ΡΠ» ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π΄Π»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ°.Β
Π Π΅ΠΊΡΡΡΠΈΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΈΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π·Π°Π΄Π°Ρ (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ): ΠΏΠΎΡΡΠΈΡΠ°ΡΡ Π»ΠΎΠ³Π°ΡΠΈΡΠΌ, Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠΈΠ½ΡΡ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΠ½ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ³Π»Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΡΠΈΡΠ»Π° ΠΈ Ρ.Π΄. ΠΡΠ΅ ΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΎ, ΡΡΠΎ Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ ΡΠΈΡΠ»ΠΎ (ΠΈΠ»ΠΈ Π½Π°Π±ΠΎΡ ΡΠΈΡΠ΅Π»), Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠΎ Π±ΡΠ²Π°ΡΡ Π·Π°Π΄Π°ΡΠΈ, Π³Π΄Π΅ ΡΡΠΎΠ³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° ΡΠΈΡΠ»Π° ΠΈΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΠ΄Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ. ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΡΡΠΈΡ Π·Π°Π΄Π°Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΌ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠΎΡΠ΅ΠΊΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΡΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΡΠ»Π΅, ΠΌΡ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ: Π΄Π²Π° Π²ΡΡΠΈΡΠ°Π½ΠΈΡ, Π΄Π²Π° Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ, ΠΎΠ΄Π½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΠΊΠΎΡΠ΅Π½Ρ. ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ, Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π», ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΡΠΈΡΠ»ΠΎΠΌ, ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π» ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ: Π΄Π»Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° ΠΏΡΡΠΈ β ΠΏΡΡΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π΄Π»Ρ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° Π΄Π΅ΡΡΡΠΈ β Π΄Π΅ΡΡΡΡ.
ΠΠ»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ) Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ. Π‘ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΈΠ· Π½Π΅Π΅ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠΉ. Π ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π½Π° devpractice (https://devpractice.ru/fp-python-part1-general/#p32, https://devpractice.ru/about-rec-and-iter/), ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π½Π° Π½Π΅ΠΉ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ.Β
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ Π½Π° ΠΏΡΡΠΈ ΠΊ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ Π²Π½Π΅ΡΠ½Π΅, ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, Π±ΡΠ΄ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠΈΠ΅ ΡΠ΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ Π½Π°ΠΉΡΠΈ ΠΊΠ²Π°Π΄ΡΠ°ΡΡ ΡΠΈΡΠ΅Π» Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΈΠ»ΠΈ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠΈΡΠ΅Π» ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π½ΠΎΠ²ΡΠΉ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ΄ΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π°ΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡ Π½Π° ΠΈΠ΄Π΅Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠ΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°. ΠΠ΄Π΅Ρ, Π»Π΅ΠΆΠ°ΡΠ°Ρ Π² ΡΡΠΎΠΌ ΡΠΈΠΏΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΡΠ° ΠΆΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π½Π°ΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ 2+3=5, 7+8=15 ΠΈ Ρ.ΠΏ. ΠΊ ΡΠ°ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΠΌΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°Π»ΠΈΡΡ ΠΎΡ ΡΠΈΡΠ΅Π», Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΠ»ΠΈΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. Π’Π°ΠΊ ΠΈ Π·Π΄Π΅ΡΡ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ: Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΈΠ»ΠΈ Π²Π·ΡΡΠΈΠ΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΡΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°: ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ°.Β
Π’Π°ΠΊ, ΠΌΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠΌ ΠΊ ΠΈΠ΄Π΅Π΅, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΈΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½ΠΎΡΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° (higher-order function). Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡ, ΡΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΡΡΡ Π² Π²ΠΈΠ΄Π΅ lambdβΡ ΠΏΡΡΠΌΠΎ Π² ΠΌΠ΅ΡΡΠ΅ Π²ΡΠ·ΠΎΠ²Π°. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ² lambda-ΡΡΠ½ΠΊΡΠΈΠΉ:Β
ΠΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π² ΠΌΠ΅ΡΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:Β
>>> (lambda x: x*2)(3)
LambdβΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ:Β
>>> mul2 = lambda x: x*2Β >>> mul2(3)Β 6
Π€ΡΠ½ΠΊΡΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ , Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ map. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° (Π΅ΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ Python), Π΅ΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠΎΡΡΠΌ β Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΉ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅: Π²ΠΎΠ·Π²Π΅Π΄Π΅ΠΌ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ:Β
>>> list(map(lambda x: x**2, [1, 2, 3, 4, 5]))Β [1, 4, 9, 16, 25]
Π€ΡΠ½ΠΊΡΠΈΡ list Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΡ map.Β
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° β ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π΅ΡΠ»ΠΈ Π½Π°ΡΡΠΈΡΡΡΡ ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ ΠΌΡ Ρ ΡΠ°Π½ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² ΡΠ»ΠΎΠ²Π°ΡΡΡ , ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠ°ΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π½Π°ΡΠ°ΡΡ Ρ Π½Π΅ΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ. ΠΠ°ΡΠ° Π·Π°Π΄Π°ΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΠ΄Π½ΠΈ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ: ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π² ΡΠ΅Π»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΈΠΏΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°. ΠΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ²: Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π³Π΄Π΅-ΡΠΎ Π΄Π΅ΡΠΆΠ°ΡΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΡΠ΅Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΠ΄ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ Π² Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π²-ΡΡΠ΅ΡΡΠΈΡ : ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ, ΠΊΠΎΠΌΡ ΡΠ³ΠΎΠ΄Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π½ΡΠΆΠ΄, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠ΄ Π² Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ. Π’ΠΎ Π΅ΡΡΡ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠΆΠ΅Π»ΠΎ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Ρ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΈ Π²ΡΠ΄Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ β ΡΡΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡΠΎΠΌ, ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Ρ Π²ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅. ΠΠΎΡ ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:Β
>>> def is_config_valid(validator, data_struct):Β return validator(data_struct)
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:Β
>>> tmp_conf = {"test1": 123}
ΠΠ»Ρ Π½Π΅Π΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ:Β
>>> is_tmp_valid = lambda x: True if "test1" in x else False
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:Β
>>> is_config_valid(is_tmp_valid, tmp_conf)Β True
Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ:Β
>>> tmp2_conf = {"test2": 456}
ΠΠ°Π»ΠΈΠ΄Π°ΡΠΎΡ Π½Π°ΠΌ ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠΈΡ:Β
>>> is_config_valid(is_tmp_valid, tmp2_conf)Β False
Π€ΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
ΠΠΎΠΌΠΈΠΌΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π·Π°Π΄Π°ΡΠ° Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΡ. ΠΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π½Π°ΡΠ»Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΈ ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Π°Π·Π±Π΅ΡΠ΅ΠΌ ΡΡΠΈ ΠΏΠΎΠ½ΡΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ.Β
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅β ΡΡΠ½ΠΊΡΠΈΡ, Π² ΡΠ΅Π»Π΅ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π²Π½Π΅ ΡΠ΅Π»Π° ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠΊΡΡΠΆΠ°ΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΠ΅ΡΡ Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠΎΡΡΠ½ΠΈΠΌ ΡΡΡ ΠΈΠ΄Π΅Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅: ΠΏΠΎΡΡΡΠΎΠΈΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΈΠ΄Π° y = k*x + b Ρ Π·Π°ΡΠ°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°ΠΌΠΈ:Β
>>> def linear_builder(k, b):Β def helper(x):Β return k * x + bΒ return helper
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ 3 * x + 9Β
>>> linf = linear_builder(3, 9)Β >>> linf(5)Β 24
ΠΡΠ»ΠΈ Π²Π°Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»Π° ΡΠ΅ΠΌΠ° Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π²Π°ΠΌ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΡΠ°ΡΡΠ΅ ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Python.Β
Β ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β β ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡ ΠΌΠ½ΠΎΠ³ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. Π‘ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΎΡ Π²ΠΈΠ΄Π° f(x, y, z) ΠΊ Π²ΠΈΠ΄Ρ f(x)(y)(z). ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.Β
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π΅Ρ ΡΡΠΈ ΡΠΈΡΠ»Π°:Β
>>> def faddr(x, y, z):Β return x + y + zΒ >>> faddr(1, 2, 3)Β 6
ΠΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:Β
>>> def curr_faddr(x):Β def tmp_a(y):Β def tmp_b(z):Β return x+y+zΒ return tmp_bΒ return tmp_aΒ >>> curr_faddr(1)(2)(3)Β 6
ΠΠ° Π±Π°Π·Π΅ Π½Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:Β
>>> p_c_faddr = curr_faddr(1)(2)Β >>> p_c_faddr(3)Β 6
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ p_c_faddr Π΄Π΅Π»Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ 1+2+x, Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°.Β
Π€ΡΠ½ΠΊΡΠΈΠΈ β ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°Β
ΠΡΠ»ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ Π²ΡΠ΅ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ²ΠΎΠΉΡΡΠ², ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΎΠ½ Π±ΡΠ΄Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ:
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π° Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΡΡΡΠΊΡΡΡΠ΅ Π΄Π°Π½Π½ΡΡ ;Β
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π² Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ;Β
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½Π° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ;Β
- ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ;Β
- Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ.Β
Π‘ΡΡΠ½ΠΎΡΡΡ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ Π²ΡΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° (ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°). ΠΠ°ΠΊ Π±ΡΠ»ΠΎ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ, Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ², ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π Python ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ·ΡΠΊΠ° ΠΠ²ΠΈΠ΄ΠΎ Π²Π°Π½ Π ΠΎΡΡΡΠΌ ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ: ββ¦ Ρ ΠΎΡΡ ΡΠ΄Π΅Π»Π°Π» ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠΏΡΠ°Π²Π½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π» Python ΠΊΠ°ΠΊ ΡΠ·ΡΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡβ.Β
P.S.
ΠΠ²ΠΎΠ΄Π½ΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ βΠΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΠ΅ Π½Π° Pythonβ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΡΠ°. ΠΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅ ΡΠΎΠ±ΡΠ°Π½Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ βΠΠΈΠ½Π΅ΠΉΠ½Π°Ρ Π°Π»Π³Π΅Π±ΡΠ° Π½Π° Pythonβ.
ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΡΠ΅ΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π° Π΄Π°Π½Π½ΡΡ , ΡΠΎ ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ Pandas.Β ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ ΡΒ Π²Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΡΡΠΎΠΊΠ°ΠΌΠΈ. ΠΡΠ΅ ΡΡΠΎΠΊΠΈ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Pandas ΡΠΎΠ±ΡΠ°Π½Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ βPandas. Π Π°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΡΠΌΠΈβ.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python β ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python. ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ»ΠΊΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΡΠ²Π»ΡΡΡΡΡ: ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ², ΡΠ°Π·Π²ΠΈΡΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ², ΡΠ΅ΠΊΡΡΡΠΈΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. ΠΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π°ΡΠΌΠΎΠ½ΠΈΡΠ½ΠΎ ΡΠΎΡΠ΅ΡΠ°ΡΡ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°ΠΌΠΈ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΡ Π² Python ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° def
ΠΈΠ»ΠΈ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ:
def func(x, y): return x**2 + y**2 func = lambda x, y: x**2 + y**2
Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠ³ΡΡΠΈΡΡΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠΎΡΠ»Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π΄Π°ΡΡΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
Π Π½Π°ΡΠ°Π»Π΅ ΠΈΠ΄ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ. ΠΠ½ΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°Π΄Π°Π½Ρ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅. Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π²ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠΎΠ²ΡΠΎΡΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΡ.
Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΈΠ»ΠΈ None
, Π΅ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ return
ΠΈΠ»ΠΈ ΡΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ΅Π½ ΠΏΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ). ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΆ.
ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡ ΠΆΠ΅ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
ΠΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±Π½Ρ Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π·Π°ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
Π€ΡΠ½ΠΊΡΠΈΠΈ Π² Python ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΠΎ Π΅ΡΡΡ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π°ΡΠ°Π²Π½Π΅ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ .
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π‘ΠΏΠΈΡΠΊΠΎΠ²ΠΎΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅[1] (Π°Π½Π³Π».Β list comprehension)Β β Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Python. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° ΠΊΠ²Π°Π΄ΡΠ°ΡΠΎΠ² ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π», ΠΌΠ΅Π½ΡΡΠΈΡ 10, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
l = [x**2 for x in range(1,10)]
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ²
Π Python Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΡ
ΡΠ²Π»ΡΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ: map()
, filter()
, reduce()
, apply()
.
map()
Π€ΡΠ½ΠΊΡΠΈΡ map()
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> list1 = [7, 2, 3, 10, 12] >>> list2 = [-1, 1, -5, 4, 6] >>> map(lambda x, y: x*y, list1, list2) [-7, 2, -15, 40, 72]
ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ (ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ ΡΠΏΠΈΡΠΊΠΎΠ²) ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΎΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> [x*y for x, y in zip(list1, list2)] [-7, 2, -15, 40, 72]
filter()
Π€ΡΠ½ΠΊΡΠΈΡ filter()
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡΠΈΠ½Π½ΠΎ:
>>> numbers = [10, 4, 2, -1, 6] >>> filter(lambda x: x < 5, numbers) # Π ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ x, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ x < 5 ΠΈΡΡΠΈΠ½Π½ΠΎ [4, 2, -1]
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠΈΡΠΊΠΎΠ²ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ:
>>> numbers = [10, 4, 2, -1, 6] >>> [x for x in numbers if x < 5] [4, 2, -1]
reduce()
ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΠΏΠΎΡΠ΅ΡΠ½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ reduce()
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΡΠ°ΠΊ (Python 2):
>>>from functools import reduce >>>numbers = [2, 3, 4, 5, 6] >>> reduce(lambda res, x: res*x, numbers, 1) 720
ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅:
Π¦Π΅ΠΏΠΎΡΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° (res
). ΠΡΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΡΠΎΠΉ, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ (Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ Π½ΡΠ»Ρ ΠΌΠ½ΠΎΠΆΠΈΡΠ΅Π»Π΅ΠΉ ΡΡΠΎ 1):
>>> reduce(lambda res, x: res*x, [], 1) 1
Π Π°Π·ΡΠΌΠ΅Π΅ΡΡΡ, ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ , Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΡΠΏΠΈΡΠΎΠΊ. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠ΅Π²Π΅ΡΡ ΡΠΏΠΈΡΠΊΠ°:
>>> reduce(lambda res, x: [x]+res, [1, 2, 3, 4], []) [4, 3, 2, 1]
ΠΠ»Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Python Π΅ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> numbers = [1, 2, 3, 4, 5] >>> sum(numbers) 15 >>> list(reversed(numbers)) [5, 4, 3, 2, 1]
Π Python 3 Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ reduce()
Π½Π΅Ρ, Π½ΠΎ Π΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ functools
.
apply()
Π€ΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ, Π·Π°Π΄Π°Π½Π½ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ (Python 2):
>>> def f(x, y, z, a=None, b=None): ... print x, y, z, a, b ... >>> apply(f, [1, 2, 3], {'a': 4, 'b': 5}) 1 2 3 4 5
Π Python 3 Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ apply()
ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ:
>>> def f(x, y, z, a=None, b=None): ... print(x, y, z, a, b) ... >>> f(*[1, 2, 3], **{'a': 4, 'b': 5}) 1 2 3 4 5
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π²Π½ΡΡΡΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ (Π°Π½Π³Π».Β closures)[2]:
def multiplier(n): "multiplier(n) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΡΡ Π½Π° n" def mul(k): return n*k return mul # ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ # multiplier = lambda n: lambda k: n*k mul2 = multiplier(2) # mul2 - ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΌΠ½ΠΎΠΆΠ°ΡΡΠ°Ρ Π½Π° 2, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, mul2(5) == 10
ΠΡΠ΅ΡΠ°ΡΠΎΡΡ
ΠΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠ΄ΡΠ»Ρ itertools
) ΠΈ Π΄ΡΡΠ³ΠΈΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»ΡΡΡΠ΅Π³ΠΎ ΠΈ ΡΠΎΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ print
, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π² Π½Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΡΠ»ΠΈ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΎΠΊ):
>>> it = enumerate(sorted("PYTHON")) # ΠΈΡΠ΅ΡΠ°ΡΠΎΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π±ΡΠΊΠ² ΡΠ»ΠΎΠ²Π° >>> it.next() # ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (0, 'H') >>> print list(it) # ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ° [(1, 'N'), (2, 'O'), (3, 'P'), (4, 'T'), (5, 'Y')]
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ itertools
:
>>> from itertools import chain >>> print list(chain(iter("ABC"), iter("DEF"))) ['A', 'B', 'C', 'D', 'E', 'F']
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ groupby
(Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎ), Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»ΡΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ (Π² ΡΡΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΡΠΎΠ±ΡΠ°Π½Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ°). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠ»ΡΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ True ΠΈΠ»ΠΈ False Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. (ΠΠ»Ρ ΡΠ΅Π»Π΅ΠΉ Π²ΡΠ²ΠΎΠ΄Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ).
from math import cos from itertools import groupby lst = [cos(x*.4) for x in range(30)] # ΠΊΠΎΡΠΈΠ½ΡΡΠΎΠΈΠ΄Π° [list(y) for k, y in groupby(lst, lambda x: x > 0)] # Π³ΡΡΠΏΠΏΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π»
Π ΠΌΠΎΠ΄ΡΠ»Π΅ itertools
Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΊΡΠ°ΡΠΊΠΎ (Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΡΡΠΈΠ»Π΅) ΠΈ Ρ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡΒ β ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΒ β Π²ΡΡΠ°Π·ΠΈΡΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΏΠΈΡΠΊΠΎΠ².
ΠΠΎΠ΄ΡΠ»Ρ functools
Π Python 2.5 ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ functools
ΠΈ Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ:
>>> from functools import partial >>> def myfun(a, b): return a + b ... >>> myfun1 = partial(myfun, 1) >>> print myfun1(2) 3
(Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ ΠΈΠ»ΠΈ
ΡΡΠ½ΠΊΡΠΎΡΠΎΠ²)
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
ΠΠ΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² Python Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ:
- ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ or ΠΈ and Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΡΡ Π²ΡΠΎΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠΌ
- Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΊΠ»Π°ΡΡΡ Ρ Π»Π΅Π½ΠΈΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ[3] ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΎΡΡ
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ
- (Python 2.5) if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ Β«Π»Π΅Π½ΠΈΠ²ΡΡΒ» ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ (Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½ΡΠΆΠ΅Π½)
ΠΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ if-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° print
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π»ΠΈΡΡ:
>>> def f(): ... print "f" ... return "f" ... >>> def g(): ... print "g" ... return "g" ... >>> f() if True else g() f 'f' >>> f() if False else g() g 'g'
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΈΠ· ΠΊΠ½ΠΈΠ³ΠΈ ΡΠ΅ΡΠ΅ΠΏΡΠΎΠ²:
- ΠΠ΅Π½ΠΈΠ²Π°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°[4]
- ΠΠ΅Π½ΠΈΠ²ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄ Π³ΡΠ°ΡΠ°[5]
- ΠΠ΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²[6]
- ΠΠ°ΡΡΠΈΠ½Π³[7]
Π€ΡΠ½ΠΊΡΠΎΡΡ
Π€ΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠΌ, ΡΠΎ Π΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π°.
ΠΠ»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΎΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ()
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° __call__
. Π
Python ΡΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ²
(func_code
ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π΄ΡΡΠ³ΠΈΡ
). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ½ΠΊΡΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΉ
ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° (callback) Π² Π‘-ΠΊΠΎΠ΄. Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡΠΌΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈΒ Ρ.Β ΠΏ.
ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΠΉ Π΅ΠΌΡ ΡΡΠ½ΠΊΡΠΎΡ:
def addClosure(val1): def closure(val2): return val1 + val2 return closure class AddFunctor(object): def __init__(self, val1): self.val1 = val1 def __call__(self, val2): return self.val1 + val2 cl = addClosure(2) fn = AddFunctor(2) print cl(1), fn(1) # Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ "3 3"
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΊΠΎΠ΄ Ρ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½Π½ΠΎ Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°ΡΡΠΈΠ±ΡΡΠ° val
Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ self
(ΡΠΎ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠ΄Π½Ρ Python ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅).
Π’Π°ΠΊΠΆΠ΅ ΡΡΠ½ΠΊΡΠΎΡΡ Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΠΠ Π² Python, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ
ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Β«Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΒ» ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π½Π°Π΄ Π½ΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ ΠΈΡ
.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΈΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
class SlowFunctor(object): def __init__(self,func): self.func = func def __add__(self,val): # ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΎΡΠ° Ρ ΡΠ΅ΠΌ-ΡΠΎ if isinstance(val,SlowFunctor): # Π΅ΡΠ»ΠΈ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΎΡ new_func = lambda *dt,**mp : self(*dt,**mp) + val(*dt,**mp) else: # Π΅ΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠ΅ new_func = lambda *dt,**mp : self(*dt,**mp) + val return SlowFunctor( new_func ) def __call__(self,*dt): return self.func(*dt) import math def test1(x): return x + 1 def test2(x): return math.sin(x) func = SlowFunctor(test1) # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΎΡ func = func + SlowFunctor(test2) # ΡΡΠΎΡ ΡΡΠ½ΠΊΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ Ρ ΡΡΠ½ΠΊΡΠΎΡΠ°ΠΌΠΈ func = (lambda x : x + 2)(func) # ΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΠΈ # ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ def func2(x): # ΠΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ return test1(x) + test2(x) + 2 print func(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 3.14159265359 print func(math.pi) - func2(math.pi) # ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ 0.0
Π€ΡΠ½ΠΊΡΠΎΡΡ ΠΏΡΠΈΠ²Π½ΠΎΡΡΡ Π² Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»Π΅Π½ΠΈΠ²ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, ΠΏΡΠΈΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠ°ΠΌ: Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΒ β Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ.
ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠ½ΠΊΡΠΎΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π²ΡΠ·ΠΎΠ²Π°ΠΌ Π²ΡΠ΅Ρ
Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
lambda
. ΠΠΎΠΆΠ½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΎΡ,
ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠ² ΡΠ΅Ρ
Π½ΠΈΠΊΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΡΠ΅ΡΡΡ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ
Π΅ΡΡΡ Π² ΠΡΠΈΠΌΠ΅ΡΠ°Ρ
Python ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Ρ
Π½ΠΈΠΊΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ Β«ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎΒ» ΠΊΠΎΠ΄Π° (Π΅ΡΠ»ΠΈ Π½Π΅ ΡΡΠΈΡΠ°ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΡΠ΅Π±ΡΡΡΠ΅Π³ΠΎΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ).
ΠΠΌΠ΅ΡΡΠΎ Π±Π°ΠΉΡΠΎΠΊΠΎΠ΄Π° Python ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΡ
ΠΎΠ΄Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
C, Π΄ΡΡΠ³ΠΈΡ
ΡΠ·ΡΠΊΠ°Ρ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ XML-ΡΠ°ΠΉΠ»Ρ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΉ Π²ΡΠΈΠ³ΡΡΡ Π² ΡΠΊΠΎΡΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΎΠ±ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠ΅ Π»Π΅Π½ΠΈΠ²ΡΠΌ ΡΡΠ½ΠΊΡΠΎΡΠΎΠΌ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΈΒ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΎΠ±ΡΡΠΌΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ Π΄ΠΈΡΠΊΡ. ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ X Π»Π΅Π½ΠΈΠ²ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ; Π΄Π»Ρ Π½Π΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½Π° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ². Π ΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ ΡΡΠ»ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π³Π΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ X Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎ Ρ ΠΎΠ΄Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ° ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ±ΡΠΎΡΠ΅Π½Π°, Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΠΊ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΌΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ. Π Π΄ΡΡΠ³ΠΎΠΉ Π²Π΅ΡΠΊΠ΅, Π³Π΄Π΅ X ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΡΡΠ½ΠΊΡΠΎΡΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄ΡΡ Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π΅ΡΠΎΠΊ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ: ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ X ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ±ΡΠΎΡΠ΅Π½.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
ΠΠΈΡΠ΅ΡΠ°ΡΡΡΠ°
Π»ΡΡΡΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Python — ΠΎΡΠ΅Π½Ρ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. ΠΠ½ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π±ΠΎΠ»ΡΡΡΡ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ±Π΅ΡΠ΅ΡΠ΅, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² Π½ΠΈΠΆΠ½ΠΈΠ΅ ΡΡΠΎΠ²Π½ΠΈ Python ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡ — ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½Π° Π»Π΅ΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ΅Π΄Π°Π²Π½ΠΎ Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ» ΡΠ²ΠΎΠ»ΡΡΠΈΡ Π² ΡΠΏΠΎΡΠΎΠ±Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ Python ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½Π°Π±ΠΈΡΠ°ΡΡΡΡ ΠΎΠΏΡΡΠ°.ΠΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Python, ΠΊΠΎΠ³Π΄Π° Ρ Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠΈΠ»ΡΡ, Ρ ΠΎΡΠ΅Π½ΠΈΠ» ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΈΠΊΠ»ΠΎΠ², ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠ²ΠΎΠΈΠ² Π±Π°Π·ΠΎΠ²ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Ρ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΌΠΈ ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΠΎΠ½ΠΈΠΌΠ°Π», ΠΊΠΎΠ³Π΄Π° ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΈ ΡΠ°ΡΡΠΎ ΡΡ Π²Π°ΡΠΈΠ»ΡΡ Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠ²Π°ΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ½Π΅ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ»ΠΈ. ΠΠ° ΠΊΠ°ΠΊΠΎΠ΅-ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π» Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΈ ΡΡΡΠ΄Π½ΡΠΌ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ — ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π» ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ, — Ρ ΠΏΠΎΡΡΠ΅ΠΏΠ΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΡΠ»ΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ².
Π‘ ΡΡΠ΅ΡΠΎΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ, Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ, ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²Π°ΠΆΠ½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. Β«ΠΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ Ρ ΠΎΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄Β» — ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, ΠΎΠ±ΡΠΈΡΠ½Π°Ρ ΡΠ΅ΠΌΠ°, ΠΈ Π½Π° Π½Π΅Π΅ Π½Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°! ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΡ ΡΠ΅Π»Ρ Π² ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΈ Π² Π±Π»ΠΎΠ³Π΅ — ΡΠΎΡΡΠ΅Π΄ΠΎΡΠΎΡΠΈΡΡΡΡ Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ Π°ΡΠΏΠ΅ΠΊΡΠ΅: ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Python. Π― ΡΠ°ΡΡΠΊΠ°ΠΆΡ, ΡΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Python ΠΈ ΠΊΠ°ΠΊ, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π°Ρ ΠΊΠ°Π½Π°Π» YouTube!
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅?
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ»ΠΈ FP — ΡΡΠΎ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΡΠ²Π»ΡΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ Β«ΡΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈΒ», ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΈΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π°Π΄Π°Π½Π½ΡΠΉ Π²Ρ
ΠΎΠ΄, ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ — Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
ΠΈ Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΡΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΡΡΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 3 ΠΏΠ»ΡΡ 4 Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π½ΡΡΡΡΡ 7, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΠ΅ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠ»ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²Ρ ΡΠΊΠ»Π°Π΄ΡΠ²Π°Π»ΠΈ ΡΡΠΎ-ΡΠΎ ΡΠ°Π½ΡΡΠ΅.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ ΡΠΈΡΡΡΡ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ. ΠΡΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ²ΡΠΎΡΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.Π€ΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π±Ρ Ρ Π½ΠΎΠ²ΡΠΌΠΈ Π²Ρ
ΠΎΠ΄Π½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΏΠΎΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Ρ
ΠΎΠ΄Π½ΡΡ
ΠΈ / ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΡ
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΡΡ
ΠΎΠ΄Π½ΡΡ
Π΄Π°Π½Π½ΡΡ
. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ
Ρ ΠΎΠΏΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Ρ 1950-Ρ
Π³ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ, ΠΎΠ½ΠΎ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Clojure, Common Lisp, Haskell ΠΈ OCaml — ΡΡΠΎ ΡΠ·ΡΠΊΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΠΎΠ·ΠΈΡΠΈΡΠΌΠΈ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΡ
ΠΊΠ°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΈΠΏΠΎΠ² ΠΈ ΡΡΡΠΎΠ³ΠΎΠ΅ ΠΈΠ»ΠΈ Π»Π΅Π½ΠΈΠ²ΠΎΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅.ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΈΠ· Π½ΠΈΡ
ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π·Π°ΠΏΠΈΡΡ Π² ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ
ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ — ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ ΠΎΡΠ΅Π½Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ Π½Π΅ΡΠΈΡΡΡΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ΅ΠΏΡΡΠ°ΡΠΈΡ Π·Π°ΡΠΌΠ½ΠΎΠ³ΠΎ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΡΡΡ ΠΈΠ»ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΠΎΡΡΡ ΠΎΡΠ΄Π°Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠ΅Π½ΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎΡΡΠΈ. ΠΡΡΠΏΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΡΠ΅Π΄ΠΊΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ Π² ΡΠΈΡΠΎΠΊΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π΅ ΠΈΠ»ΠΈ, ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π° ΠΌΠ΅Π½ΡΡΠ΅ΠΌ ΡΡΠΎΠ²Π½Π΅, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ C ++, Java ΠΈΠ»ΠΈ Python. ΠΠ΄Π½Π°ΠΊΠΎ FP — ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π΄Π»Ρ ΡΠ°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΠΉ ΠΎ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΠΎΡΠΎΠΊΠ°Ρ
Ρ ΠΈΡ
Π΄ΠΎΡΡΠΎΠΈΠ½ΡΡΠ²Π°ΠΌΠΈ ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ, ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ°ΠΌΠΈ.
Π₯ΠΎΡΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ?
Kite — ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ PyCharm, Atom, Vim, VSCode, Sublime Text ΠΈ IntelliJ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²Π°ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΡΡΠ΅Π΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ .
Π§ΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Python?
Π₯ΠΎΡΡ Python Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΡΠ΅ Π² Python ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ.
def add (a, b):
return a + b plus = add
plus (3, 4) # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 7
ΠΡΠΌΠ±Π΄Π°
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Β«Π»ΡΠΌΠ±Π΄Π°Β» ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ.ΠΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ Π»ΡΠΌΠ±Π΄Π° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡ Π³ΡΠ΅ΡΠ΅ΡΠΊΠΎΠΉ Π±ΡΠΊΠ²Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π² ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π»ΠΎΠ³ΠΈΠΊΠ΅ Π΄Π»Ρ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΡΠΈΠ²ΡΠ·ΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Β«Π»ΡΠΌΠ±Π΄Π°-ΠΈΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅Β», ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΄Π°ΠΆΠ΅ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠΌΠΈΠ½ Π΄Π»Ρ ΡΡΠΎΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ — Β«Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡΒ», ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΈΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ Π²Ρ ΡΠ΅ΡΠΈΡΠ΅ Π½Π°Π·Π½Π°ΡΠΈΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
(lambda a, b: a + b) (3, 4) # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 7 ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = lambda a, b: a + b
ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (3, 4) # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 7
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π²ΠΈΠΆΡ Β«Π² Π΄ΠΈΠΊΠΎΠΉ ΠΏΡΠΈΡΠΎΠ΄Π΅Β» Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ.Β«ΠΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉΒ» — ΡΡΠΎ Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ΠΎ Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ — ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π³ΠΎΠ²ΠΎΡΡ, ΠΊΠ»Π°ΡΡΡ, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π‘ΡΠ΅Π΄ΠΈ Π½ΠΈΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ — ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»ΡΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΏΡΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ .
Π°Π²ΡΠΎΡΡ = [ΠΠΊΡΠ°Π²ΠΈΡ ΠΠ°ΡΠ»Π΅Ρ, ΠΡΠ°Π°ΠΊ ΠΠ·ΠΈΠΌΠΎΠ², ΠΠΈΠ» Π‘ΡΠΈΠ²Π΅Π½ΡΠΎΠ½, ΠΠ°ΡΠ³Π°ΡΠ΅Ρ ΠΡΠ²ΡΠ΄, Usula K Le Guin, Π ΡΠΉ ΠΡΡΠ΄Π±Π΅ΡΠΈ]
sorted (Π°Π²ΡΠΎΡΡ, key = len) # ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅ ΠΈΠΌΠ΅Π½ΠΈ Π°Π²ΡΠΎΡΠ°
ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ (Π°Π²ΡΠΎΡΡ, ΠΊΠ»ΡΡ = Π»ΡΠΌΠ±Π΄Π°-ΠΈΠΌΡ: ΠΈΠΌΡ.split () [- 1]) # ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² Π°Π»ΡΠ°Π²ΠΈΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΏΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ.
ΠΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½ΠΎΠΉ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π»ΡΠΌΠ±Π΄Π°-ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΡΠ΅ΠΊΠ°, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ.
Functools
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² Python Π»ΠΈΠ±ΠΎ Π²ΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡΡ , Π»ΠΈΠ±ΠΎ ΡΠ΅ΡΠ΅Π· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ functools. map ΠΈ reduce ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π½ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π΄Π°Π½Π½ΡΡ , Π½ΠΎ ΠΎΠ½ΠΈ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π΄Π²ΡΠΌΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°.map ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π° reduce ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
val = [1, 2, 3, 4, 5, 6] # Π£ΠΌΠ½ΠΎΠΆΠΈΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° Π΄Π²Π°
list (map (lambda x: x * 2, val)) # [2, 4, 6, 8, 10, 12]
# ΠΠΎΠ·ΡΠΌΠΈΡΠ΅ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π», ΡΠΌΠ½ΠΎΠΆΠΈΠ² ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ
ΡΠΌΠ΅Π½ΡΡΠΈΡΡ (Π»ΡΠΌΠ±Π΄Π°: x, y: x * y, val, 1) # 1 * 1 * 2 * 3 * 4 * 5 * 6
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΊΡΡΠ° Π΄ΡΡΠ³ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΡΠ°ΡΡΠΈΡΠ½ΡΠΌΠΈ, ΡΡΠΎ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ.ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΠΊΠ°ΠΊ Β«ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β» — ΡΠ΅ΡΠΌΠΈΠ½, Π½Π°Π·Π²Π°Π½Π½ΡΠΉ Π² ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ²ΠΎΠΏΡΠΎΡ ΠΎΠ΄ΡΠ° FP Π₯Π°ΡΠΊΠ΅Π»Π»Π° ΠΠ°ΡΡΠΈ.
ΠΌΠΎΡΠ½ΠΎΡΡΡ Π΄Π΅Ρ (Π±Π°Π·ΠΎΠ²Π°Ρ, ΡΠΊΡΠΏ):
Π²ΠΎΠ·Π²ΡΠ°ΡΠ½Π°Ρ Π±Π°Π·Π° ** Π΅Ρ
Ρ
ΠΊΡΠ± = ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ (ΡΡΠ΅ΠΏΠ΅Π½Ρ, Π΅Ρ
Ρ = 3)
cube (5) # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 125
ΠΠ»Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΡ Ρ Π²Π²ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ FP Π² Python, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π·Π΄Π΅ΡΡ ΡΡΠ°ΡΡΡ ΠΡΡΠΈ Π ΠΎΡΠ· ΠΡΠΊ.
ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ Π² Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠ΅ ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ΅Π΄Π½Π΅ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π·Π°ΡΠ°ΡΡΡΡ ΡΡΡΠ΄Π½Π΅Π΅ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ Π½ΠΈΠΌΠΈ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΏΠΎΡΡΠΈ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ Python. ΠΠΈΡΠ½ΠΎ Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠΎΠ³Ρ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ, Ρ ΠΎΡΡ Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π» ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·. Π― Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ ΠΏΠΎΠΈΠ³ΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΠΌΠΈ FP, ΠΈ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ Ρ ΠΎΠΏΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ Π²ΡΠ±ΠΎΡΠΎΠΌ Π² ΠΎΠ±ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.
Π₯ΠΎΡΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ?
Kite — ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ PyCharm, Atom, Vim, VSCode, Sublime Text ΠΈ IntelliJ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²Π°ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΡΡΠ΅Π΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ .
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡΡ
Π€ΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΡΡΠΎΠ΅Π½Ρ Π² ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡΠΉ Python ΡΠ΅ΡΠ΅Π· Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ.ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² ΠΎΡΡΠ°ΠΆΠ°Π΅Ρ ΡΡΠΎ, Π° ΡΠΈΠΌΠ²ΠΎΠ» @ — ΡΡΠΎ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Ρ Π°Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π΅ΠΊΠΎΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ. ΠΠΎΡ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ Π΄Π»Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π° ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ 3 ΠΏΠΎΠΏΡΡΠΎΠΊ.
def retry (func):
def retried_function (* Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ** kwargs):
exc = Π½Π΅Ρ
Π΄Π»Ρ _ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (3):
ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅:
return func (* args, ** kwargs)
ΠΊΡΠΎΠΌΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΊ exc:
print ("ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅% s Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ:% s, kwargs:% s.ΠΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΏΠΎΠΏΡΡΠΊΠ° "% (func, args, kwargs). ΠΏΠΎΠ΄Π½ΡΡΡ exc
return retried_function
@retry
def do_something_risky ():
...
retried_function = retry (do_something_risky) # ΠΠ΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ `@`
ΠΡΠΎΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²Ρ ΠΎΠ΄Π½ΡΠ΅ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΡ ΡΠΈΠΏ.ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΌΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². Π― Ρ ΠΎΡΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠ½ΡΡΡ, ΡΡΠΎ ΡΠ°ΠΌΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ Β«ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈΒ»; ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ (ΠΈ ΡΠ°ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ, ΠΊΠ°ΠΊ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅) ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ — ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°.
ΠΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Python ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΌΠΎΡΠ½ΡΠΉ ΠΈ ΡΠ°ΡΡΠΎ ΡΠ±ΠΈΠ²Π°ΡΡΠΈΠΉ Ρ ΡΠΎΠ»ΠΊΡ. ΠΠΌΡ Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ Π²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ΅ ΡΡΠ΅ΠΊΠ°, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ functools.wraps Π΄Π»Ρ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.Π― Π²ΠΈΠ΄Π΅Π», ΠΊΠ°ΠΊ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ Π΄Π΅Π»Π°ΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΈΠ»ΠΈ Π²Π°ΠΆΠ½ΡΠ΅ Π²Π΅ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· json blobs ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ. Π― ΡΠ°ΠΊΠΆΠ΅ Π²ΠΈΠ΄Π΅Π» Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΠ²Π½Π΅ΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°Π½ΠΈΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `staticmethod`, ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΡΡΠ΅, ΡΠ΅ΡΠΊΠΎ Π½Π°Π·Π²Π°Π½Π½ΡΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΊΠΎΠ½ΠΎΠΌΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², Π½ΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠΌ Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ ΡΠΈΠΏΠΎΠ², Π²ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄. ΡΠΈΠΏΡ ΠΌΠΎΠ³ΡΡ Π»Π΅Π³ΠΊΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡΡΡ Π² Β«ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΌΠ½ΡΡ Β».
ΠΠΎΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ — ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΈ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π²ΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π²Π°ΡΠ΅ΠΉ Π½ΡΠ½Π΅ΡΠ½Π΅ΠΉ Π·ΠΎΠ½Ρ ΠΊΠΎΠΌΡΠΎΡΡΠ°, Π²ΡΠ΅Π³Π΄Π° Ρ ΠΎΡΠΎΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π²Π°ΠΌ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π±Ρ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Python, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΈΠ»ΠΈ Π΄ΠΎΠ»Π³ΠΎΠ²Π΅ΡΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ. ΠΠΎΠΌΠΈΠΌΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΡΡ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π²ΡΡΠ΅, Π²ΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ:
- Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Python, Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ FP.Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π²Ρ Π·Π°ΠΏΡΡΠ°Π΅ΡΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ»ΠΈ ΡΠ΅Π±Ρ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
- Π£ Π²Π°Ρ Π½Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ, ΡΡΠΎ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΠ΅ΡΡ (ΠΌΠΎΠ΄ΡΠ»ΠΈ pip ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ Π²Π°ΡΠΈΡ ΡΠΎΠ°Π²ΡΠΎΡΠΎΠ²), ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΈ ΡΠΈΡΡΡΠΌ. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π»ΠΈ ΡΠΈΡΡ Π²Π°Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Ρ Π½Π°Π΄Π΅Π΅ΡΠ΅ΡΡ, — Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ·ΡΠΊΠΎΠ², ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ, ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π΅ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠΈΡΡΠΎΡΡ ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΡΡΡΡΠ°Π½ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΈΠΏΡ ΠΎΡΠΈΠ±ΠΎΠΊ. Π‘ΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π΄Π²Π° Π²ΠΈΠ΄Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°ΡΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ, Π° Π·Π°ΡΠ΅ΠΌ ΠΌΡΠ»ΡΡΠΈΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΎΠ±ΠΎΠΈΡ Π²ΠΌΠ΅ΡΡΠ΅.
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° Ρ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΈΠΏΠ° — ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΉ Π½Π°Π²ΡΠΊ. Π’ΠΈΠΏΠΎΠ²ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ ΡΠ°ΡΡΠΎ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄Π»ΠΈΠ½Π½ΡΠΌΠΈ ΠΈ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌΠΈ Π³Π½Π΅Π·Π΄Π°ΠΌΠΈ
Callable
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π²Π²Π΅ΡΡΠΈ ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²Π²ΠΎΠ΄Π°, — ΡΡΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡF = TypeVar ['F', bound = Callable [..., Any]]
, Π° Π·Π°ΡΠ΅ΠΌ Π°Π½Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊdef transparent (func : F) -> F: Π²Π΅ΡΠ½ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ
. ΠΠ»ΠΈ Ρ Π²Π°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΎΠ±Π»Π°Π·Π½ Π²Π½Π΅ΡΡΠΈ Π·Π°Π»ΠΎΠ³ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡAny
Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ Π²ΡΡΡΠ½ΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡ.
ΠΡΠ°ΠΊ, ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ°ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ?
Π§ΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΡΠ»ΠΈ Β«ΡΠΈΡΡΡΠΌΠΈΒ», ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠΉΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² Ρ ΠΎΡΠΎΡΠΎ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΡΡ , Ρ ΠΎΡΠΎΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ . ΠΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ — Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, ΡΠ°Π·Π±ΠΎΡΠΊΠΈ ΠΈ ΠΈΠΌΠΈΡΠ°ΡΠΈΠΉ, Π° ΡΠ΅ΡΡΡ Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡΡ Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ.
ΠΠΎΡ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ.
dictionary = ['Π»ΠΈΡΠ°', 'Π±ΠΎΡΡ', 'Π°ΠΏΠ΅Π»ΡΡΠΈΠ½', 'ΠΏΠ°Π»ΡΡΡ Π½ΠΎΠ³', 'ΡΠ΅Ρ', 'ΡΠ°ΡΠΊΠ°']
def puralize (ΡΠ»ΠΎΠ²Π°):
Π΄Π»Ρ i Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (len (ΡΠ»ΠΎΠ²Π°)):
word = words [i]
Π΅ΡΠ»ΠΈ ΡΠ»ΠΎΠ²ΠΎ.Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ('s') ΠΈΠ»ΠΈ word.endswith ('x'):
ΡΠ»ΠΎΠ²ΠΎ + = 'es'
Π΅ΡΠ»ΠΈ word.endswith ('y'):
word = word [: - 1] + 'ies'
Π΅ΡΠ΅:
ΡΠ»ΠΎΠ²ΠΎ + = 's'
words [i] = word def test_pluralize ():
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (ΡΠ»ΠΎΠ²Π°ΡΡ)
assert dictionary == ['Π»ΠΈΡΡ', 'Π±ΠΎΡΡΡ', 'Π°ΠΏΠ΅Π»ΡΡΠΈΠ½Ρ', 'ΠΏΠ°Π»ΡΡΡ Π½ΠΎΠ³', 'ΡΠ΅ΠΈ', 'ΡΠ°ΡΠΊΠΈ']
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ test_pluralize
ΠΎΠ½ ΠΏΡΠΎΠΉΠ΄Π΅Ρ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΠΎΡΠ»Π΅ ΡΠ±ΠΎΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ s
ΠΈ es
Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ.Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΠΈΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ, ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ:
dictionary = ['Π»ΠΈΡΠ°', 'Π±ΠΎΡΡ', 'Π°ΠΏΠ΅Π»ΡΡΠΈΠ½', 'ΠΏΠ°Π»ΡΡΡ Π½ΠΎΠ³', 'ΡΠ΅Ρ', 'ΡΠ°ΡΠΊΠ°']
def puralize (ΡΠ»ΠΎΠ²Π°):
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = []
ΡΠ»ΠΎΠ²ΠΎΠΌ ΠΏΡΠΎΠΏΠΈΡΡΡ:
word = words [i]
Π΅ΡΠ»ΠΈ word.endswith ('s') ΠΈΠ»ΠΈ word.endswith ('x'):
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = ΡΠ»ΠΎΠ²ΠΎ + 'es')
Π΅ΡΠ»ΠΈ word.endswith ('y'):
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = ΡΠ»ΠΎΠ²ΠΎ [: - 1] + 'ies'
Π΅ΡΠ΅:
ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = + 's'
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.Π΄ΠΎΠ±Π°Π²ΠΈΡΡ (ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ)
Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ def test_pluralize ():
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ (ΡΠ»ΠΎΠ²Π°ΡΡ)
assert result == ['Π»ΠΈΡΡ', 'Π±ΠΎΡΡΡ', 'Π°ΠΏΠ΅Π»ΡΡΠΈΠ½Ρ', 'ΠΏΠ°Π»ΡΡΡ', 'ΡΠ΅ΠΈ', 'ΡΠ°ΡΠΊΠΈ']
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΠ΅ Π΄Π»Ρ FP, Π° ΠΏΡΠΎΡΡΠΎ ΡΠΎΠ·Π΄Π°Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ°ΡΠΎΠ³ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ Ρ ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΎΡΡΠ°Π½Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΡΠΏΠΈΡΠΎΠΊ Π²Π²ΠΎΠ΄Π°, ΠΎΠ½ Π½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΡΡ.
ΠΡΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ³ΡΡΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ . ΠΡ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΈΠΏΠΎΠ² ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΠ»ΡΡΠ°Π΅Π², Π½ΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΏΠΎΡΡΠ΄ΠΊΡ ΠΈΠ»ΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌ Π½Π° ΠΎΡΠΈΡΡΠΊΡ ΠΈ Π²ΠΎΡΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. Π’Π°ΠΊΠΈΠ΅ ΡΡΠΈΠ»ΠΈΡ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π΄Π»Ρ ΡΠΊΠ²ΠΎΠ·Π½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ², Π° Π½Π΅ Π΄Π»Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠΎΠ΄ΡΠ»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ².
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ (ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΠ΅) ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ
ΠΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ Π²ΠΈΠΊΡΠΎΡΠΈΠ½Π°, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ?
- ΡΠΏΠΈΡΠΎΠΊ
- ΠΊΠΎΡΡΠ΅ΠΆ
- Π½Π°Π±ΠΎΡ
- Π΄ΠΈΠΊΡ
- ΡΡΡΠΎΠΊΠ°
ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎ Π²Π°ΠΆΠ½ΠΎ? ΠΠ½ΠΎΠ³Π΄Π° ΡΠΏΠΈΡΠΊΠΈ ΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΠΊΠ°ΠΆΡΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ, ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΡΠΎΠ±Π»Π°Π·Π½ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΈΡ
ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ.ΠΠ°ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΠΎΡΠΈΠ±Π°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΌΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΡΡ ββΠΊΠ°ΠΊ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠ»ΠΈ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ° ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ TypeError
, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΏΠΈΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ. ΠΠΎΡΡΠ΅ΠΆΠΈ ΠΈ ΡΡΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠ»ΡΡΠ΅ΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ ΠΈ ΠΌΠΎΠ³ΡΡ Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Ρ
Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, Π° Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
— Π½Π΅Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°.
Π‘Π°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ dicts / lists / sets, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.ΠΡΠΎ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΠΊ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ — ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ ΡΡΠΎΠ³ΠΎ:
def add_bar (items = []):
items.append ('Π±Π°Ρ')
Π²Π΅ΡΠ½ΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ l = add_bar () # l is ['bar']
l.append ('ΡΡ')
add_bar () # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ['bar', 'foo', 'bar']
Π‘Π»ΠΎΠ²Π°ΡΠΈ, Π½Π°Π±ΠΎΡΡ ΠΈ ΡΠΏΠΈΡΠΊΠΈ ΠΌΠΎΡΠ½ΡΠ΅, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅, ΠΏΠΈΡΠΎΠ½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅.ΠΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π±Π΅Π· Π½ΠΈΡ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ. ΠΡΠΈ ΡΡΠΎΠΌ Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΡΠ΅ΠΆ ΠΈΠ»ΠΈ None (Π·Π°ΠΌΠ΅Π½ΡΡ Π΅Π³ΠΎ Π½Π° ΠΏΡΡΡΠΎΠΉ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ·ΠΆΠ΅) Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΈ Ρ ΡΡΠ°ΡΠ°ΡΡΡ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ, Π½Π΅ ΠΎΠΏΠ°ΡΠ°ΡΡΡ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ.
Π₯ΠΎΡΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΡΡΡΠ΅Π΅ ?
Kite — ΡΡΠΎ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ PyCharm, Atom, Vim, VSCode, Sublime Text ΠΈ IntelliJ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π²Π°ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡΠ΅Π»Π΅Π²Π°Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠ½ΠΈΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΡΡΠ΅Π΅ ΡΠ΅Π³ΠΎΠ΄Π½Ρ .
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ²
Π§Π°ΡΡΠΎ ΠΊΠ»Π°ΡΡΡ (ΠΈ ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ) ΠΎΠ±Π»Π°Π΄Π°ΡΡ ΠΎΠ±ΠΎΡΠ΄ΠΎΠΎΡΡΡΡΠΌ ΠΌΠ΅ΡΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ. Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π° Python, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ ΡΡΠ°Π½ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌΠΈ, ΠΈ Ρ ΠΏΠΎΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠ΅Ρ , ΠΊΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π²ΡΡΠΎΠΊΠΎΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ Java, Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ»ΠΈ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠ»Π°ΡΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠΎΠ΄ΡΠ»Ρ Π² Python.ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΌΠ΅ΡΡΠ΅ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» .py.
Π§Π°ΡΡΠΎ Ρ Π²ΠΈΠΆΡ ΠΊΠ»Π°ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΈΠΌΠ΅Π½ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΠ³Π΄Π° namedtuple (ΠΈΠ»ΠΈ typing.NamedTuple
Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΡΡΠΈ ΡΠΈΠΏΠ°) Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ ΠΆΠ΅ Ρ
ΠΎΡΠΎΡΠΎ ΠΈ Π±ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ.
ΠΈΠ· ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ import namedtuple
VerbTenses = namedtuple ('VerbTenses', ['ΠΏΡΠΎΡΠ»ΠΎΠ΅', 'Π½Π°ΡΡΠΎΡΡΠ΅Π΅', 'Π±ΡΠ΄ΡΡΠ΅Π΅'])
# ΠΏΡΠΎΡΠΈΠ²
class VerbTenses (ΠΎΠ±ΡΠ΅ΠΊΡ):
def __init __ (Ρ, ΠΏΡΠΎΡΠ»ΠΎΠ΅, Π½Π°ΡΡΠΎΡΡΠ΅Π΅, Π±ΡΠ΄ΡΡΠ΅Π΅):
Ρ.ΠΏΡΠΎΡΠ»ΠΎΠ΅ = ΠΏΡΠΎΡΠ»ΠΎΠ΅,
self.present = ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ
self.future = Π±ΡΠ΄ΡΡΠ΅Π΅
ΠΡΠ»ΠΈ Π²Π°ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΉ Π² ΡΡΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΠΎΠ³Π΄Π° ΠΊΠ»Π°ΡΡΡ — ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ Π²ΡΠ±ΠΎΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΎΠ΄Π½ΠΎΡΠ»Π΅ΠΌΠ΅Π½ΡΠ½ΡΠ΅ ΡΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ .
ΠΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΎΡΠ΅Π½Ρ ΠΎΠΏΠ°ΡΠ½Ρ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°, Π° Π½Π΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ°!
ΠΠ»Π°ΡΡ ΠΠ²ΡΠΎΠ±ΡΡ (ΠΎΠ±ΡΠ΅ΠΊΡ):
ΠΏΠ°ΡΡΠ°ΠΆΠΈΡΡ = Π½Π°Π±ΠΎΡ ()
def add_passenger (Ρ, ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ):
Ρ.Passenger.add (ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ) bus1 = ΠΠ²ΡΠΎΠ±ΡΡ ()
bus2 = ΠΠ²ΡΠΎΠ±ΡΡ ()
bus1.add_passenger ('abe')
bus2.add_passenger ('bertha')
bus1.passengers # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ['abe', 'bertha']
bus2.passengers # ΡΠ°ΠΊΠΆΠ΅ ['abe', 'bertha']
ΠΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΡ
Π Π»ΡΠ±ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½ΠΎΠΉ, Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π±ΡΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π°ΡΡ ΡΠ±ΠΎΠΉ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΡ. ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ Β«ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈΒ» ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ Π² Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ API ΠΈ ΠΌΠ°ΡΡΠΈΡΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΠ΅, Π½ΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Π°Ρ Π²Π΅ΡΡΠΈΡ Π²ΡΡΠ΅ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Β«ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎΒ» ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π±ΡΠ»ΠΎ Π»ΠΈ ΡΡΠΎ-ΡΠΎ ΡΠΆΠ΅ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΡΠ°ΡΡΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΡ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ.
ΠΠΊΠΎΠ½ΠΎΠΌΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΠΌΠ±Π΄Π°-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°
Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠ°ΡΡΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΈ ΠΏΠΎΠ½ΡΡΠ½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΡΠΌΠ±Π΄Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΡΠΎΡΠΊΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠ»ΡΡΠ΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π½ΠΈΡ Π΄Π»Ρ sort
. ΠΠ΄Π½Π°ΠΊΠΎ, Π΅ΡΠ»ΠΈ Π»ΡΠΌΠ±Π΄Π° ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΡΠ½ΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.Π ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠ΅Π»ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° Π΄Π»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡ, Π½ΠΎ Ρ ΡΡΠ°ΡΠ°ΡΡΡ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ, Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π»ΠΈ Π·Π°ΡΡΡΠ΄Π½ΡΠ΅Ρ ΡΡΠ½ΠΎΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ°. Π§Π°ΡΡΠΎ Π±ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΡΠ΅ ΡΠ°Π·Π±ΠΈΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ
ΡΠΎΡΡΠ°Π²Π½ΡΡ
ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΠΎΠ².
ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ, ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ
ΠΠ½ΠΎΠ³Π΄Π° Π²Ρ Π²ΡΡΡΠ΅ΡΠΈΡΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΈΠ»ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. Π Python 3 ΡΠ΅ΠΏΠ΅ΡΡ ΡΡΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ xrange Π² Python 2), ΠΎΡΡΠ°ΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅ΡΠ΅ΡΡ Π²Π°Ρ ΠΎΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ range (10 ** 10).ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π² ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠΌ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ΅, ΡΠΎ Π»ΡΡΡΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠ°ΠΊ ΠΊΠ°ΡΡΠ° ΠΈ ΡΠΈΠ»ΡΡΡ.
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅, Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ Π²Π°Ρ Π½Π΅Π΄Π°Π²Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΎΡ — Π° ΠΎΠ½ΠΎ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π²Π΅Π»ΠΈΠΊΠΎ, — ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ΅ΡΠΈΡΡ ΡΠΎΠ±ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π²ΠΈΠ΄Π΅ ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ OOM, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΡΡΠ°Π»ΠΈΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ.ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python, ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΡΠ΅ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ Π² ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ, ΠΊΠ°ΠΊ ΠΈ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΈΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Python.
ΠΠ°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΌΡΡΠ»ΠΈ
Π₯ΠΎΡΠΎΡΠ΅Π΅ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²ΠΎ Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌ Π²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π½Π΅ΡΠΎΠΌΠ½Π΅Π½Π½ΠΎ, ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π±ΡΡΡΡΠ΅Π΅ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ ΠΈ ΡΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄. ΠΠ½Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ΄Π΅ΠΉ ΠΈΠ· Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² ΠΈΠ»ΠΈ ΡΠ΅ΠΎΡΠΈΠΈ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π±Π°Π²Π½ΡΠΌ, ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π²Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΠ»ΡΠ½ΡΠΌ ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ.ΠΠ΄Π½Π°ΠΊΠΎ Π±ΡΡΡ ΠΎΠΏΡΡΠ½ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Python Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎ Π²Ρ * ΠΌΠΎΠΆΠ΅ΡΠ΅ * Π΄Π΅Π»Π°ΡΡ, Π½ΠΎ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π°Π²ΡΠΊΠΈ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»Π΅Π³ΠΊΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΎ Π² Python. Π§ΡΠΎΠ±Ρ Π΅Π³ΠΎ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΌ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΎΠ±ΡΠΈΡ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°Ρ ΠΊΠΎΠ΄Π°, Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π»ΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΌΡΡΠ»Π΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ ΠΈ Π»Π΅Π³ΠΊΠΈΠΌ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ ΠΈΠ΄ΠΈΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΡΡ.
.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Python Π½Π΅ ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Ρ ΠΎ ΡΠΎΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python, ΠΈ ΡΡΠΎ ΠΏΠΎΠ·ΠΎΡ: Π·Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΆΠ°ΡΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Python ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠ΄Π΅ΡΡ Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Π½Π°ΡΠ΅ΠΌ Π»ΡΠ±ΠΈΠΌΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ, Π²Π°ΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ²: Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π²Π²ΠΎΠ΄ ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ Π²ΡΠ²ΠΎΠ΄ Π±Π΅Π· ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ, ΡΡΠΎ Π½Π΅ ΠΎΡΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΈ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΎΠΌΡ ΠΈΠ΄Π΅Π°Π»Ρ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ.
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎΠΉ Π½Π΅ ΡΠΈΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠΏΠΈΡΠΊΠ΅:
def remove_last_item (mylist):
"" "Π£Π΄Π°Π»ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°."" "
mylist.pop (-1) # ΠΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ mylist
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΡΠΎΠΉ: Ρ Π½Π΅Π΅ Π΅ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΡΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ:
def butlast (mylist):
"" "ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ butlast Π² ΠΠΈΡΠΏΠ΅; Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°." ""
return mylist [: - 1] # ΠΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡ mylist
ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ butlast ()
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, butlast
Π² Lisp), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ Π±Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°.ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠΏΠΈΡ ΡΠΏΠΈΡΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π». Π ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ½Π΅ΡΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
- ΠΠΎΠ΄ΡΠ»ΡΠ½ΠΎΡΡΡ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΡΠΈΠ»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ
ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²Π°ΡΠΈΡ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ΄Π°
Π² Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ . ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
, Π²ΡΠ·Π²Π°ΡΡ Π΅Π΅ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ° ΠΊΠΎΠ΄Π°
ΠΏΡΠΎΡΡΠΎ. - ΠΡΠ°ΡΠΊΠΎΡΡΡ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΡΡΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»ΠΎΠ²Π½ΠΎ, ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ.
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ. Π§ΠΈΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Ρ
. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠ·ΡΠΊΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΏΠΎΡΡΠ΅ΠΌ Π²
, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ ΠΎΡΡ Π² Python ΡΡΠΎ Π΅ΡΠ΅ Π½Π΅ ΡΠ°ΠΊ. - Π’Π΅ΡΡΠΈΡΡΠ΅ΠΌΠΎΡΡΡ. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ: Π²ΡΠ΅, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ,
— ΡΡΠΎ Π½Π°Π±ΠΎΡ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ Π½Π°Π±ΠΎΡ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ .ΠΠ½ΠΈ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½Ρ,
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ
Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ c
.
ΠΠΎΡΠ΅ΠΌΡ Python Π½Π΅ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°
.Π£ΡΠ΅Π±Π½ΠΈΠΊΠΈ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ ΠΏΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
| Python
Python ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅:
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ — ΡΡΠΎ ΡΡΠΈΠ»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΊΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π° Π½Π΅ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠΌ ΠΎΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΌΡΡΠ»Π΅Π½ΠΈΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΡΠΈΠΏ Π²Ρ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΎΠ΄ΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ, ΠΈ ΡΠΈΠΏ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π²ΡΡ ΠΎΠ΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°Π²ΠΈΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ.ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ f Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ f (x) Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²Ρ Π΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΌΡΡΠ»Π΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΡΠ΅Π΄ΠΊΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅. ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΏΠΎ ΡΠ°Π³Π°ΠΌ, Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΡΡΠΎ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ΅ΡΠ΅ΡΠΏΠ΅Π²Π°ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ.
Python ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡΡΠ΅ΡΡ Ρ Π½Π°ΡΠΈΠΌΠΈ Π·Π°ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ ΠΏΠΎ ΡΡΠΎΠΉ ΡΠ΅ΠΌΠ΅.
Π ΡΡΠΎΠΌ ΡΡΠΎΠΊΠ΅ Π²Ρ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π°:
- ΠΠ°ΠΊΠΈΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ°ΠΊ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΈΡ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ.
- Π§ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
- Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠΎΡΠ°.
- ΠΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ.
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ ΡΠΈΡΡΡΠΉ ΡΠ·ΡΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ:
- Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΡΠΌ.
- Π§ΠΈΡΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ; Π² Π½ΠΈΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ²
- Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ² for
- Π₯ΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ
Π€ΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π² Python:
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΈΡ
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½ΡΠ΅. Π’Π°ΠΊ,
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ
Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ int Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ.
>>> ΡΠΏΠΈΡΠΎΠΊ (map (int, ["1", "2", "3"]))
[1, 2, 3]
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈ Π²Π΅ΡΠ½ΡΡΡ ΠΈΡ
. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ hello_world
, ΠΈ ΡΠΎΠ³Π΄Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ.
>>> def hello_world (h):
... def world (w):
... ΠΏΠ΅ΡΠ°ΡΡ (Ρ, Ρ)
... return world # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
...
>>> h = hello_world # Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
>>> x = h ("hello") # ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΠΌ
>>> Ρ
<ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠΈΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ 0x7fec47afc668>
>>> x ("ΠΌΠΈΡ")
('ΠΡΠΈΠ²Π΅Ρ ΠΌΠΈΡ')
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΠ°Ρ Π΄Π°Π½Π½ΡΡ .ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ Π² ΡΠΏΠΈΡΠΊΠ΅.
>>> function_list = [h, x]
>>> ΡΠΏΠΈΡΠΎΠΊ_ΡΡΠ½ΠΊΡΠΈΠΉ
[, ]
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΠΈΡΡΠΎΡΠ° Python:
Π Python Π΅ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΡΡΠ½ΠΊΡΠΈΡΡ . Π’Π°ΠΊ ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΡΡΠΎΠ³ΠΎ
def naive_sum (ΡΠΏΠΈΡΠΎΠΊ):
s = 0
Π΄Π»Ρ l Π² ΡΠΏΠΈΡΠΊΠ΅:
s + = l
Π²Π΅ΡΠ½ΡΡΡ s
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ:
ΡΡΠΌ (ΡΠΏΠΈΡΠΎΠΊ)
Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ map, reduce ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ itertools Π² Python, ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ±ΠΎΡΠ½ΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠ² Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ² Π² Python:
Π¦ΠΈΠΊΠ»Ρ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠ΅ΡΠ΅Π±ΡΠ°ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊΡΡ-ΡΠΎ Π»ΠΎΠ³ΠΈΠΊΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ.
Π΄Π»Ρ x Π² Π»:
func (x)
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π²ΡΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΎΠΈΡΡΠ΅ΠΊΠ°Π΅Ρ ΠΈΠ· ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π²ΠΈΠ΄Π΅ ΡΠ΅ΡΠΈΠΈ ΡΠ°Π³ΠΎΠ², Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΡΠΎ-ΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ. Π§ΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π· ΠΌΡΡΠ»Π΅Π½ΠΈΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΡΠΈΠΊΠ» for Π² Python ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΊΠ°ΡΡΠ° (func, l)
ΠΡΠΎ ΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ Β«ΡΠΎΠΏΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌΒ», ΡΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½Π°ΡΠ΅ΠΉ ΠΈΠ΄Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΠΎΠΏΡΠΎΡΠ° Β«ΡΡΠΎΒ».
ΠΡΠ»ΠΈ Π²Ρ Π²ΠΎΠ·ΡΠΌΠ΅ΡΠ΅ ΡΡΡ ΠΈΠ΄Π΅Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ Π΅Π΅ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ.
def func1 ():
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ
def func2 ():
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ
def func3 ():
ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΡΡ
Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ = Π»ΡΠΌΠ±Π΄Π° f: f ()
ΠΊΠ°ΡΡΠ° (Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, [func1, func2, func3])
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΈ ΡΡΠΎΠΌ Π½Π΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΊΠ°ΡΡΡ.ΠΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΡΠΏΠΈΡΠΎΠΊ
ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
Π Π΅ΠΊΡΡΡΠΈΡ Python:
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΡ
Π Π΅ΠΊΡΡΡΠΈΡ — ΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ ΡΡΡΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ, ΡΡΠΎ ΠΈ ΠΈΡΡ ΠΎΠ΄Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΡ ΡΠ΅ΡΠ°Π΅ΡΠ΅ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π²ΡΠ·ΠΎΠ² ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠΈΠΌ:
ΡΡΠ΅ΡΡΡ ΠΏΠ΅Π»ΡΠΌΠ΅Π½ΠΈ:
1.ΠΏΡΠΎΠ²Π΅ΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π°ΡΠ΅Π½ΠΈΠΊΠΎΠ² Π½Π° ΡΠ°ΡΠ΅Π»ΠΊΠ΅
2. Π΅ΡΠ»ΠΈ Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ ΠΏΠ΅Π»ΡΠΌΠ΅Π½Π΅ΠΉ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΠ΅ Π΅ΡΡΡ
3. Π΅ΡΠ΅ ΡΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠ΅Π»ΡΠΌΠ΅Π½Ρ
4. Β«ΡΡΠ΅ΡΡΡ ΠΏΠ΅Π»ΡΠΌΠ΅Π½ΠΈΒ»
ΠΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅
Π€ΡΠ½ΠΊΡΠΈΠΈ Python
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΡ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠΎΠ΄Π΅ Π΄Π»Ρ ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π Π΅ΠΊΡΡΡΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π²Π° ΡΡΠ»ΠΎΠ²ΠΈΡ. ΠΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ, ΠΈ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ΅Π±Ρ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ. ΠΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡΠΈΠΌ; Ρ.Π΅, ΡΡΠ½ΠΊΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΌΠ΅Π½ΡΡΠ΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΡΠ°ΠΌΠΈΡ ΡΠ΅Π±Ρ.
ΠΡΠΈΠΌΠ΅Ρ:
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠΈ.
def fib (n):
Π΅ΡΠ»ΠΈ n == 0: Π²Π΅ΡΠ½ΡΡΡ 0
elif n == 1: Π²Π΅ΡΠ½ΡΡΡ 1
ΠΈΠ½Π°ΡΠ΅: Π²Π΅ΡΠ½ΡΡΡ fib (n-1) + fib (n-2)
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄:
ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ. Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Ρ Π²Π°Ρ Π΅ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 1, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡΡΡ Π² ΡΡΠ΅ΠΏΠ΅Π½Ρ 3, Π·Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅.ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΊΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎ.
# ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄
start_number = 96
# ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠ²Π°Π΄ΡΠ°Ρ ΡΠΈΡΠ»Π°
ΠΊΠ²Π°Π΄ΡΠ°Ρ = Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅_ΡΠΈΡΠ»ΠΎ ** 2
# ΡΠ²Π΅Π»ΠΈΡΠΈΡΡ ΡΠΈΡΠ»ΠΎ Π½Π° 1
ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ = ΠΊΠ²Π°Π΄ΡΠ°Ρ + 1
# ΠΊΡΠ± ΡΠΈΡΠ»Π°
ΠΊΡΠ± = ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ ** 3
# ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ ΠΊΡΠ± Π½Π° 1
Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ = ΠΊΡΠ± - 1
# ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = ΠΏΠ΅ΡΠ°ΡΡ (ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅) # Π²ΡΠ²ΠΎΠ΄ 783012621312
ΠΡΠΎΡ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΡΠ΅ ΠΊΠΎΠ΄Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π΄Π°Π²Π°ΡΡ ΡΠ²Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π²Ρ Π΄Π°Π΅ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ.ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ Π½ΠΈΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ.
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ `call`, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ
def call (x, f):
Π²Π΅ΡΠ½ΡΡΡ f (x)
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ²Π°Π΄ΡΠ°Ρ
ΠΊΠ²Π°Π΄ΡΠ°Ρ = Π»ΡΠΌΠ±Π΄Π° x: x * x
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅
ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅ = Π»ΡΠΌΠ±Π΄Π° x: x + 1
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΡΠ±
ΠΊΡΠ± = Π»ΡΠΌΠ±Π΄Π° x: x * x * x
# ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ
Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ = Π»ΡΠΌΠ±Π΄Π° x: x-1
# ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΠΏΠΈΡΠΎΠΊ Π² ΡΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΈΡ
Π²ΡΠΏΠΎΠ»Π½ΡΡΡ
funcs = [ΠΊΠ²Π°Π΄ΡΠ°Ρ, ΠΏΡΠΈΡΠ°ΡΠ΅Π½ΠΈΠ΅, ΠΊΡΠ±, Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½Ρ]
# ΡΠΎΠ±ΡΠ°ΡΡ Π²ΡΠ΅ Π²ΠΌΠ΅ΡΡΠ΅.ΠΠΈΠΆΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΠ°ΡΡΡ.
# Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²Ρ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΈ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠΈ.
from functools import reduce # reduce Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ functools
print (reduce (call, funcs, 96)) # output 783012621312
ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»: ΠΠΆΠΎΠΉΠ΄ΠΈΠΏ ΠΡ Π°ΡΡΠ°ΡΠ°ΡΠ΄ΠΆΠΈ
.