ΠΠΈΡΠΎΠ½ - ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΊΠ»Π°ΡΡΡ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ.
[ΠΠ»Π΅Π³ ΠΡΠΎΠΉΡΠΌΠ°Π½]
ΠΠΎΠ΄ΡΠ»ΠΈ - ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π»ΡΠ΄Π΅ΠΉ Π²ΡΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΈΠΌΠ΅Π½. ΠΠΈΡΠΎΠ½ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² - ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Π ΠΠΈΡΠΎΠ½Π΅ ΡΡΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½: Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ (ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ sys), Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. (ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ², ΠΎΠ± ΡΡΠΎΠΌ Π½ΠΈΠΆΠ΅). ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ - ΡΡΠΎ ΡΠΏΠΈΡΠΎΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠΌΠ΅Π½ΠΈ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΠΎΠ΄ΡΠ»Ρ - ΡΡΠΎ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ, ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ Π² ΠΎΠ±ΡΠ΅Π΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ - Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΠ΄ΡΠ»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ) Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° import, ΠΏΠΎΡΠ»Π΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ. ΠΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌΠ΅Π½Π° ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ import: Π²Π°ΡΠΈΠ°Π½Ρ import module Π΄Π΅Π»Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠΌΡ - ΠΈΠΌΡ ΠΌΠΎΠ΄ΡΠ»Ρ module, Π½ΠΎ Π·Π°ΡΠΎ ΡΠ΅ΡΠ΅Π· ΡΡΠΎ ΠΈΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡΠ»Ρ Π² Π²ΠΈΠ΄Π΅ module.name. Π Π²Π°ΡΠΈΠ°Π½ΡΠ΅ from module import name ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΠΈΠΌΡ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΠ΅Π½. Π Π²Π°ΡΠΈΠ°Π½ΡΠ΅ from module import * ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π°. Π₯ΠΎΡΡ Π°Π²ΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΡΡ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ, Π° Π² ΠΎΡΡΡΡΡΡΠ²ΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ ΠΈΠΌΠ΅Π½Π°, Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΠ΅ΡΡ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡ - ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΌΠΎΠ΄ΡΠ»Ρ, Π½Π΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΠ΅ Π² Π΅Π³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠΎΠ΄ΡΠ»Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Python, C ΠΈΠ»ΠΈ C++. ΠΠΎΠ΄ΡΠ»ΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° ΠΠΈΡΠΎΠ½Π΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ (ΠΎΠ± ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ΅ΡΡ Π±ΡΠ΄Π΅Ρ ΠΈΠ΄ΡΠΈ Π½ΠΈΠΆΠ΅). ΠΠΎΠ΄ΡΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° C ΠΈ C++ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ΄ΡΠ»ΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° C/C++ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ (builtin) ΠΈΠ»ΠΈ ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΠΌΡΠ΅ (DLL Π² Windows, ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΡΠ΅Ρ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ UNIX, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠΌΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² ELF).
ΠΠΎΠ΄ΡΠ»Ρ Π½Π° ΠΠΈΡΠΎΠ½Π΅ - ΡΡΠΎ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠΉ ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .py, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΏΠ»ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΡΠΎΡ ΠΊΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠΌΠΏΠΎΡΡΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ, ΡΡΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΆΠ΅ ΠΏΡΠΎΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΈ ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½, ΠΈ ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠ°Ρ ΡΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ.
ΠΠΎΠ΄ΡΠ»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡ Π² Π΄ΡΠ΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡΠ΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ°ΠΊΠ΅Ρ XML ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π² ΡΠ΅Π±Π΅ ΠΏΠ°ΠΊΠ΅ΡΡ DOM, SAX, Parsers (ΠΈ Π΄ΡΡΠ³ΠΈΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ). Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ PyExpat ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ import xml.parsers.expat, ΡΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠ°ΠΊ xml.parsers.expat.ParserCreate, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ from xml.parsers import expat, ΡΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠ°ΠΊ expat.ParserCreate. ΠΠ»ΠΈ ΡΡΠ°Π·Ρ from xml.parsers.expat import ParserCreate!
ΠΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΈΡΠΎΠ½ - ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΠΈΡΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΡΡ ΠΠ-ΠΌΠΎΠ΄Π΅Π»Ρ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ. ΠΠ»Π°ΡΡΡ Π² Python ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ Π²ΡΠ΅ΠΌΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°, Π½ΠΎ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ ΠΊΠ»Π°ΡΡΠ°. ΠΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ . Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ (ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ°) ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΠΌΠ΅ΡΠΎΠ΄Ρ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅. Π’ΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎ ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π°Π·ΡΠ²Π°ΡΡ self. ΠΠ°ΠΊΠΎΠ³ΠΎ-ΡΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄ΠΊΠ° Π²ΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠΎΠ² (ΡΠΈΠΏΠ° Object) Π² Python Π½Π΅Ρ. ΠΠΎΠΎΠ±ΡΠ΅ Π² ΠΠ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π² ΠΠΈΡΠΎΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ Π½Π΅ ΠΊΡΠΎ ΠΎΡ ΠΊΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ, Π° ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ; Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΡΡ Π΄Π°Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Π€ΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΏΠΎΠΊΠ° Π½Π΅Ρ, Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½Ρ Π² ΡΠ·ΡΠΊ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ; Zope Π΄Π΅Π»Π°Π΅Ρ ΡΠ°Π³ΠΈ Π² ΡΡΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ.
ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ Π΄Π΅ΡΡΡΡΠΊΡΠΎΡ ΠΊΠ»Π°ΡΡΠ° Π½Π°Π·ΡΠ²Π°ΡΡΡΡ __init__ ΠΈ __del__ (Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² ΠΠΈΡΠΎΠ½Π΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°ΡΡΡΡ Π΄Π²ΡΠΌΡ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π½ΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΈ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ; ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ·ΡΠΊ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ). ΠΠ΅ΡΠ½Π΅Π΅ Π±ΡΠ»ΠΎ Π±Ρ Π½Π°Π·Π²Π°ΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ initializer ΠΈ finalizer - ΠΎΠ½ΠΈ ΡΠ°ΠΌΠΈ Π½Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΠΈ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ ΠΏΠ°ΠΌΡΡΡ (ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π·Π° Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ), ΠΎΠ½ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡ ΠΈ ΠΎΡΠΈΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
Π ΠΠΈΡΠΎΠ½Π΅ Π½Π΅Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° new Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ°. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΠΊΠ»Π°ΡΡ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ. ΠΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² __init__. ΠΠ΅ΡΠΎΠ΄ __del__, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² (ΠΊΡΠΎΠΌΠ΅, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, self). ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (ΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΊΠ»Π°ΡΡΠΎΠ²) Π² ΠΠΈΡΠΎΠ½Π΅ Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ del.
ΠΡΠΈΠΌΠ΅Ρ.
class Foo:
bar = "baz"
def __init__(self, foo):
self.foo = foo
def __del__(self):
del self.foo
foo = Foo(12)
del foo
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ° ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ (Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ bar) ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΠ° foo, Π° Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΊΠ»Π°ΡΡΠ° - ΡΠ΅ΡΠ΅Π· ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ self.
ΠΠ»Π°ΡΡΡ Π² ΠΠΈΡΠΎΠ½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΄Π»Ρ Π½ΠΈΡ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠΎΠ΄ __getitem__ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π° __setitem__ - ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠΎΠ΄ __getitem__ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠΈΠΊΠ»Π΅ for, ΡΠΌΡΠ»ΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ (sequence). ΠΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π±ΡΠ»Π΅Π²ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°Ρ if ΠΈ while. ΠΠ΅ΡΠΎΠ΄Ρ __getattr__ ΠΈ __setattr__ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΈΡΠ°ΡΡ ΠΈ ΠΏΠΈΡΠ°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ΅ΡΠΎΠ΄ __call__ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ!
Python ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π²ΡΠ΅ ΠΈΠ½ΡΠΈΠΊΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ Π»Π΅Π²ΠΎΠ³ΠΎ ΠΈ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ a - ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° A, ΠΈ b - ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° B, ΡΠΎ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ a + b ΠΠΈΡΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΈΡΠΊΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ __add__ Π² ΠΊΠ»Π°ΡΡΠ΅ A, Π° Π΅ΡΠ»ΠΈ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ - ΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ __radd__ Π² ΠΊΠ»Π°ΡΡΠ΅ B (Π° Π΅ΡΠ»ΠΈ ΠΈ ΡΠ°ΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ - Π²ΠΎΠ·Π±ΡΠ΄ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ TypeError).
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΠΈΡΠ°Π²ΡΠΈΠ΅ Π½Π° C++, Π±ΠΎΡΡΡΡ ΠΈ Π½Π΅ Π»ΡΠ±ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ²ΡΠΎΡΡ ΡΠ·ΡΠΊΠ° Java Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π²ΠΊΠ»ΡΡΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ·ΡΠΊ. Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π°ΠΏΡΠ°ΡΠ½ΠΎ! Python ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π΅ΡΡΠΌΠ° ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΈ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° (code reuse) Π²ΠΌΠ΅ΡΡΠΎ copy/paste-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΠΈ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΠΈ Π΄Π»Ρ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. Π§Π°ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ "ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΎΠ²", ΡΠ»ΠΎΠ²Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ°. Π’Π°ΠΊΠΈΠ΅ "ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΈ" Π² ΠΠ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ MixIn-ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΡΡΠ°ΡΡΡ ΠΏΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ MixIn-ΠΊΠ»Π°ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² Linux Journal
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² (ΡΠΎΡΠ½Π΅Π΅, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ²), Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ ΠΠ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΠ΅Π½, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ°ΠΌ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΡΠΈΠΊΠ»ΠΎΠΌ ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ, ΡΠΎΡ ΡΠ°Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΡΠΈΠΊΠ»Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΠΊΠ»ΠΎΠΌ for, Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π² ΠΠΈΡΠΎΠ½Π΅ - ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ map, filter, reduce ΠΈ ΡΠΎΠΌΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ΅Π±ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠΈΠΊΠ»Π° Π²ΡΠ·ΡΠ²Π°ΡΡ. ΠΡΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π΅Π΅, ΡΠ΅ΠΌ ΡΠΈΠΊΠ» for (ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ-ΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π½Π° C), Π½ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ. Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ map ΠΌΠΎΠΆΠ΅Ρ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠ»Ρ ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΡΠΎ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎ. ΠΠΎ Π²ΠΎΡ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ - Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ. ΠΠ° ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π½Π°Π΄ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ Π½ΡΠΆΠ΄Π΅.
ΠΠΎΡ ΡΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΠ΅Π½, ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π΅ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΠΊΠ»Π°ΡΡΠ°. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠ»Π°ΡΡ
class Process:
def __init__(self):
self.foo = 0
def __call__(self, v):
if self.foo > 100:
raise OverflowError
self.foo += v
return self.foo
Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°: p = Process(), ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ Π² map Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ: result = map(p, sequence). Π€ΡΠ½ΠΊΡΠΈΡ map, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·ΡΠ΅Π²Π°Ρ, Π±ΡΠ΄Π΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΉ Π΅ΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ - ΠΌΡ ΡΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π»ΠΈ ΠΊΠ»Π°ΡΡ, ΡΡΠΎ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ! Π ΠΎΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ p ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
ΠΡΡΠ³ΠΎΠΉ ΠΏΠΎΡ ΠΎΠΆΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ:
class Process:
def __init__(self):
self.sum = 0
def add(self, v):
self.sum += v
return self.sum
p = Process()
result = map(p.add, sequence)
print p.sum
ΠΡΡ ΡΠ°Π·Π½ΠΈΡΠ° Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ - ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π½Π΅ ΠΎΠ±ΡΠ΅ΠΊΡ p, Π° Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ p.add. ΠΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ p.add? Π Python ΡΡΠΎ ΠΎΡΠΎΠ±Π°Ρ ΡΡΡΠ½ΠΎΡΡΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΠ°Ρ BoundMethod. ΠΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠ½ΠΈΡ Π°Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° p, Π°Π΄ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ add ΠΊΠ»Π°ΡΡΠ° Process, ΠΈ, ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΊΠ»Π°ΡΡΠ° Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ self. ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠΈΡΡΡΡ ΠΊ ΡΡΠΎΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ°ΠΊ Process.add, ΡΠΎ ΡΡΠΎ - UnboundMethod, ΠΈ Π΅Π³ΠΎ Π½Π°Π΄ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠ² Π²ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅: Process.add(p, 1). ΠΡΠ·ΠΎΠ² Π² ΡΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΠ°ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°: