Python | ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π―Π·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅: 24.01.2018
Python ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΠΏΠΎΠ². ΠΡΠΎ ΠΈ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΠΈΠ³ΡΡ, ΠΈ Π½Π°ΡΡΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΈΡΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΠ» Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ ΠΈΡΠΊΡΡΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΠ°.
ΠΠΏΠ΅ΡΠ²ΡΠ΅ ΡΠ·ΡΠΊ Python Π±ΡΠ» Π°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ Π² 1991 Π³ΠΎΠ΄Ρ Π³ΠΎΠ»Π»Π°Π½Π΄ΡΠΊΠΈΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΠ²ΠΈΠ΄ΠΎ ΠΠ°Π½ Π ΠΎΡΡΡΠΌΠΎΠΌ. Π‘ ΡΠ΅Ρ ΠΏΠΎΡ Π΄Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ΄Π΅Π»Π°Π» Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ. Π 2000 Π³ΠΎΠ΄Ρ Π±ΡΠ»Π° ΠΈΠ·Π΄Π°Π½Π° Π²Π΅ΡΡΠΈΡ 2.0, Π° Π² 2008 Π³ΠΎΠ΄Ρ — Π²Π΅ΡΡΠΈΡ 3.0. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° Π²ΡΠΎΠ΄Π΅ ΡΠ°ΠΊΠΈΠ΅ Π±ΠΎΠ»ΡΡΠΈΠ΅ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π²ΡΡ ΠΎΠ΄ΡΡ ΠΏΠΎΠ΄Π²Π΅ΡΡΠΈΠΈ. Π’Π°ΠΊ, ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ 3.7. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²ΡΠ΅Ρ ΡΠ΅Π»ΠΈΠ·Π°Ρ , Π²Π΅ΡΡΠΈΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ·ΡΠΊΠ°, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΠΈΠ»ΠΈΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΈ ΠΏΡΠΎΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π½Π° ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅ https://www.python.org/.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python:
Π‘ΠΊΡΠΈΠΏΡΠΎΠ²ΡΠΉ ΡΠ·ΡΠΊ. ΠΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ ΡΠΊΡΠΈΠΏΡΠΎΠ².
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ°ΠΌΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌ.
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠΊΡΠΈΠΏΡΠ°ΠΌΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΊΡΠΈΠΏΡ.
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΏΠΈΡΠΈΠΌ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ΅ ΡΠΊΡΠΈΠΏΡ Ρ Π½Π°Π±ΠΎΡΠΎΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π±Π°ΠΉΡΠΊΠΎΠ΄, Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π² Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ.
ΠΠ΄Π΅ΡΡ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΠΎΡΡ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΡΡΠ°Π½ΡΠ»ΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ Π² Π½Π°Π±ΠΎΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π΄Π²Π° ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π½ΠΎ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΡΠ°ΠΌΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅.
ΠΠΎΡΡΠ°ΡΠΈΠ²Π½ΠΎΡΡΡ ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ. ΠΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊΠ°Ρ Ρ Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° — Windows, Mac OS, Linux, Π½Π°ΠΌ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ Π½Π° Π²ΡΠ΅Ρ ΡΡΠΈΡ ΠΠ‘ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ
Python — ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ Π»Π°ΠΊΠΎΠ½ΠΈΡΠ½ΡΠΉ ΠΈ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π΅Π³ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΠ·ΡΡΠ°ΡΡ, ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π² 2014 Π³ΠΎΠ΄Ρ ΠΎΠ½ Π±ΡΠ» ΠΏΡΠΈΠ·Π½Π°Π½ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ Π² Π‘Π¨Π.
Python ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ΅Π½ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠ΅ΡΠ΅ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ°. Π Π½Π΅ΠΌΠ°Π»ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠΌΠΌΡΡΠ½ΠΈΡΠΈ, Π² ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ², ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠ²Π°Π»ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ².
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Python
ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° Python Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠ»Ρ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ Π½Π° ΡΠ°ΠΉΡ https://www.python.org/ ΠΈ Π½Π° Π³Π»Π°Π²Π½ΠΎΠΉ ΡΡΠ°Π½ΠΈΡΠ΅ Π² ΡΠ΅ΠΊΡΠΈΠΈ Downloads Π½Π°ΠΉΠ΄Π΅ΠΌ ΡΡΡΠ»ΠΊΡ Π½Π° Π·Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ·ΡΠΊΠ° (Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ 3.7.2):
ΠΠ΅ΡΠ΅ΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΡΠ·ΡΠΊΠ°. ΠΠ»ΠΈΠΆΠ΅ ΠΊ Π½ΠΈΠ·Ρ Π½Π° Π½Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΡΠ±Π΅ΡΠ΅ΠΌ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΠΏΠ°ΠΊΠ΅Ρ ΠΈ Π·Π°Π³ΡΡΠ·ΠΈΠΌ Π΅Π³ΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΠΠ‘ Windows 64-Ρ ΡΠ°Π·ΡΡΠ΄Π½Π°Ρ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π²ΡΠ±ΠΈΡΠ°Ρ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ Windows x86-64 executable installer. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π΅Π³ΠΎ.
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π΄Π»Ρ MacOS ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠ½ΠΊΡ macOS 64-bit installer.
ΠΠ° ΠΠ‘ Windows ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΎΡΠ° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΠΊΠ½ΠΎ ΠΌΠ°ΡΡΠ΅ΡΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
ΠΠ΄Π΅ΡΡ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ. ΠΡΡΠ°Π²ΠΈΠΌ Π΅Π³ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΠΎ Π΅ΡΡΡ C:\Users\[ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ]\AppData\Local\Programs\Python\Python36\.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π² ΡΠ°ΠΌΠΎΠΌ Π½ΠΈΠ·Ρ ΠΎΡΠΌΠ΅ΡΠΈΠΌ ΡΠ»Π°ΠΆΠΎΠΊ «Add Python 3.6 to PATH», ΡΡΠΎΠ±Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΡΡ ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ.
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π² ΠΌΠ΅Π½Ρ ΠΡΡΠΊ Π½Π° ΠΠ‘ Windows ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΠΈΠΊΠΎΠ½ΠΊΠΈ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°Π·Π½ΡΠΌ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌ ΠΏΠΈΡΠΎΠ½Π°:
ΠΠ΄Π΅ΡΡ ΡΡΠΈΠ»ΠΈΡΠ° Python 3.7 (64-bit) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ. Π ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ°ΠΌ ΡΠ°ΠΉΠ» ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΠΎ ΠΏΡΡΠΈ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ°. ΠΠ° Windows ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΠΏΡΡΡ C:\Users\[ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ]\AppData\Local\Programs\Python\Python37, Π° ΡΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ°ΠΉΠ» python.exe. ΠΠ° ΠΠ‘ Linux ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎ ΠΏΡΡΠΈ /usr/local/bin/python3.7.
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python / Π₯Π°Π±Ρ
Π Π°ΡΡΡΠΆΠ΄Π°Ρ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ, Π»ΡΠ΄ΠΈ ΡΠ°ΡΡΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ Π²ΡΠ΄Π°Π²Π°ΡΡ ΠΊΡΡΡ Β«ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Β» Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊ. ΠΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Ρ Π²ΠΎΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΠ·ΡΠΊΠ°, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½ΠΈ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΠΌΠ°ΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. ΠΡΠΎ ΠΏΡΠΈΡΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ΡΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ½ΠΈ ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅, Π»Π΅Π½ΠΈΠ²ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈ Π΄Π΅ΡΠ΅ΡΠΌΠ΅Π½ΠΈΠ·ΠΌ. ΠΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.ΠΠ΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ:
a = 0
def increment1():
global a
a += 1
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ:
def increment2(a):
return a + 1
ΠΠΌΠ΅ΡΡΠΎ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΎΠ² ΠΏΠΎ ΡΠΏΠΈΡΠΊΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ map ΠΈ reduce
Map
ΠΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π½Π°Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ . Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ.
ΠΡΠΎΡΡΠΎΠΉ map, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΡΠ½ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ ΡΠΏΠΈΡΠΎΠΊ Π΄Π»ΠΈΠ½:
name_lengths = map(len, ['ΠΠ°ΡΠ°', 'ΠΠ΅ΡΡ', 'ΠΠ°ΡΡ'])
print name_lengths
# => [4, 4, 3]
ΠΡΠΎΡ map Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ Π² ΠΊΠ²Π°Π΄ΡΠ°Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ:
squares = map(lambda x: x * x, [0, 1, 2, 3, 4])
print squares
# => [0, 1, 4, 9, 16]
ΠΠ½ Π½Π΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, Π° Π±Π΅ΡΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΠ΅ΡΠ΅Π· lambda. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ lambda ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ»Π΅Π²Π° ΠΎΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΡ. Π’Π΅Π»ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΠΏΡΠ°Π²Π°. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠ΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠΌΡΠ½ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ·Π²ΠΈΡΠ°ΠΌΠΈ.
import random
names = ['ΠΠ°ΡΠ°', 'ΠΠ΅ΡΡ', 'ΠΠ°ΡΡ']
code_names = ['Π¨ΠΏΡΠ½ΡΠΈΠΊ', 'ΠΠΈΠ½ΡΠΈΠΊ', 'Π€ΡΠ½ΡΠΈΠΊ']
for i in range(len(names)):
names[i] = random.choice(code_names)
print names
# => ['Π¨ΠΏΡΠ½ΡΠΈΠΊ', 'ΠΠΈΠ½ΡΠΈΠΊ', 'Π¨ΠΏΡΠ½ΡΠΈΠΊ']
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΡΠ²ΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ·Π²ΠΈΡΠ° ΡΠ°Π·Π½ΡΠΌ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΌ Π°Π³Π΅Π½ΡΠ°ΠΌ. ΠΡΠ΄Π΅ΠΌ Π½Π°Π΄Π΅ΡΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΠΏΠΎΡΠ»ΡΠΆΠΈΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠΈΡΡΠΈΠΈ.
ΠΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· map:
import random names = ['ΠΠ°ΡΠ°', 'ΠΠ΅ΡΡ', 'ΠΠ°ΡΡ'] secret_names = map(lambda x: random.choice(['Π¨ΠΏΡΠ½ΡΠΈΠΊ', 'ΠΠΈΠ½ΡΠΈΠΊ', 'Π€ΡΠ½ΡΠΈΠΊ']), names)
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 1. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ΅ΡΠ΅Π· map. ΠΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΈΠΌΡΠ½ ΠΈ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡ ΠΏΡΠΎΠ·Π²ΠΈΡΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄.
names = ['ΠΠ°ΡΠ°', 'ΠΠ΅ΡΡ', 'ΠΠ°ΡΡ']
for i in range(len(names)):
names[i] = hash(names[i])
print names
# => [6306819796133686941, 8135353348168144921, -1228887169324443034]
ΠΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:names = ['ΠΠ°ΡΠ°', 'ΠΠ΅ΡΡ', 'ΠΠ°ΡΡ']
secret_names = map(hash, names)
Reduce
Reduce ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π½Π°Π±ΠΎΡ ΠΏΡΠ½ΠΊΡΠΎΠ². ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠΎΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΠΎΠ².
ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ reduce. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠΌΠΌΡ Π²ΡΠ΅Ρ ΠΏΡΠ½ΠΊΡΠΎΠ² Π² Π½Π°Π±ΠΎΡΠ΅:
sum = reduce(lambda a, x: a + x, [0, 1, 2, 3, 4]) print sum # => 10
x β ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠ½ΠΊΡ, Π° β Π°ΠΊΠΊΡΠΌΡΠ»ΡΡΠΎΡ. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ lambda Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΠΏΡΠ½ΠΊΡΠ΅. reduce() ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ lambda Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ Π° ΠΈ Ρ , ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² Π° Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
Π ΡΠ΅ΠΌΡ ΡΠ°Π²Π½ΠΎ Π° Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ? ΠΠ½ΠΎ ΡΠ°Π²Π½ΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ, ΠΈ reduce() Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. Π’ΠΎ Π΅ΡΡΡ, ΠΏΠ΅ΡΠ²ΡΠΉ Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π²Π΅Π½ Π²ΡΠΎΡΠΎΠΌΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΡ Π½Π°Π±ΠΎΡΠ°.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠΈΡΠ°Π΅Ρ, ΠΊΠ°ΠΊ ΡΠ°ΡΡΠΎ ΡΠ»ΠΎΠ²ΠΎ Β«ΠΊΠ°ΠΏΠΈΡΠ°Π½Β» Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ ΡΡΡΠΎΠΊ:
sentences = ['ΠΊΠ°ΠΏΠΈΡΠ°Π½ Π΄ΠΆΠ΅ΠΊ Π²ΠΎΡΠΎΠ±Π΅ΠΉ', 'ΠΊΠ°ΠΏΠΈΡΠ°Π½ Π΄Π°Π»ΡΠ½Π΅Π³ΠΎ ΠΏΠ»Π°Π²Π°Π½ΠΈΡ', 'Π²Π°ΡΠ° Π»ΠΎΠ΄ΠΊΠ° Π³ΠΎΡΠΎΠ²Π°, ΠΊΠ°ΠΏΠΈΡΠ°Π½'] cap_count = 0 for sentence in sentences: cap_count += sentence.count('ΠΊΠ°ΠΏΠΈΡΠ°Π½') print cap_count # => 3
Π’ΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ reduce:
sentences = ['ΠΊΠ°ΠΏΠΈΡΠ°Π½ Π΄ΠΆΠ΅ΠΊ Π²ΠΎΡΠΎΠ±Π΅ΠΉ',
'ΠΊΠ°ΠΏΠΈΡΠ°Π½ Π΄Π°Π»ΡΠ½Π΅Π³ΠΎ ΠΏΠ»Π°Π²Π°Π½ΠΈΡ',
'Π²Π°ΡΠ° Π»ΠΎΠ΄ΠΊΠ° Π³ΠΎΡΠΎΠ²Π°, ΠΊΠ°ΠΏΠΈΡΠ°Π½']
cap_count = reduce(lambda a, x: a + x.count('ΠΊΠ°ΠΏΠΈΡΠ°Π½'),
sentences,
0)
Π ΠΎΡΠΊΡΠ΄Π° Π·Π΄Π΅ΡΡ Π±Π΅ΡΡΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π°? ΠΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΎ ΠΈΠ· ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅. ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΎ Π·Π°Π΄Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ reduce().
ΠΠΎΡΠ΅ΠΌΡ map ΠΈ reduce Π»ΡΡΡΠ΅?
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΡΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠΎΠΊΡ.
ΠΠΎ-Π²ΡΠΎΡΡΡ , Π²Π°ΠΆΠ½ΡΠ΅ ΡΠ°ΡΡΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ,β ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ, ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅,β Π²ΡΠ΅Π³Π΄Π° Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ map ΠΈ reduce.
Π-ΡΡΠ΅ΡΡΠΈΡ , ΠΊΠΎΠ΄ Π² ΡΠΈΠΊΠ»Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΈΠ»ΠΈ Π²Π»ΠΈΡΡΡ Π½Π° ΠΊΠΎΠ΄, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ ΠΏΠΎΡΠ»Π΅ Π½Π΅Π³ΠΎ. ΠΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, map ΠΈ reduce β ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ.
Π-ΡΠ΅ΡΠ²ΡΡΡΡΡ , map ΠΈ reduce β ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΡΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΠ΅ Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ map ΠΈ reduce, Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ.
Π-ΠΏΡΡΡΡ , Ρ Π½ΠΈΡ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΡΠ·Π΅ΠΉ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅, ΡΠ»Π΅Π³ΠΊΠ° ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, filter, all, any ΠΈ find.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 2: ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ map, reduce ΠΈ filter. Filter ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ ΡΠ΅Ρ Π²Π΅ΡΠ΅ΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ True.
people = [{'ΠΈΠΌΡ': 'ΠΠ°ΡΠ°', 'ΡΠΎΡΡ': 160},
{' ΡΠΎΡΡ ': 'Π‘Π°ΡΠ°', ' ΡΠΎΡΡ ': 80},
{'name': 'ΠΠ°ΡΠ°'}]
height_total = 0
height_count = 0
for person in people:
if 'ΡΠΎΡΡ' in person:
height_total += person[' ΡΠΎΡΡ ']
height_count += 1
if height_count > 0:
average_height = height_total / height_count
print average_height
# => 120
ΠΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:people = [{'ΠΈΠΌΡ': 'ΠΠ°ΡΠ°', 'ΡΠΎΡΡ': 160},
{' ΡΠΎΡΡ ': 'Π‘Π°ΡΠ°', ' ΡΠΎΡΡ ': 80},
{'name': 'ΠΠ°ΡΠ°'}]
heights = map(lambda x: x['ΡΠΎΡΡ'],
filter(lambda x: 'ΡΠΎΡΡ' in x, people))
if len(heights) > 0:
from operator import add
average_height = reduce(add, heights) / len(heights)
ΠΠΈΡΠΈΡΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ, Π° Π½Π΅ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ
Π‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΌΡΠ»ΠΈΡΡΠ΅Ρ Π³ΠΎΠ½ΠΊΡ ΡΡΡΡ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»Π΅ΠΉ. Π ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΠ°ΡΠΈΠ½Π° Π»ΠΈΠ±ΠΎ Π΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π²ΠΏΠ΅ΡΡΠ΄, Π»ΠΈΠ±ΠΎ Π½Π΅Ρ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΠΉ Π°Π²ΡΠΎΠΌΠΎΠ±ΠΈΠ»ΡΠΌΠΈ ΠΏΡΡΡ. Π§Π΅ΡΠ΅Π· ΠΏΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΎΠ² Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π³ΠΎΠ½ΠΊΠ° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ.
ΠΡΠΈΠΌΠ΅ΡΡ Π²ΡΠ²ΠΎΠ΄Π°:
-
- -
- -
- -
- -
- - -
- - -
- -
- - -
- - - -
- - -
- - - -
- - - -
- - - -
- - - - -
Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
from random import random
time = 5
car_positions = [1, 1, 1]
while time:
# decrease time
time -= 1
print ''
for i in range(len(car_positions)):
# move car
if random() > 0.3:
car_positions[i] += 1
# draw car
print '-' * car_positions[i]
ΠΠΎΠ΄ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π΅Π½. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ Π±ΡΠ»Π° Π±Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ β ΠΎΠ½Π° Π±Ρ ΠΎΠΏΠΈΡΡΠ²Π°Π»Π°, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, Π° Π½Π΅ ΡΠΎ, ΠΊΠ°ΠΊ ΡΡΠΎ Π½Π°Π΄ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΠΈΡΡ, Π²ΡΡΠ°Π²Π»ΡΡ ΠΊΠΎΠ΄ Π² ΡΡΠ½ΠΊΡΠΈΠΈ:
from random import random
def move_cars():
for i, _ in enumerate(car_positions):
if random() > 0.3:
car_positions[i] += 1
def draw_car(car_position):
print '-' * car_position
def run_step_of_race():
global time
time -= 1
move_cars()
def draw():
print ''
for car_position in car_positions:
draw_car(car_position)
time = 5
car_positions = [1, 1, 1]
while time:
run_step_of_race()
draw()
ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ». Β«ΠΡΠ»ΠΈ ΠΎΡΡΠ°Π»ΠΎΡΡ Π²ΡΠ΅ΠΌΡ, ΠΏΡΠΎΠΉΠ΄ΡΠΌ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π³ Π³ΠΎΠ½ΠΊΠΈ ΠΈ Π²ΡΠ²Π΅Π΄Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. Π‘Π½ΠΎΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π²ΡΠ΅ΠΌΡΒ». ΠΡΠ»ΠΈ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°Π³ Π³ΠΎΠ½ΠΊΠΈ, ΠΎΠ½ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ Π½ΡΠΆΠ½Ρ, ΠΊΠΎΠ΄ ΠΎΠ±ΡΡΡΠ½ΡΠ΅Ρ ΡΠ°ΠΌ ΡΠ΅Π±Ρ.
Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ. ΠΡΠΎΡ ΠΏΡΠΈΡΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½ΠΎ Π»ΠΈΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ½ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°ΡΡ ΠΊΠΎΠ΄, Π½ΠΎ Π½Π΅ Π΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ. Π€ΡΠ½ΠΊΡΠΈΠΈ Π²Π»ΠΈΡΡΡ Π½Π° ΠΎΠΊΡΡΠΆΠ°ΡΡΠΈΠΉ ΠΈΡ ΠΊΠΎΠ΄ ΠΈ ΠΌΠ΅Π½ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π° Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π²ΡΡΡΠ΅ΡΠ°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, Π΅ΠΌΡ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ, ΠΎΡΠΊΡΠ΄Π° ΠΎΠ½Π° Π²Π·ΡΠ»Π°ΡΡ.
ΠΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
from random import random
def move_cars(car_positions):
return map(lambda x: x + 1 if random() > 0.3 else x,
car_positions)
def output_car(car_position):
return '-' * car_position
def run_step_of_race(state):
return {'time': state['time'] - 1,
'car_positions': move_cars(state['car_positions'])}
def draw(state):
print ''
print '\n'.join(map(output_car, state['car_positions']))
def race(state):
draw(state)
if state['time']:
race(run_step_of_race(state))
race({'time': 5,
'car_positions': [1, 1, 1]})
Π’Π΅ΠΏΠ΅ΡΡ ΠΊΠΎΠ΄ ΡΠ°Π·Π±ΠΈΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎΠΌΡ Π΅ΡΡΡ ΡΡΠΈ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°. ΠΠ΅ΡΠ²ΡΠΉ β Π½Π΅Ρ ΡΠ°ΡΡΠ°ΡΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . time ΠΈ car_positions ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΡΡΠΌΠΈΠΊΠΎΠΌ Π² race(). ΠΡΠΎΡΠΎΠ΅ β ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ. Π’ΡΠ΅ΡΡΠ΅ β ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π½Π΅ ΠΌΠ΅Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° run_step_of_race() ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΎΠΏΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ.
ΠΠΎΡ Π²Π°ΠΌ Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ zero() ΠΈ one():
def zero(s):
if s[0] == "0":
return s[1:]
def one(s):
if s[0] == "1":
return s[1:]
zero() ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ s. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β 0, ΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΡΠ°ΡΠΎΠΊ ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ Π½Π΅Ρ β ΡΠΎΠ³Π΄Π° None. one() Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» β 1.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΡΠ½ΠΊΡΠΈΡ rule_sequence(). ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ-ΠΏΡΠ°Π²ΠΈΠ», ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ zero ΠΈ one. ΠΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅ΠΌΡ ΡΡΡΠΎΠΊΡ. ΠΡΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ None, ΡΠΎ Π±Π΅ΡΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΡΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ. Π ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΡΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ None, rule_sequence() ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ None. ΠΠ½Π°ΡΠ΅ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°.
ΠΡΠΈΠΌΠ΅ΡΡ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΈ Π²ΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ :
print rule_sequence('0101', [zero, one, zero])
# => 1
print rule_sequence('0101', [zero, zero])
# => None
ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°Ρ Π²Π΅ΡΡΠΈΡ rule_sequence():
def rule_sequence(s, rules):
for rule in rules:
s = rule(s)
if s == None:
break
return s
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3. ΠΡΠΎΡ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΈΠΊΠ». ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ Π΅Π³ΠΎ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠΈ.
ΠΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:def rule_sequence(s, rules):
if s == None or not rules:
return s
else:
return rule_sequence(rules[0](s), rules[1:])
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΡ (pipelines)
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ Π²ΠΈΠ΄ ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΡΠΈΡΠΌΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΊΠ» ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ»ΠΎΠ²Π°ΡΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠΌΡ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ°Π½Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΈ ΡΡΠ°ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π³ΡΡΠΏΠΏ.
bands = [{'name': 'sunset rubdown', 'country': 'UK', 'active': False},
{'name': 'women', 'country': 'Germany', 'active': False},
{'name': 'a silver mt. zion', 'country': 'Spain', 'active': True}]
def format_bands(bands):
for band in bands:
band['country'] = 'Canada'
band['name'] = band['name'].replace('.', '')
band['name'] = band['name'].title()
format_bands(bands)
print bands
# => [{'name': 'Sunset Rubdown', 'active': False, 'country': 'Canada'},
# {'name': 'Women', 'active': False, 'country': 'Canada' },
# {'name': 'A Silver Mt Zion', 'active': True, 'country': 'Canada'}]
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Β«formatΒ» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ±ΡΠ΅Π΅. Π Π²ΠΎΠΎΠ±ΡΠ΅, ΠΊΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΉΡΡΠ²ΠΎ. Π ΠΎΠ΄Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ ΡΡΠΈ ΡΠ°Π·Π½ΡΠ΅ Π²Π΅ΡΠΈ. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ»ΡΡΠ° ‘country’ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ‘Canada’. Π£Π±ΠΈΡΠ°ΡΡΡΡ ΡΠΎΡΠΊΠΈ ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ Π±ΡΠΊΠ²Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π·Π°Π³Π»Π°Π²Π½ΡΡ. Π‘Π»ΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΊΠΎΠ΄ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ, ΠΈ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, Π΄Π΅Π»Π°Π΅Ρ Π»ΠΈ ΠΎΠ½ ΡΡΠΎ. ΠΠ³ΠΎ ΡΡΠΆΠ΅Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°ΡΡ.
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅:
print pipeline_each(bands, [set_canada_as_country,
strip_punctuation_from_name,
capitalize_names])
ΠΡΡ ΠΏΡΠΎΡΡΠΎ. ΠΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠ²ΡΠ·Π°Π½Ρ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ. ΠΡΡ ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ β Π²Ρ ΠΎΠ΄ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ. ΠΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°ΡΡ.
pipeline_each() ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ Π³ΡΡΠΏΠΏΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΠΎΠ΄Π΅ set_canada_as_country(). ΠΠΎΡΠ»Π΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π³ΡΡΠΏΠΏΠ°ΠΌ, pipeline_each() Π΄Π΅Π»Π°Π΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ.
def assoc(_d, key, value):
from copy import deepcopy
d = deepcopy(_d)
d[key] = value
return d
def set_canada_as_country(band):
return assoc(band, 'country', "Canada")
def strip_punctuation_from_name(band):
return assoc(band, 'name', band['name'].replace('.', ''))
def capitalize_names(band):
return assoc(band, 'name', band['name'].title())
ΠΠ°ΠΆΠ΄Π°Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠ»ΡΡ Π³ΡΡΠΏΠΏΡ Ρ Π½ΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΠΠ΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠΎ ΡΡΠΆΠ΅Π»ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠ΅ΡΠ°Π΅ΠΌ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ assoc(). ΠΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ deepcopy() Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°ΡΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅Ρ ΠΊΠΎΠΏΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡ ΠΊΠΎΠΏΠΈΡ.
ΠΡΡ Π²ΡΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»Ρ Π΄Π°Π½Π½ΡΡ Π·Π°ΡΠΈΡΠ΅Π½Ρ ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΠΎ Π² ΠΊΠΎΠ΄Π΅ Π΅ΡΡΡ Π΄Π²Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½ΡΡ . Π strip_punctuation_from_name() ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΈΠΌΡ Π±Π΅Π· ΡΠΎΡΠ΅ΠΊ ΡΠ΅ΡΠ΅Π· Π²ΡΠ·ΠΎΠ² calling replace() Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π capitalize_names() ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΈΠΌΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΡΠΎΠΏΠΈΡΠ½ΠΎΠΉ Π±ΡΠΊΠ²ΠΎΠΉ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ title() ΠΈ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ. ΠΡΠ»ΠΈ replace ΠΈ time Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ, ΡΠΎ ΠΈ strip_punctuation_from_name() Ρ capitalize_names() Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ.
Π ΡΡΠ°ΡΡΡΡ, ΠΎΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½Ρ. Π Python ΡΡΡΠΎΠΊΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΊΠΎΠΏΠΈΡΠΌΠΈ ΡΡΡΠΎΠΊ. Π£ΡΡ, ΡΠ»Π°Π²Π° Π±ΠΎΠ³Ρ.
Π’Π°ΠΊΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡΠΌΠΈ (ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡΡΡ) Π² Python Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠ·ΡΠΊΠΎΠ² ΡΠΈΠΏΠ° Clojure. Π’Π°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π΅ Π½Π°Π΄ΠΎ Π΄ΡΠΌΠ°ΡΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π»ΠΈ ΠΎΠ½ Π΄Π°Π½Π½ΡΠ΅. ΠΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 4. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ pipeline_each. ΠΠ°Π΄ΡΠΌΠ°ΠΉΡΠ΅ΡΡ Π½Π°Π΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΡΡΠΏΠΏΡ β Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΡΠΊΠ΅ Π΄Π»Ρ Π²ΡΠΎΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:def pipeline_each(data, fns):
return reduce(lambda a, x: map(x, a),
fns,
data)
ΠΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Ρ Π³ΡΡΠΏΠΏΡ. call() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ. ΠΠ½Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΊΠ»ΡΡ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½Π° Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π°.
set_canada_as_country = call(lambda x: 'Canada', 'country')
strip_punctuation_from_name = call(lambda x: x.replace('.', ''), 'name')
capitalize_names = call(str.title, 'name')
print pipeline_each(bands, [set_canada_as_country,
strip_punctuation_from_name,
capitalize_names])
ΠΠ»ΠΈ, ΠΆΠ΅ΡΡΠ²ΡΡ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡΡ:
print pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name')])
ΠΠΎΠ΄ Π΄Π»Ρ call():
def assoc(_d, key, value):
from copy import deepcopy
d = deepcopy(_d)
d[key] = value
return d
def call(fn, key):
def apply_fn(record):
return assoc(record, key, fn(record.get(key)))
return apply_fn
Π§ΡΠΎ ΡΡΡ Ρ Π½Π°Ρ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
ΠΠ΄ΠΈΠ½. call β ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, Ρ.ΠΊ. ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ²Π°. apply_fn() ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΡ (Π³ΡΡΠΏΠΏΡ). ΠΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ record[key]. ΠΡΠ·ΡΠ²Π°Π΅Ρ fn. ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΊΠΎΠΏΠΈΡ Π·Π°ΠΏΠΈΡΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Ρ.
Π’ΡΠΈ. call ΡΠ°ΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ. ΠΡΡ ΡΠ°Π±ΠΎΡΡ Π΄Π΅Π»Π°Π΅Ρ apply_fn(). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ pipeline_each(), ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ apply_fn() Π·Π°Π΄Π°ΡΡ ‘country’ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ‘Canada’. ΠΡΡΠ³ΠΎΠΉ β Π΄Π΅Π»Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΡΡ Π±ΡΠΊΠ²Ρ ΠΏΡΠΎΠΏΠΈΡΠ½ΠΎΠΉ.
Π§Π΅ΡΡΡΠ΅. ΠΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° apply_fn() ΡΡΠ½ΠΊΡΠΈΠΈ fn ΠΈ key Π½Π΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎ Π½Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ apply_fn() ΠΈ Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. ΠΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½ΠΈΠΌ Π±ΡΠ΄Π΅Ρ. ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ½Π° ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° Π·Π°ΠΌΡΠΊΠ°Π΅Ρ β ΡΠ΅, ΡΡΠΎ Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠ½Π°ΡΡΠΆΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ. ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΡΡΡΡΡ ΡΡΠ΅Π΄ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ , Π·Π°ΡΠ΅ΠΌ ΡΡΠ΅Π΄ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΡΡΠ΅Π΄ΠΈ ΡΡΡΠ»ΠΎΠΊ Π½Π° Π·Π°ΠΌΠΊΠ½ΡΡΡΠ΅. Π’Π°ΠΌ ΠΈ Π½Π°ΠΉΠ΄ΡΡΡΡ fn ΠΈ key.
ΠΡΡΡ. Π call Π½Π΅Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΡ Π³ΡΡΠΏΠΏ. ΠΡΠΎ ΠΎΡΡΠΎΠ³ΠΎ, ΡΡΠΎ call ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π»ΡΠ±ΡΡ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠΎΠ², Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΡΡΠΎΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΎΠ±ΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΡΠΈΠ³ΠΎΠ΄Π½ΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΠΈ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΠΎΠ»ΠΎΠ΄ΡΠΎΠΌ. ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ, ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΈ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ β Π²ΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ°Ρ . ΠΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ°ΠΉΠΊΡ Ρ ΠΏΠ΅ΡΠ΅Π½ΡΠΊΠ°ΠΌΠΈ Π²ΡΠΏΠΈΡΡ.
ΠΡΡΠ°ΡΡΡΡ Π΅ΡΡ ΠΎΠ΄Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΡΡ Π³ΡΡΠΏΠΏ. Π£Π±ΡΠ°ΡΡ Π²ΡΡ, ΠΊΡΠΎΠΌΠ΅ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΡΠ°Π½Ρ. Π€ΡΠ½ΠΊΡΠΈΡ extract_name_and_country():
def extract_name_and_country(band):
plucked_band = {}
plucked_band['name'] = band['name']
plucked_band['country'] = band['country']
return plucked_band
print pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name'),
extract_name_and_country])
# => [{'name': 'Sunset Rubdown', 'country': 'Canada'},
# {'name': 'Women', 'country': 'Canada'},
# {'name': 'A Silver Mt Zion', 'country': 'Canada'}]
extract_name_and_country() ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π² ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ pluck(). ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ Π±Ρ ΠΎΠ½Π° ΡΠ°ΠΊ:
print pipeline_each(bands, [call(lambda x: 'Canada', 'country'),
call(lambda x: x.replace('.', ''), 'name'),
call(str.title, 'name'),
pluck(['name', 'country'])])
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5. pluck ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΊΠ»ΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΈΠ· Π·Π°ΠΏΠΈΡΠ΅ΠΉ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π΅Ρ Π½Π°ΠΏΠΈΡΠ°ΡΡ. ΠΡΠΎ Π±ΡΠ΄Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°.
ΠΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅:def pluck(keys):
def pluck_fn(record):
return reduce(lambda a, x: assoc(a, x, record[x]),
keys,
{})
return pluck_fn
Π ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ?
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΡΠ΅ΡΠ°Π΅ΡΡΡ Ρ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΡΠΌ. ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ· ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈ Π²Ρ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°.
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΏΡΠΎ ΠΠ°ΡΡ, ΠΠ΅ΡΡ ΠΈ ΠΠ°ΡΡ. ΠΡΠ΅Π²ΡΠ°ΡΠΈΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌ Π² map ΠΈ reduces.
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ Π³ΠΎΠ½ΠΊΠΈ. Π Π°Π·Π±Π΅ΠΉΡΠ΅ ΠΊΠΎΠ΄ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ. ΠΡΠ΅Π²ΡΠ°ΡΠΈΡΠ΅ ΡΠΈΠΊΠ» Π² ΡΠ΅ΠΊΡΡΡΠΈΡ.
ΠΡΠΏΠΎΠΌΠ½ΠΈΡΠ΅ ΠΏΡΠΎ Π³ΡΡΠΏΠΏΡ. ΠΡΠ΅Π²ΡΠ°ΡΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python 3, Π΄ΠΎΡΡΠΎΠΉΠ½ΡΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ
ΠΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½Π°ΡΠ°Π»ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΡΠΎ Π²ΡΠΎΡΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python Π½Π° ΡΡΠ΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΊΠΎΡΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Python 2 Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½Π°. ΠΠ²ΡΠΎΡ ΡΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ, ΠΎΡΠΌΠ΅ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΎΠ±ΡΡΠΌ Python 3-ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΠΌΡ Π΄ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π²ΠΈΠ΄Π΅ΡΡ, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ ΡΠΎ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Python 2. ΠΠΎ Π΅Π³ΠΎ ΡΠ»ΠΎΠ²Π°ΠΌ, ΠΎΠ½ ΠΈ ΡΠ°ΠΌ Π³ΡΠ΅ΡΠΈΡ ΡΠ΅ΠΌ-ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌ. ΠΠ΄Π΅ΡΡ ΠΎΠ½ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, Π΄ΠΎΡΡΡΠΏΠ½ΡΡ Π»ΠΈΡΡ ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Python 3. ΠΠ½ Π½Π°Π΄Π΅Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±Π»Π΅Π³ΡΠ°Ρ ΠΆΠΈΠ·Π½Ρ ΡΠ΅ΠΌ, ΠΊΡΠΎ ΠΎ Π½ΠΈΡ ΡΠ·Π½Π°Π΅Ρ.ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠ΅ Π² ΡΡΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅, Π½Π°ΠΏΠΈΡΠ°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Python 3.7. Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΠΌΠ΅ΡΡΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Python, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ Π΅Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
Π€ΠΎΡΠΌΠ°ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ (3.6+)
ΠΠ΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠΎ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ Π½ΡΠΆΠ½Ρ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. Π’Π°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΠΏΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ, Π½Π΅ ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΠΎΠΌ Π΄ΡΡΠ΅Π²Π½ΠΎΠ³ΠΎ ΡΠ°Π²Π½ΠΎΠ²Π΅ΡΠΈΡ. ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ
format
:user = "Jane Doe"
action = "buy"
log_message = 'User {} has logged in and did an action {}.'.format(
Β user,
Β action
)
print(log_message)
# User Jane Doe has logged in and did an action buy.
Python 3, Π½Π°ΡΡΠ΄Ρ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ
format
, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠΌΠ°ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ (f-strings, f-ΡΡΡΠΎΠΊΠΈ). ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ
ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΉ ΡΠΎ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΡΠΌΠ°ΡΠ½ΡΡ
ΡΡΡΠΎΠΊ:user = "Jane Doe"
action = "buy"
log_message = f'User {user} has logged in and did an action {action}.'
print(log_message)
# User Jane Doe has logged in and did an action buy.
ΠΠΎΠ΄ΡΠ»Ρ pathlib (3.4+)
Π€ΠΎΡΠΌΠ°ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ β Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, Π½ΠΎ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ, Π²ΡΠΎΠ΄Π΅ ΠΏΡΡΠ΅ΠΉ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ, ΡΠΎΠ·Π΄Π°Π½Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ, ΡΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°ΡΡΠΈΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ Π½ΠΈΠΌΠΈ. Π Python 3 ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ pathlib, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ΄ΠΎΠ±Π½ΡΡ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΡΡΠΌΠΈ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½Ρ Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²Π°ΡΠΈΡ Π·Π°Π΄Π°Ρ β Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π».
from pathlib import Path
root = Path('post_sub_folder')
print(root)
# post_sub_folder
path = root / 'happy_user'
# ΠΠ΅Π»Π°Π΅ΠΌ ΠΏΡΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΌ
print(path.resolve())
# /home/weenkus/Workspace/Projects/DataWhatNow-Codes/how_your_python3_should_look_like/post_sub_folder/happy_user
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² (3.5+)
Π§ΡΠΎ Π»ΡΡΡΠ΅ β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ»ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ? ΠΠΎΠΆΠ°Π»ΡΠΉ, ΠΏΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ Π½Π° ΡΡΠΎΡ Π½Π΅ΠΏΡΠΎΡΡΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ. Π― ΠΎΡΡΠ°Π²Π»ΡΡ Π½Π° ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»Π΅ΠΉ ΡΠΎ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΎΠ½ΠΈ ΡΠΈΠΏΠΈΠ·ΠΈΡΡΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π±ΡΠ΄Π΅Ρ Ρ ΠΎΡΡ Π±Ρ Π·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Python 3 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ².
def sentence_has_animal(sentence: str) -> bool:
Β return "animal" in sentence
sentence_has_animal("Donald had a farm without animals")
# True
ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ (3.4+)
Python 3 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ
Enum
, ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠΎΠ² ΠΊΠΎΠ½ΡΡΠ°Π½Ρ. ΠΠΎΠ½ΡΡΠ°Π½ΡΡ, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π±Π΅ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ½ΠΎ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½Π½ΡΠΌΠΈ Π² ΠΊΠΎΠ΄Π΅.from enum import Enum, auto
class Monster(Enum):
Β Β Β ZOMBIE = auto()
Β Β Β WARRIOR = auto()
Β Β Β BEAR = auto()
Β Β Β
print(Monster.ZOMBIE)
# Monster.ZOMBIE
ΠΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Python 3 ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ β ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈΠΌΡΠ½ (ΡΠ»Π΅Π½ΠΎΠ²), ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ. Π§Π»Π΅Π½Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΡΡ.
for monster in Monster:
Β Β Β print(monster)
# Monster.ZOMBIE
# Monster.WARRIOR
# Monster.BEAR
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠΉ LRU-ΠΊΡΡ (3.2+)
Π Π½Π°ΡΠΈ Π΄Π½ΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΈ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ . Python 3 Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ lru_cache, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ LRU-ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ (Least Recently Used).
ΠΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ ΡΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Π° ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π· Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² Ρ ΠΎΠ΄Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
import time
def fib(number: int) -> int:
Β Β Β if number == 0: return 0
Β Β Β if number == 1: return 1
Β Β Β
Β Β Β return fib(number-1) + fib(number-2)
start = time.time()
fib(40)
print(f'Duration: {time.time() - start}s')
# Duration: 30.684099674224854s
Π’Π΅ΠΏΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ
lru_cache
Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΠ°ΠΊΠ°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΠ΅ΠΉ). Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π½ΡΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡΠ»ΠΎΡΡ ΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ, ΡΠ΅ΠΏΠ΅ΡΡ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΡΡΡ Π½Π°Π½ΠΎΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠΈ.from functools import lru_cache
@lru_cache(maxsize=512)
def fib_memoization(number: int) -> int:
Β Β Β if number == 0: return 0
Β Β Β if number == 1: return 1
Β Β Β
Β Β Β return fib_memoization(number-1) + fib_memoization(number-2)
start = time.time()
fib_memoization(40)
print(f'Duration: {time.time() - start}s')
# Duration: 6.866455078125e-05s
Π Π°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² (3.0+)
ΠΡΠΈ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ°Π²ΡΡ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΡ. Π ΡΠ°ΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π²ΡΡ ΡΠΎ, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠΏΠ°Π»ΠΎ Π² Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅. Π’Π°ΠΊ, Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
head
ΠΈ tail
ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ°, ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ range(5)
. Π ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ body
ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π²ΡΡ ΡΠΎ, ΡΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ.head, *body, tail = range(5)
print(head, body, tail)
# 0 [1, 2, 3] 4
py, filename, *cmds = "python3.7 script.py -n 5 -l 15".split()
print(py)
print(filename)
print(cmds)
# python3.7
# script.py
# ['-n', '5', '-l', '15']
first, _, third, *_ = range(10)
print(first, third)
# 0 2
ΠΠ»Π°ΡΡΡ Π΄Π°Π½Π½ΡΡ (3.7+)
Π Python 3 ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΠΊΠ»Π°ΡΡΡ Π΄Π°Π½Π½ΡΡ (data classes). ΠΠ½ΠΈ Π΄Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΌΠ° ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ
dataclass
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ __init__()
ΠΈ __repr__()
. Π ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ΅ΠΊΡΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ ΠΊΠ°ΠΊ Β«ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΡΠ΅ΠΆΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡΒ». ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ° dataclass
:class Armor:
Β Β Β
Β Β Β def __init__(self, armor: float, description: str, level: int = 1):
Β Β Β Β Β Β Β self.armor = armor
Β Β Β Β Β Β Β self.level = level
Β Β Β Β Β Β Β self.description = description
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β
Β Β Β def power(self) -> float:
Β Β Β Β Β Β Β return self.armor * self.level
Β Β Β
armor = Armor(5.2, "Common armor.", 2)
armor.power()
# 10.4
print(armor)
# <__main__.Armor object at 0x7fc4800e2cf8>
ΠΠΎΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ
dataclass
:from dataclasses import dataclass
@dataclass
class Armor:
Β Β Β armor: float
Β Β Β description: str
Β Β Β level: int = 1
Β Β Β
Β Β Β def power(self) -> float:
Β Β Β Β Β Β Β return self.armor * self.level
Β Β Β
armor = Armor(5.2, "Common armor.", 2)
armor.power()
# 10.4
print(armor)
# Armor(armor=5.2, description='Common armor.', level=2)
ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΠ°ΠΏΠΎΠΊ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π±Π΅Π· ΡΠ°ΠΉΠ»Π° __init__.py (3.3+)
ΠΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python-ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² (ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ , Π² ΠΊΠΎΡΠΎΡΡΡ Π΅ΡΡΡ ΡΠ°ΠΉΠ»
__init__.py
). ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ:sound/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠ°ΠΊΠ΅Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ
Β Β Β Β Β __init__.py Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° sound
Β Β Β Β Β formats/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
Β Β Β Β Β Β Β Β Β Β Β Β Β wavread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β wavwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β aiffread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β aiffwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β auread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β auwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β effects/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ Π·Π²ΡΠΊΠΎΠ²ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
Β Β Β Β Β Β Β Β Β Β Β Β Β echo.py
Β Β Β Β Β Β Β Β Β Β Β Β Β surround.py
Β Β Β Β Β Β Β Β Β Β Β Β Β reverse.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β filters/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β __init__.py
Β Β Β Β Β Β Β Β Β Β Β Β Β equalizer.py
Β Β Β Β Β Β Β Β Β Β Β Β Β vocoder.py
Β Β Β Β Β Β Β Β Β Β Β Β Β karaoke.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Python 2 Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΏΠ°ΠΏΠΎΠΊ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» Π±ΡΡΡ ΡΠ°ΠΉΠ»
__init__.py
. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ ΠΏΠ°ΠΏΠΊΠ° Π²ΠΎΡΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΡΡΡ Π² Π²ΠΈΠ΄Π΅ Python-ΠΏΠ°ΠΊΠ΅ΡΠ°. Π Python 3, Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Implicit Namespace Packages, Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΠΏΠ°ΠΏΠΊΠ°Ρ
ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌ.sound/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠ°ΠΊΠ΅Ρ Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ ΡΡΠΎΠ²Π½Ρ
Β Β Β Β Β __init__.py Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° sound
Β Β Β Β Β formats/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² ΡΠ°ΠΉΠ»ΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β wavread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β wavwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β aiffread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β aiffwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β auread.py
Β Β Β Β Β Β Β Β Β Β Β Β Β auwrite.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β effects/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ Π·Π²ΡΠΊΠΎΠ²ΡΡ
ΡΡΡΠ΅ΠΊΡΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β echo.py
Β Β Β Β Β Β Β Β Β Β Β Β Β surround.py
Β Β Β Β Β Β Β Β Β Β Β Β Β reverse.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β filters/ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ΠΠΎΠ΄ΠΏΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²
Β Β Β Β Β Β Β Β Β Β Β Β Β equalizer.py
Β Β Β Β Β Β Β Β Β Β Β Β Β vocoder.py
Β Β Β Β Β Β Β Β Β Β Β Β Β karaoke.py
Β Β Β Β Β Β Β Β Β Β Β Β Β ...
ΠΠ°Π΄ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π²ΡΡ Π½Π΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΡΡΠΎΠΉ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ, ΡΠ°ΠΉΠ»
__init__.py
Π²ΡΡ Π΅ΡΡ Π½ΡΠΆΠ΅Π½ Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΡΠ»ΠΈ ΡΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ, ΡΠΎ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈΠΌΡΠ½, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.ΠΡΠΎΠ³ΠΈ
Π ΡΡΠΎΠΌ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Ρ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python 3, Π½ΠΎ ΠΌΡ Π½Π°Π΄Π΅Π΅ΠΌΡΡ, ΡΡΠΎ Π²Ρ Π½Π°ΡΠ»ΠΈ Π·Π΄Π΅ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅. ΠΠΎΠ΄ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΡΡΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ! ΠΠ°ΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Python 3 Π²Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Π±Ρ Π² ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΡΠΉ Π·Π΄Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ?
ΠΠΎΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΠΈΡΠΎΠ½ΠΎΠ²? / Π₯Π°Π±Ρ
ΠΠΈΡΠΎΠ½ ΠΈΠ·ΡΠΌΠΈΡΠ΅Π»Π΅Π½.Π£Π΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Π½ΠΎ ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠ΅ Π·Π°ΡΠ²Π»Π΅Π½ΠΈΠ΅. Π§ΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π²Π²ΠΈΠ΄Ρ ΠΏΠΎΠ΄ βΠΠΈΡΠΎΠ½ΠΎΠΌβ? ΠΠΎΠΆΠ΅Ρ, Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΠΈΡΠΎΠ½Π°? ΠΠ»ΠΈ CPython, ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π° (Π½Π΅ ΠΏΡΡΠ°ΡΡ Ρ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌ ΠΏΠΎ Π½Π°Π·Π²Π°Π½ΠΈΡ Cython)? ΠΠ»ΠΈ Ρ ΠΈΠΌΠ΅Ρ Π²Π²ΠΈΠ΄Ρ ΡΡΠΎ-ΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ½ΠΎΠ΅? ΠΠΎΠΆΠ΅Ρ, Ρ ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ ΡΡΡΠ»Π°ΡΡΡ Π½Π° Jython, ΠΈΠ»ΠΈ IronPython, ΠΈΠ»ΠΈ PyPy. ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΎΡΠ²Π»Π΅ΠΊΡΡ ΡΠ°ΠΊ ΡΠΈΠ»ΡΠ½ΠΎ, ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΡ ΠΎ RPython ΠΈΠ»ΠΈ RubyPython (ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ).
ΠΠ΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΡ ΠΎΠΆΠ΅ΡΡΡ Π² Π½Π°Π·Π²Π°Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ Π²ΡΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ (ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΈΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ)
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΠΈΡΠΎΠ½ΠΎΠΌ Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΡΡ Ρ ΠΊΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ *ython. ΠΠΎ Π»ΠΈΡΡ Π½Π΅Π΄Π°Π²Π½ΠΎ Ρ ΡΠ΄Π΅Π»ΠΈΠ» Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΎΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ½ΠΈ (ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΏΠΎ-ΡΠ²ΠΎΠ΅ΠΌΡ) Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ Π½Π°ΡΠ½Ρ Ρ Π½ΡΠ»Ρ ΠΈ ΠΏΡΠΎΠΉΠ΄ΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌ ΠΠΈΡΠΎΠ½Π°, Π° Π·Π°ΠΊΠΎΠ½ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² PyPy, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ, ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ, Π±ΡΠ΄ΡΡΠ΅Π΅ ΡΠ·ΡΠΊΠ°.
ΠΡΠ΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΠ΅ΠΌ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ βΠΠΈΡΠΎΠ½β.
ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Ρ ΠΎΡΠΎΡΠ΅Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π».
ΠΠΈΡΠΎΠ½ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ?
ΠΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠ΅Π΄ΠΈ Π½ΠΎΠ²ΠΈΡΠΊΠΎΠ² ΠΠΈΡΠΎΠ½Π°.
ΠΠ΅ΡΠ²ΠΎΠ΅, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡΡ: βΠΠΈΡΠΎΠ½β β ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ°Ρ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°ΡΡ ΠΠΈΡΠΎΠ½, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π±Ρ Π²Π΅ΡΡΠΈ (ΡΡΠΎ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°). Π ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ (ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°).
ΠΡΠΎΡΠΎΠ΅: βΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉβ ΠΈ βΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉβ ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π’Π°ΠΊ ΡΡΠΎ ΡΠ°ΠΌ Π²ΠΎΠΏΡΠΎΡ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½.
Π ΡΠ»ΡΡΠ°Π΅ Ρ ΡΠ°ΠΌΠΎΠΉ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ (CPython: Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° C, ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎ βPythonβ, ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ½ΡΡΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΎ ΡΠ΅ΠΌ Ρ ΡΠΎΠ»ΠΊΡΡ) ΠΎΡΠ²Π΅Ρ: ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ, Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠ΅ΠΉ. CPython ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ* ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΡΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄, Π·Π°ΠΏΡΡΠΊΠ°Ρ Π΅Π³ΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅.
* ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ Π² ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅. ΠΠ±ΡΡΠ½ΠΎ, ΠΌΡ ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ ΡΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠ°ΡΠΈΡ ΠΈΠ· Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ β Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΎΠ΄Π΅ ΡΡΠΎ βΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡβ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΡΡΠΈΠΌ ΡΡΠΎΡ ΠΎΡΠ²Π΅Ρ ΠΏΠΎΠ»ΡΡΡΠ΅, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΠΎΠ½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠ΅ Π½Π°Ρ Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΠ°ΠΉΡΠΊΠΎΠ΄ ΠΈΠ»ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΡΠ΅Π½Ρ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌ (ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ) ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΎΠΆΠ°Π»ΡΠΉ, Π»Π΅Π³ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΅Π΅ ΠΏΠΎΠ½ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
β CΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π°ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°Π·Π½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
β Java ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΡΡΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° ΠΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ Java (Java Virtual Machine, JVM), Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ JVM, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΎΠΌ.
Π‘ΠΈΠ»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Ρ: ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅, Π½ΠΎ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π»ΡΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΈ Π·Π°ΡΠΈΡΠ΅Π½.
ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π±Π°ΠΉΡΠΊΠΎΠ΄ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΉ Π½Π° Π²ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½Π°Ρ . ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ΄ Π²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡ ΠΊ CPython, ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
1. CPython ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π²Π°Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄.
2. ΠΡΠΎΡ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ CPython.
ΠΠΎΠ²ΠΈΡΠΊΠΈ Π·Π°ΡΠ°ΡΡΡΡ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ, ΡΡΠΎ ΠΠΈΡΠΎΠ½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠΉ ΠΈΠ·-Π·Π° Π½Π°Π»ΠΈΡΠΈΡ .pyc-ΡΠ°ΠΉΠ»ΠΎΠ². ΠΡΠΎ ΠΎΡΡΠ°ΡΡΠΈ Π²Π΅ΡΠ½ΠΎ: .pyc-ΡΠ°ΠΉΠ»Ρ β ΡΡΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ. Π’Π°ΠΊ ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅, ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ .pyc-ΡΠ°ΠΉΠ», ΡΠΎ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°Π· ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΅ΠΌΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°Π½ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ: Jython, IronPython ΠΈ Π΄ΡΡΠ³ΠΈΠ΅
ΠΠ°ΠΊ Ρ Π³ΠΎΠ²ΠΎΡΠΈΠ» Π²ΡΡΠ΅, Ρ ΠΠΈΡΠΎΠ½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ. ΠΠΏΡΡΡ ΠΆΠ΅, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈ-Π»ΠΎΡΡ Π²ΡΡΠ΅, ΡΠ°ΠΌΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ CPython. ΠΡΠ° Π²Π΅ΡΡΠΈΡ ΠΠΈΡΠΎΠ½Π° Π½Π°ΠΏΠΈΡΠ°Π½Π° Π½Π° C ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ βΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡβ.
ΠΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²? ΠΠ΄Π½Π° ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²ΠΈΠ΄Π½ΡΡ ΡΡΠΎ Jython, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π° Π½Π° Java, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ JVM. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ CPython Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° CPython VM, Jython Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π±Π°ΠΉΡΠΊΠΎΠ΄ Java Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° JVM (ΡΡΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Java).
βΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ?β, ΡΠΏΡΠΎΡΠΈΡΠ΅ Π²Ρ. ΠΡ, Π΄Π»Ρ Π½Π°ΡΠ°Π»Π°, ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΎΡΠΎΡΠΎ Π»Π°Π΄ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ.
CPython ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ CΠΈ. Jython Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° Java: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΡΠ±ΡΠ΅ Java-ΠΊΠ»Π°ΡΡΡ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ, ΠΏΡΠΈΠ·ΡΠ²Π°Ρ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²Π°ΡΠΈ Java-ΠΊΠ»Π°ΡΡΡ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° Jython. (ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Π΅ΡΠ»ΠΈ Π²Ρ Π΅ΡΠ΅ Π½Π΅ Π΄ΡΠΌΠ°Π»ΠΈ ΠΎΠ± ΡΡΠΎΠΌ Π²ΡΠ΅ΡΡΠ΅Π·, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π΅Π·ΡΠΌΠ½ΠΎ. ΠΡ Π΄ΠΎΠΆΠΈΠ»ΠΈ Π΄ΠΎ ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π² ΠΎΠ΄Π½Ρ ΡΡΡΠ½ΠΎΡΡΡ. ΠΠ°ΠΊ Π·Π°ΠΌΠ΅ΡΠΈΠ» Rostin, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΌΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΠΊΠΎΠ΄ Π½Π° Π€ΠΎΡΡΡΠ°Π½Π΅ Ρ CΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄Π°Π²Π½ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΈΠ½ΠΊΠ°. ΠΠΎ ΡΡΠΎ Π²ΡΠ΅ ΠΆΠ΅ ΠΊΡΡΡΠΎ.)
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π²ΠΎΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Jython:
[Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_51
>>> from java.util import HashSet
>>> s = HashSet(5)
>>> s.add("Foo")
>>> s.add("Bar")
>>> s
[Foo, Bar]
IronPython ΡΡΠΎ Π΄ΡΡΠ³Π°Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π° C# ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ .NET. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ .NET, Π΅ΡΠ»ΠΈ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ Π½Π°Π·Π²Π°ΡΡ, Π½Π° Common Language Runtime (CLR), ΠΎΡ ΠΠ°ΠΉΠΊΡΠΎΡΠΎΡΡ, ΡΡΠ°Π²Π½ΠΈΠΌΡΠΌ Ρ JVM.
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ Jython: Java :: IronPython: C#. ΠΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ»Π°ΡΡΡ C# Π² ΠΊΠΎΠ΄ IronPython ΠΈ ΠΊΠ»Π°ΡΡΡ Java Π² ΠΊΠΎΠ΄ Jython, ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
ΠΠΏΠΎΠ»Π½Π΅ ΡΠ΅Π°Π»ΡΠ½ΠΎ Π²ΡΠΆΠΈΡΡ, Π½Π΅ ΠΏΡΠΈΠΊΠ°ΡΠ°ΡΡΡ ΠΊ Π½ΠΈ ΠΊ ΡΠ΅ΠΌΡ, ΠΊΡΠΎΠΌΠ΅ CPython. ΠΠΎ, ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΠ·-Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠΎΠ², ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° JVM? Jython ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ ΠΏΠΎΠ΄ΠΎΠΉΡΠΈ. ΠΡΠ΅ Π½Π° .NET? ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ IronPython (ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ ΡΠΆΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ).
ΠΡΡΠ°ΡΠΈ, Ρ ΠΎΡΡ ΡΡΠΎ ΠΈ Π½Π΅ ΡΡΠ°Π½Π΅Ρ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° Π½Π° Π΄ΡΡΠ³ΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ, ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΡΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π½Π° ΠΠΈΡΠΎΠ½Π΅. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΈ ΠΎΡΠ»ΠΈΡΠΈΡ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π΅-Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Ρ, ΠΎΠ½ΠΈ ΠΈΡΡΠ΅Π·Π°ΡΡ ΠΈ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΠ·-Π·Π° Π°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π ΠΏΡΠΈΠΌΠ΅ΡΡ, IronPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ Unicode ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ; ΠΎΠ΄Π½Π°ΠΊΠΎ CPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ASCII Π² Π²Π΅ΡΡΠΈΡΡ 2.x (Π²ΡΠ΄Π°Π²Π°Ρ ΠΎΡΠΈΠ±ΠΊΡ UnicodeEncodeError Π΄Π»Ρ Π½Π΅-ASCII ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²), ΠΈ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Unicode ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π²Π΅ΡΡΠΈΡΡ 3.x.
ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° Π»Π΅ΡΡ (Just-in-Time Compilation): PyPy ΠΈ Π±ΡΠ΄ΡΡΠ΅Π΅
ΠΡΠ°ΠΊ, Ρ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Π‘ΠΈ, Π΅ΡΠ΅ ΠΎΠ΄Π½Π° β Π½Π° Java, ΠΈ ΡΡΠ΅ΡΡΡ Π½Π° C#. Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ ΡΠ°Π³: ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π°β¦ ΠΠΈΡΠΎΠ½Π΅. (ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΡΠΈΡΠ°ΡΠ΅Π»Ρ Π·Π°ΠΌΠ΅ΡΠΈΡ, ΡΡΠΎ ΡΡΠΎ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ°Π½ΡΠΈΠ²ΠΎ).
ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ±ΠΈΠ²Π°ΡΡ Ρ ΡΠΎΠ»ΠΊΡ. ΠΠ»Ρ Π½Π°ΡΠ°Π»Π°, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π½Π° Π»Π΅ΡΡ (just-in-time ΠΈΠ»ΠΈ JIT).
JIT. ΠΠΎΡΠ΅ΠΌΡ ΠΈ ΠΊΠ°ΠΊ
ΠΠ°ΠΏΠΎΠΌΠ½Ρ, ΡΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΡΡΠ΅Π΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°. ΠΡ, Π° ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄? ΠΡΠΈΡΠ»ΠΎΡΡ Π±Ρ βΠ·Π°ΠΏΠ»Π°ΡΠΈΡΡβ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅Π½Ρ (ΠΈΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ: Π²ΡΠ΅ΠΌΡ) Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Π±Π°ΠΉΡΠΊΠΎΠ΄Π°, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΡΡΡΡΠ΅Π΅, ΡΠΎ ΡΡΠΎ Π·Π΄ΠΎΡΠΎΠ²ΠΎ! ΠΡΠΈΠΌ ΠΈ ΠΌΠΎΡΠΈΠ²ΠΈΡΡΠ΅ΡΡΡ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, Π³ΠΈΠ±ΡΠΈΠ΄Π½Π°Ρ ΡΠ΅Ρ Π½ΠΈΠΊΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΠ΅Π±Π΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎ-ΡΠΎΠ² ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ². Π Π΄Π²ΡΡ ΡΠ»ΠΎΠ²Π°Ρ β JIT ΡΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΡΡΠΎΠ±Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ JIT:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°ΡΡΠΎ.
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄.
- ΠΠ°ΠΊΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
- ΠΡΠ΅Π³Π΄Π° ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ Π±Π°ΠΉΡΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΆΠ΅ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠΆΠΈΠ½Π°ΡΡ ΠΏΠ»ΠΎΠ΄Ρ (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΈΡΠΎΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ).
Π ΡΡΠΎΠΌ Π²ΡΡ ΡΡΡΡ PyPy: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ JIT Π² ΠΠΈΡΠΎΠ½Π΅ (Π² Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ΅Π»ΠΈ: PyPy Π½Π°ΡΠ΅Π»Π΅Π½ Π½Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ, ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ stackless (ΠΎΡΠΊΠ°Π·Π° ΠΎΡ ΡΡΠ΅ΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ·ΡΠΊΠ° Π‘ΠΈ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ΅ΠΊΠ°). ΠΠΎ JIT ΡΡΠΎ Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ. Π ΡΡΠ΅Π΄Π½Π΅ΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΡΠΎΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 6.27. ΠΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ· ΡΡ Π΅ΠΌΡ ΠΎΡ PyPy Speed Center:
Π PyPy ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ
Π£ PyPy Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π», ΠΈ Π² Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΠ½ Ρ ΠΎΡΠΎΡΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ CPython (ΡΠ°ΠΊ ΡΡΠΎ Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Flask, Django, ΠΈ Ρ.Π΄.).
ΠΠΎ Ρ PyPy Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠ°Π½ΠΈΡΡ. (ΠΎΡΠ΅Π½ΠΈΡΠ΅, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΡΡΠΎ Π±Π΅ΡΡΠΌΡΡΠ»Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ PyPyPyβ¦). ΠΠΎ ΠΌΠΎΠ΅ΠΌΡ ΠΌΠ½Π΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° Π² ΡΠΎΠΌ, ΡΡΠΎ PyPy ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ:
1. ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΠΈΡΠΎΠ½Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ Π½Π° RPython (Π½Π΅ Python (Ρ ΠΎΠ±ΠΌΠ°Π½ΡΠ» Π²Π°Ρ Π΄ΠΎ ΡΡΠΎΠ³ΠΎ)). RPython ΡΡΠΎ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Python ΡΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΎΠΉ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΠ΅ΠΉ. Π Python, Π²Π΅ΡΡΠΈ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π±Π΅ΡΠ΅Π΄Ρ ΠΎ ΡΠΈΠΏΠ°Ρ βΠ² ΡΠ΅Π»ΠΎΠΌ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎβ ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ ΡΠ»ΠΎΠΆΠ½ΠΎ? ΡΠ°ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
x = random.choice([1, "foo"])
ΡΡΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° Python (ΡΠΏΠ°ΡΠΈΠ±ΠΎ AdemanβΡ). ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Ρ x? ΠΠ°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡ ΡΠΈΠΏΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠΈΠΏΡ Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠΎΡΡΠΈΡΡΡΡΡΡ?). Π RPython ΠΌΡ ΠΆΠ΅ΡΡΠ²ΡΠ΅ΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡΡΡ, Π½ΠΎ Π²Π·Π°ΠΌΠ΅Π½ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ Π΅ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
2. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄ Π½Π° RPython Π² ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΡΠΌΠ°ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JIT. ΠΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π‘ΠΈ, ΡΠΎ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ RPython-Π²-Π‘ΠΈ, Π½ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ JVM ΠΈ Π΄ΡΡΠ³ΠΈΠ΅.
ΠΠ»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, Ρ Π±ΡΠ΄Ρ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΈΡ PyPy (1) ΠΈ PyPy (2).
ΠΠ°ΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΡΠΈ Π΄Π²Π΅ Π²Π΅ΡΠΈ, ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ β Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°Π±ΠΎΡΠ΅? ΠΡΠΌΠ°ΠΉΡΠ΅ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°ΠΊ: PyPy (1) ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° RPython. Π’ΠΎ Π΅ΡΡΡ ΠΎΠ½ Π±Π΅ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ Π΅Π³ΠΎ Π² Π±Π°ΠΉΡΠΊΠΎΠ΄. ΠΠΎ ΡΡΠΎΠ±Ρ ΡΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ (Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° RPython) ΠΌΠΎΠ³ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΠΈ-ΡΠΎΠ½Π°, Π²Π΅ΡΠ½ΠΎ?
ΠΡΠ°ΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ CPython ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ. ΠΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΡΡΡΠΎ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ PyPy (2) (Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ RPython Toolchain) ΡΡΠΎΠ±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ PyPy Π² ΠΊΠΎΠ΄ Π΄Π»Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, C, JVM, ΠΈΠ»ΠΈ CLI) Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ JIT. ΠΡΠΎ Π²ΠΎΠ»ΡΠ΅Π±Π½ΠΎ: PyPy Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ JIT ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ, Π³Π΅Π½Π΅ΡΠΈΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ! (ΠΠΏΡΡΡ ΠΆΠ΅, ΡΡΠΎ Π±Π΅Π·ΡΠΌΠΈΠ΅: ΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ, ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ).
Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ JIT. Π’ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ! ΠΠΎΠ½ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΠ²Π°ΡΠΎ, Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ° ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ:
ΠΠΎΠ²ΡΠΎΡΠΈΠΌ: Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΊΡΠ°ΡΠΎΡΠ° PyPy Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅Π±Π΅ ΠΊΡΡΡ ΡΠ°Π·Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΠΈΡΠΎΠ½Π° Π½Π° RPython Π½Π΅ Π²ΠΎΠ»Π½ΡΡΡΡ ΠΎ JIT (Π½Π΅ ΡΡΠΈΡΠ°Ρ ΠΏΠ°ΡΡ Π΄Π΅ΡΠ°Π»Π΅ΠΉ). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ PyPy ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π΄Π»Ρ Π½Π°Ρ JIT, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ RPython Toolchain/PyPy (2).
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΏΠ½ΡΡΡ Π³Π»ΡΠ±ΠΆΠ΅ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ, ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°, Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ Π² PyPy ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ JIT Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ°. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ PyPy ΠΊΠΎΠ½ΡΠ΅Π½ΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°, Π° Π½Π΅ Π΄Π΅ΡΠ°Π»Π΅ΠΉ ΡΠ·ΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅Ρ.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΡΡΡΠΏΠ»Π΅Π½ΠΈΡ Ρ Π±Ρ Ρ ΠΎΡΠ΅Π» Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ°ΠΌ JIT ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π²ΠΎΡΡ ΠΈΡΠΈΡΠ΅Π»Π΅Π½. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅Ρ Π½ΠΈΠΊΡ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ βΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅β (tracing), ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
- ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ (Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ JIT).
- ΠΡΠΎΠ²Π΅ΡΡΠΈ Π»Π΅Π³ΠΊΠΎΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°.
- ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΡΠ°Π½Π΅Π΅.
- Π‘ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄.
Π£Π·Π½Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΡΡΠΎΠΉ Π»Π΅Π³ΠΊΠΎΠ΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΈ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠΎΠ΄ΡΡΠΎΠΆΠΈΠΌ: ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ PyPy-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ RPython-Π²-Π‘ΠΈ (ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΡΡ ΡΠ΅Π»Π΅Π²ΡΡ ΠΏΠ»Π°Ρ-ΡΠΎΡΠΌΡ), ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° RPython ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠ°ΡΠΎΡ PyPΡ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΎΡΠ΅ΠΌΡ Π²ΡΠ΅ ΡΡΠΎ ΡΠ°ΠΊ Π²ΠΎΡΡ ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΠΎ? ΠΠΎΡΠ΅ΠΌΡ ΡΡΠΎΠΈΡ Π³Π½Π°ΡΡΡΡ Π·Π° ΡΡΠΎΠΉ Π±Π΅Π·ΡΠΌΠ½ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ? ΠΠΎ-ΠΌΠΎΠ΅ΠΌΡ, ΠΠ»Π΅ΠΊΡ ΠΠ΅ΠΉΠ½ΠΎΡ ΠΎΠ±ΡΡΡΠ½ΠΈΠ» ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ Π² ΡΠ²ΠΎΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅: β[ΠΠ° PyPy Π±ΡΠ΄ΡΡΠ΅Π΅] ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ [ΠΎΠ½] Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΡΡΡΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΠΈΡΠΎΠ½Π°β.
ΠΠΊΡΠ°ΡΡΠ΅:
- ΠΠ½ Π±ΡΡΡΡΡΠΉ β ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ JIT).
- ΠΠ½ Π³ΠΈΠ±ΠΊΠΈΠΉ β ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ JIT Π² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π±Π΅Π· ΠΎΡΠΎΠ±ΡΡ ΡΡΠΈΠ»ΠΈΠΉ.
- ΠΠ½ Π³ΠΈΠ±ΠΊΠΈΠΉ (ΠΎΠΏΡΡΡ) β ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Π² RPython, ΡΡΠΎ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΈ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ Π‘ΠΈ (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΏΡΠΎΡΠ°Π΅Ρ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΡΠΎ Π΄Π°ΠΆΠ΅ Π΅ΡΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ²).
ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Π΄ΡΡΠ³ΠΈΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ»ΡΡΠ°Π»ΠΈ
Python 3000 (Py3k): Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Python 3.0, ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ΅Π»ΠΈΠ· ΠΠΈΡΠΎΠ½Π° Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π² 2008. Π³ΠΎΠ΄Ρ. ΠΠΎΠΌΠ°Π½Π΄Π° Py3k ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°Π»Π°, ΡΡΠΎ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΏΡΡΡ Π»Π΅Ρ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΈΠΆΠΈΡΡΡΡ. Π Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠ°ΠΊ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ (Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π°Π΄ΡΠΌΠ°Π½Π½ΠΎΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅) ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π½Π° ΠΠΈΡΠΎΠ½Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Python 2.x, Π»ΡΠ΄ΠΈ Π²ΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ Π·Π°Π΄ΡΠΌΡΠ²Π°ΡΡΡΡ ΠΎ Py3k.
Cython: Π½Π°Π΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Python, Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π‘ΠΈ.
- ΠΠ°Π΄Π°ΡΠ°: ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π‘ΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° ΠΠΈΡΠΎΠ½Π΅.
- Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅, ΡΡΠΎ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π΄ΠΎΡΡΠΈΡΡ ΠΏΠΎΡ ΠΎΠΆΠ΅ΠΉ Π½Π° Π‘ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
- ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ PyPy, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅. Π ΡΠ»ΡΡΠ°Π΅ Ρ Cython Π²Ρ ΡΠΎΡΡΠΈΡΡΠ΅ΡΠ΅ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ Π² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΠ΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ. Π PyPy Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ°ΡΡΠΉ Π΄ΠΎΠ±ΡΡΠΉ Python, Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° Π»ΡΠ±ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
Numba: βΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ just-in-time ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡβ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ JIT Π² ΡΠ½Π°Π±ΠΆΠ΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡΠΌΠΈ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅. ΠΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π²Ρ Π΄Π°Π΅ΡΠ΅ Π΅ΠΌΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ, Π° ΠΎΠ½ ΡΡΠΊΠΎΡΡΠ΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΈ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. Numba ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° Anaconda Π½Π°Π±ΠΎΡΠ° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΠΌΠΈ.
IPython: ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ, ΡΡΠΎ ΠΌΡ ΠΎΠ±ΡΡΠ΄ΠΈΠ»ΠΈ. ΠΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΡΠ΅Π΄Π° Π΄Π»Ρ ΠΠΈΡΠΎΠ½Π°. ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½Π°Ρ, Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ GUI-ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ² ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅.
Psyco: ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΠΈΡΠΎΠ½Π°, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅ΡΠ²ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΠΈΡΠΎΠ½Π° Π² ΠΎΠ±Π»Π°ΡΡΠΈ JIT. ΠΠ°Π²Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ βΠ½Π΅ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΈ ΠΌΠ΅ΡΡΠ²ΡΠΉβ. ΠΠ»Π°Π²Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ Psyco ΠΡΠΌΠΈΠ½ Π ΠΈΠ³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ PyPy.
ΠΡΠΈΠ²ΡΠ·ΠΊΠΈ ΠΊ ΡΠ·ΡΠΊΠ°ΠΌ
- RubyPython: ΠΌΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ Ruby ΠΈ Python. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΊΠΎΠ΄ Π½Π° ΠΠΈΡΠΎΠ½Π΅ Π² ΠΊΠΎΠ΄ Π½Π° Ruby. ΠΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΠ΅, Π³Π΄Π΅ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΈ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΠΈΡΠΎΠ½, Π° RubyPython ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠΈ.
- PyObjc: ΡΠ·ΡΠΊΠΎΠ²ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Python ΠΈ Objective-C, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ ΠΌΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Objective-C (Π²ΠΊΠ»ΡΡΠ°Ρ Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ OS X) Π² ΠΊΠΎΠ΄Π΅ Π½Π° ΠΠΈΡΠΎΠ½Π΅, ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΠΈΡΠΎΠ½Π° Π² ΠΊΠΎΠ΄Π΅ Π½Π° Objective-C. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ CPython Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π‘ΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ Objective-C.
- PyQt: Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ PyObjc ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²ΡΠ·Π°ΡΡ ΠΠΈΡΠΎΠ½ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ OS X GUI, PyQt Π΄Π΅Π»Π°Π΅Ρ ΡΠΎ ΠΆΠ΅ Π΄Π»Ρ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Qt. ΠΡΠΎ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ SQL Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ
ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π½Π°ΡΠ΅Π»Π΅Π½Π½ΡΠΉ Π½Π° ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΡΠΎΡΡΠΎΡΡ ΠΠΈΡΠΎΠ½Π° Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ.
JavaScript ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ
- pyjs (Pyjamas): ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²Π΅Π± ΠΈ Π΄Π΅ΡΠΊΡΠΎΠΏΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΠΈΡΠΎΠ½Π΅. ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Python-Π²-JavaScript, Π½Π°Π±ΠΎΡ Π²ΠΈΠ΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
- Brython: Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Python, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ Π½Π° Javascript. ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Py3k Π² Π²Π΅Π±-Π±ΡΠ°ΡΠ·Π΅ΡΠ΅.
10 ΡΠ°Π³ΠΎΠ² ΠΊ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌΡ Python-ΠΏΡΠΎΠ΅ΠΊΡΡ / ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com / Π₯Π°Π±Ρ
ΠΠ°ΡΠ΅ΡΠΈΠ°Π», ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΠΌ, ΠΏΠΎΡΠ²ΡΡΡΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡΠ½Π°ΡΠ°ΡΡ Python-ΠΏΡΠΎΠ΅ΠΊΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°, Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΊΠΎΠ΄Π°. ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΡΠΎ Ρ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° ΡΠΆΠ΅ Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΡ Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Python, Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΠΎΠ½, Π² Ρ ΠΎΠ΄Π΅ ΡΡΠ΅Π½ΠΈΡ, Π±ΡΠ΄Π΅Ρ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Ρ Π²Π°Ρ Π½Π΅Ρ β Π·Π΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Python-ΠΏΠ°ΠΊΠ΅Ρ. ΠΡΠΈΠΌΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π·Π΄Π΅ΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡΡ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ macOS ΠΈ Python 3.7.
Π¨Π°Π³ 1. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Black
ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΎ ΡΡΠΈΠ»Π΅ ΠΊΠΎΠ΄Π°. Black β ΡΡΠΎ Python-ΠΏΠ°ΠΊΠ΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΏΡΠΈΠ²ΠΎΠ΄Ρ Π΅Π³ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π²ΠΈΠ΄ ΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΡ PEP 8. Black β ΡΡΠΎ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π½ΠΎ Ρ Π½Π΅Π³ΠΎ ΡΠΆΠ΅ Π½Π°Π±ΡΠ°Π»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π° Π·Π°Π³ΡΡΠ·ΠΎΠΊ. ΠΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΡΡΡΡΠΎ ΡΡΠ°Π»ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ Ρ ΠΎΡΠΎΡΠ΅Π³ΠΎ ΡΠΎΠ½Π° Π² Python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅. ΠΠΎΡ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Black.
Π―, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Atom, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» Π² Atom ΠΏΠ°ΠΊΠ΅Ρ Python-Black
. Π ΡΠΎΠΌ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π·Π΄Π΅ΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Atom Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΏΠΎΡΠ»Π΅ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π°.
ΠΠΎΠΊΠ° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ Black β Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ½Π°ΡΡΠΈΠΌ ΡΡΠΈΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Ρ , ΠΊΡΠΎ Π²ΠΌΠ΅ΡΡΠ΅ Ρ Π½Π°ΠΌΠΈ ΡΡΡΠ΄ΠΈΡΡΡ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ. Π ΠΈΡΠΎΠ³Π΅ Π²ΡΠ΅, ΠΊΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, Π° Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΈΡ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΡΡ.
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ black==18.9b0
Π² ΠΏΠ΅ΡΠ²ΡΡ Π½Π°ΡΠ΅Π΄ΡΡΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡΡ ΡΡΡΠΎΠΊΡ ΡΠ°ΠΉΠ»Π° requirements_dev.txt
ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ install -r requirements_dev.txt
.
Black, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° ΡΠ°Π²Π½ΠΎΠΉ 88 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°Ρ
ΠΏΠΎ ΡΡΠΈΠ»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ β Π² Sphinx, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ, ΡΠ°Π²Π½ΡΡ 79 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². Π Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΠΏΠ°ΠΊΠ΅ΡΠ° Black-Atom
ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΡΡ Π΄Π»ΠΈΠ½Ρ ΡΡΡΠΎΠΊΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠ±Π·Π°Π²Π΅Π»ΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ΄ΡΠΌΠ°Π΅ΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΊΠΎΡΠΈΡΡ ΠΈ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΠΊΠΎΠ΄Π° Π² PyPI.
Π¨Π°Π³ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° .pypirc
ΠΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠ±ΠΎΡΠΎΠΊ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² TestPyPI ΠΈ PyPI ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ twine, ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ Π΄Π»Ρ Π²Ρ ΠΎΠ΄Π° Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ Π²ΡΡΡΠ½ΡΡ. ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ Ρ twine β Π²Π·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π». Π‘Π΅ΠΉΡΠ°Ρ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡ.
Twine ΡΠΌΠ΅Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΉΠ»ΠΎΠΌ .pypirc
, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΡΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ, Π²ΡΠ³ΡΡΠΆΠ°Ρ Π΄Π°Π½Π½ΡΠ΅, Π±Π΅ΡΡΡ ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° URL, Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ.
ΠΡΠ°ΠΊ, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π² Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ ΡΠ°ΠΉΠ» .pypirc
:
touch ~/.pypirc
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΠΊΡΡ:
[distutils]
index-servers =
Β Β Β pypi
Β Β Β testpypi
[testpypi]
repository: https://test.pypi.org/legacy
username = your_username
password = your_pypitest_password
[pypi]
username = your_username
password = your_pypi_password
ΠΠΎΠ½ΡΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠ΄Π° Π½Π°Π΄ΠΎ Π²ΠΏΠΈΡΠ°ΡΡ Π²Π°ΡΠΈ ΡΠ΅Π°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΡΠ°ΠΉΠ» Π±ΡΠ» Π±Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ½ Π² Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π° Π½Π΅ Π² ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ Π·Π°ΡΠΈΡΠΈΡΡ ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ:
chmod 600 ~/.pypirc
Π’Π΅ΠΏΠ΅ΡΡ Π²Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π² TestPyPI ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ:
twine upload -r testpypi dist/*
Π ΠΎΠ±ΡΡΠ½ΡΠΉ PyPI ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ°ΠΊ:
twine upload dist/*
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ±Π·Π°Π²Π΅Π΄ΡΡΠ΅ΡΡ ΡΠ°ΠΉΠ»ΠΎΠΌ
.pypirc
, Π²Π°ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΏΡΠΈΠ΄ΡΡΡΡ Π²ΡΡΡΠ½ΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ.Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Π½Π°ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ.
Π¨Π°Π³ 3. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° pytest
Pytest β ΡΡΠΎ ΡΠ°ΠΌΠ°Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π°Ρ, Π»ΡΠ³ΠΊΠ°Ρ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° Python. Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅ΡΡΡ. ΠΠΎΡ, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ pytest, Ρ ΠΎΡΠΎΡΠ΅Π΅ Π²Π²ΠΎΠ΄Π½ΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ.
ΠΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ pytest Π² ΡΠ°ΠΉΠ» requirements_dev.txt
:
pytest==4.3.0
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠ°:
pip install requirements_dev.txt
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ pytest ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ:
pip install -e .
ΠΡΠ»ΠΈ Π²Ρ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°Π»ΠΈ ΡΠ²ΠΎΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠΎ Π²Π°ΠΌ, Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ², ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΡΠ½ΠΎΠ²Π° Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ±Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
pip
.Π¨Π°Π³ 4. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ²
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ°ΠΏΠΊΡ
test
Π² ΠΊΠΎΡΠ½Π΅Π²ΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ Π² Π½Π΅Ρ ΡΠ°ΠΉΠ» test_your_package_name.py
. ΠΠΎΠΉ ΡΠ°ΠΉΠ» Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ test_notebookc.py
. ΠΡΠ»ΠΈ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ test_
, pytest ΠΌΠΎΠΆΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΡΠ°ΠΉΠ».Π ΡΠ°ΠΉΠ» test_notebookc.py
Ρ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΎΠ³ΠΎ, ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π»ΠΈ ΠΈΠΌΡ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ. ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅ ΡΡΠΎΡ ΠΊΠΎΠ΄ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² Π½ΡΠΌ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π±Ρ Π²Π°ΡΠΈΠΌ, ΠΎΠΏΠΈΡΠΈΡΠ΅ Π² Π½ΡΠΌ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΡΡ.
"""Tests for `notebookc` package."""
import pytest
from notebookc import notebookc
def test_convert(capsys):
Β Β Β """Correct my_name argument prints"""
Β Β Β notebookc.convert("Jill")
Β Β Β captured = capsys.readouterr()
Β Β Β assert "Jall" in captured.out
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΡΡΠ΄Π° Π½Π°Ρ ΠΌΠΎΠ΄ΡΠ»Ρ. ΠΠΎΡΠΎΠΌ ΡΠΎΠ·Π΄Π°ΡΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΡΠΎΠΈΡΡΡ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ test_my_function_name
. ΠΡΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΈΠΌ Π»ΡΠ΄ΡΠΌ, ΡΠΈΡΠ°ΡΡΠΈΠΌ ΠΊΠΎΠ΄ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π±ΡΡΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΡΠ°Ρ
. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠΊΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½ΠΈΠΆΠ΅.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ (convert
), ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Ρ Π΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈΠΌΡ Jill
. ΠΠ°Π»Π΅Π΅ β Π·Π°Ρ
Π²Π°ΡΡΠ²Π°Π΅ΠΌ ΡΠΎ, ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ. Π’ΡΡ ΡΡΠΎΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΏΡΠΎΡΡΠ°. ΠΠ½Π° Π±Π΅ΡΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ my_name
ΠΈ Π΄Π΅Π»Π°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
print(f"Iβll convert a notebook for you some day, {my_name}.")
Pytest ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π»ΠΈ
Jall
Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ. Π’Π°ΠΌ ΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π±ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ Jill
. ΠΠΎΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ pytest, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠ΅ΡΠ΅Ρ
Π²Π°ΡΠ΅ Π²ΡΠ²ΠΎΠ΄Π°.ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π²Π²Π΅Π΄Ρ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ pytest
. ΠΡΠΎΡ ΡΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎ. Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
Π²ΡΠ²Π΅Π΄Π΅Π½Ρ ΠΊΡΠ°ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ.
Π Ρ ΠΎΠ΄Π΅ ΡΠ΅ΡΡΠ° Π²ΡΡΠ²Π»Π΅Π½Π° ΠΎΡΠΈΠ±ΠΊΠ°
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΡΡΡ, ΠΎΠΏΠΈΡΡΠ²Π°Ρ ΠΈΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ, Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ , ΠΎΠ½ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π»ΠΈΡΡ Π±Ρ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ. ΠΠ΅ ΡΡΠΎΠΈΡ ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ΄Π°ΡΡ Π»ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠΎ, Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ΅Π³ΠΎ ΠΈΡ ΠΏΠΈΡΡΡ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΅ΡΡ Π΄Π°Π» ΡΠ±ΠΎΠΉ β ΠΏΠΎΠΌΠ΅Π½ΡΠ΅ΠΌ Π² ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΈ Jall
Π½Π° Jill
ΠΈ ΡΠ½ΠΎΠ²Π° Π·Π°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈΡΡΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π£ΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΡ Ρ ΠΎΡΠΎΡΠΎ. Π’Π΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΊΡΠΎ-ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΡΠΎΠΊΡ, ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΏΠ°Π΄ΡΡ Π² ΡΠΎΡ ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠΌΠΈ Π΅ΠΉ Π΄Π°Π½Π½ΡΠΌΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅, ΡΠΈΠΏ ΠΊΠΎΡΠΎΡΡΡ
ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠ³ΠΎ, ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ TypeError
. ΠΠΎΡ Ρ
ΠΎΡΠΎΡΠΈΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΠΌ ΠΈ ΠΏΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Python.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΡΠΎΠ·Π΄Π°Π²Π°Π»ΠΈ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅ΡΡ, ΠΌΡ ΠΏΠΈΡΠ°Π»ΠΈ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΡΡΠ°. ΠΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ (Test-Driven Development, TDD). TDD β ΡΡΠΎ Π΄ΠΎΠΊΠ°Π·Π°Π²ΡΠΈΠΉ ΡΠ²ΠΎΡ ΡΠ΅Π½Π½ΠΎΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠΌΠΎΠ³Π°ΡΡΠΈΠΉ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ, ΡΠ΅ΠΌ Π² Π½ΡΠΌ Π±ΡΠ»ΠΎ Π±Ρ Π±Π΅Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ TDD. ΠΠΎΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΏΠΎ TDD.
Π’Π΅ΠΏΠ΅ΡΡ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠ΅ΡΡ, ΠΏΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ convert()
Π½Π° ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π² Π½Π΅Ρ ΡΠ΅Π³ΠΎ-ΡΠΎ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π³ΠΎΡΡ ΠΎΡ ΡΡΡΠΎΠΊΠΈ, ΠΎΠ½Π° Π²ΡΠ΄Π°Π²Π°Π»Π° Π±Ρ ΠΎΡΠΈΠ±ΠΊΡ, ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΏΠΈΡΠΊΠΈ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΡΡΡΡ Π² ΡΡΡΠΎΠΊΠΈ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ» ΡΠ΅ΡΡΡ β ΠΌΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ.
Π¨Π°Π³ 5. Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ Travis CI ΠΈ Π΅Π³ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°
Travis CI β ΡΡΠΎ Β«ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²ΠΈΡ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡΒ». ΠΠ³ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΊΡΠΏΠΈΠ»Π° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Idera. Π‘ΡΡΠ΅ΡΡΠ²ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ, Π½ΠΎ Travis CI β ΡΡΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ, Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ Π΄Π»Ρ ΠΎΠΏΠ΅Π½ΡΠΎΡΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Ρ ΠΎΡΠΎΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠΌ.
Travis CI ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² Π²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΡΡ ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ. ΠΠ΄Π΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ Travis CI, Π° Π·Π΄Π΅ΡΡ β ΠΎ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ.
CΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΡΡΡΠ½ΡΡ Π·Π°ΠΏΠΈΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ https://travis-ci.org/. ΠΠ°Π»Π΅Π΅, ΡΡΠ»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ ΡΡΡΠ»ΠΊΠ΅ Review and add your authorized organizations
Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠΈΠ»Ρ. ΠΠ°ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ°Ρ Π²Π²Π΅ΡΡΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ GitHub. Π©ΡΠ»ΠΊΠ½ΠΈΡΠ΅ ΠΏΠΎ Grant
Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Organization access
.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Travis CI
ΠΠ½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΠ»ΠΎΡΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π°ΠΊΠΊΠ°ΡΠ½Ρ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π² ΡΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π±Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ notebooktoall
ΠΈ ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ notebookc
. ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Travis CI Π·Π°ΡΠ°Π±ΠΎΡΠ°Π»Π° Π±Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΠΎ-ΡΠΎ ΠΎΠΊΠΎΠ»ΠΎ ΠΌΠΈΠ½ΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π²ΡΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΌ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠΈΡΡΠ½ΠΊΠ΅.
ΠΠΊΡΠΈΠ²Π°ΡΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΡΠ»ΠΊΠ½ΡΡΡ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Settings
. Π’ΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈ Travis Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ±ΠΎΡΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈΠ»ΠΈ Π²Π΅ΡΠΎΠΊ.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π‘Π΅ΠΉΡΠ°Ρ ΠΏΡΠΈΡΠ»ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, Π½Π°Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ, ΡΡΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Travis Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ±ΠΎΡΠΊΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΠ°.
Π¨Π°Π³ 6. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° .travis.yml
Π ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ»
.travis.yml
ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ:dist: xenial
language: python
python: 3.7.2
install:
Β - pip install -r requirements_dev.txt
Β - pip install -e .
script:
Β - pytest
Π‘ΡΡΠΎΠΊΠ°
dist: xenial
Π½ΡΠΆΠ½Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ Travis Π½Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ Ubuntu Xenial 16.04. ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Python 3.7 Π½ΡΠΆΠ½Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Ubuntu Xenial, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎΠ± ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π·Π΄Π΅ΡΡ.Π Π°Π·Π΄Π΅Π» install
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠΌΠ°Π½Π΄Π° pip install -e .
Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Travis. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Travis, Π·Π°ΠΏΡΡΠΊΠ°Ρ pytest, ΡΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π½Π°Ρ ΠΏΠ°ΠΊΠ΅Ρ.
Π¨Π°Π³ 7. Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Travis CI
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΈΡ Π½Π° GitHub, Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ PR. Travis Π΄ΠΎΠ»ΠΆΠ΅Π½, Π² ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΠ΅ΠΊΡΠ½Π΄, Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ.
Travis Π·Π° ΡΠ°Π±ΠΎΡΠΎΠΉ
ΠΠΎΡ ΡΠ΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ Travis, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ.
ΠΠ΅ΠΉΡΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Travis ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΡΠ»ΠΈ PR ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ β Travis ΠΎΠ± ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠΈΡ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ Π΅ΡΠ»ΠΈ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡ ΠΎΠΊΠ°Π·Π°Π»ΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΠΌ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΡΡ ΠΆΠ΅ Π²Π΅ΡΠΊΡ ΠΈ Travis Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡΡ Π·Π° ΡΠ°Π±ΠΎΡΡ.
ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΊ ΡΡΡΠ°Π½ΠΈΡΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π½Π° ΡΠ°ΠΉΡΠ΅ Travis ΠΈ ΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ΡΡ ΡΠ°ΠΌ. Π’ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎ ΡΠ±ΠΎΡΠΊΠ°Ρ . ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ Π²Ρ ΡΡΠ°Π½Π΅ΡΠ΅ ΡΠ°ΡΡΡΠΌ Π³ΠΎΡΡΠ΅ΠΌ ΡΡΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ, ΠΊΠΎΠ³Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΡΡΠ°Π»ΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ Π½Π΅ΡΠ΄Π°Π²ΡΠ΅ΠΉΡΡ ΡΠ±ΠΎΡΠΊΠΈ.
ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π²ΡΡ ΠΏΡΠΎΡΠ»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, Π΅ΡΠ»ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π°Π΄ΠΏΠΈΡΠΈ Π·Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°, Π·Π½Π°ΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ.
Π‘Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ
ΠΡΠ»ΠΈ ΠΆΠ΅ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π΅Ρ Π½ΠΈ Π·Π΅Π»ΡΠ½ΡΡ
, Π½ΠΈ ΠΊΡΠ°ΡΠ½ΡΡ
Π½Π°Π΄ΠΏΠΈΡΠ΅ΠΉ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΌΠ΅Π½Ρ More options
ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ Requests
. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ
, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΡΠ°ΡΠ½ΡΠΌ ΡΠ²Π΅ΡΠΎΠΌ β ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠΉΡΠ΅ ΠΈΡ
. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ Build config file is required
, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Travis Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π²Π°Ρ ΡΠ°ΠΉΠ» .travis.yml
. ΠΡΠΏΡΠ°Π²ΡΡΠ΅ ΡΡΠΎ ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΡΡΠ΅Π·Π½Π΅Ρ.
Travis ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΠΏΠΈΡΡΠΌΠ° Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΠ±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ, ΠΈ Π² ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΡΠ΄Π°ΡΡΡΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ.
ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΎΡΠΊΡΡΡΡΠΉ PR ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΠΈ Travis Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ.
Π¨Π°Π³ 8. ΠΡΠ΅Π½ΠΊΠ° ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ
ΠΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠ°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΏΡΡΡΡ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ, ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Π°. ΠΠ»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΎΡΡΡΡΠΎΠ² ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ pytest-cov.
Π ΡΠ°ΠΉΠ» requirements_dev.txt
Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΡΠΎΠΊΡ:
pytest-cov==2.6.1
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ°ΠΊΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
pytest --cov=my_project_name
Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
pytest --cov=notebookc
Π±ΡΠ» Π²ΡΠ²Π΅Π΄Π΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΡΡΡΡ.ΠΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ
ΠΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π²Π΅ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ ΡΠ΅ΡΡΠ°ΠΌΠΈ. Π’Π°ΠΊΠΈΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΡΠ΅Π½Ρ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΡΡΠΈΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²Π΅ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊ ΠΊΠΎΠ΄Π°.
Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΡΠ΅Π΄ΡΡΠ²Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π΅ΡΡΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΡΡΠΎΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² ΠΏΠ»Π°Π½Π΅ ΠΏΠΎΠΊΡΡΡΠΈΡ Π΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ.
Π¨Π°Π³ 9. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Coveralls
ΠΡΠΎΠ΅ΠΊΡ Coveralls ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ.
Coveralls
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ Π½Π° ΡΠ°ΠΉΡΠ΅ https://coveralls.io/, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ GitHub. ΠΠΎΡΠΎΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ.
Π ΡΠ°ΠΉΠ» requirements_dev.txt
Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΡΡΠΎΠΊΡ coveralls==1.6.0
. ΠΡΠΎΡ ΡΠ°ΠΉΠ», ΠΊΡΡΠ°ΡΠΈ, Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
pip==19.0.3
wheel==0.33.0
twine==1.13.0
pytest==4.3.0
pytest-cov==2.6.1
coveralls==1.6.0
ΠΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»
.travis.yml
, ΠΏΡΠΈΠ²Π΅Π΄Ρ Π΅Π³ΠΎ ΠΊ ΡΠ°ΠΊΠΎΠΌΡ Π²ΠΈΠ΄Ρ (Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π΄Π΅ΡΡ Π±ΡΠ΄Π΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°):dist: xenial
language: python
python: 3.7.2
install:
Β β pip install -r requirements_dev.txt
Β β pip install -e .
script:
Β β pytest --cov=my_package_name
after_success:
Β β coveralls
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° Travis Π±ΡΠ΄Π΅Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ, ΠΎΠ½ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, Π·Π°ΠΏΡΡΡΠΈΡ ΡΠ΅ΡΡΡ ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΎΡΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° ΡΠ΅ΡΠ²ΠΈΡ Coveralls.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ, ΠΎΡΠΏΡΠ°Π²ΡΡΠ΅ ΠΊΠΎΠ΄ Π² GitHub ΠΈ ΠΏΠΎΠ½Π°Π±Π»ΡΠ΄Π°ΠΉΡΠ΅ Π·Π° ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ. ΠΠ° ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΎΠΏΠ°Π» Π±Ρ Π² Coveralls, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΡΡ.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΠΎΡΡΡΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ
Π’Π΅ΠΏΠ΅ΡΡ ΡΡΠ΅Π΄ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ PR ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠ°Ρ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ Coveralls.
ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ Coveralls ΠΌΠΎΠΆΠ½ΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠΊΡΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ Π½Π° 100%.
Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠΎΠΊΡΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΡΠ½Π°ΡΡΠΈΠΌ Π½Π°Ρ ΠΏΡΠΎΠ΅ΠΊΡ Π΅ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ.
Π¨Π°Π³ 10. Π Π°Π±ΠΎΡΠ° Ρ PyUp
Π‘Π΅ΡΠ²ΠΈΡ PyUp.io ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠ·Π½Π°Π²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΡΠ°ΡΠ΅Π»ΠΈ Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΈΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΡΠΎΠΌ, ΠΈΠΌΠ΅ΡΡ Π»ΠΈ ΠΎΠ½ΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΡ, Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° GitHub. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π½ΡΠΆΠ½ΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡΡΡ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΡΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ GitHub, Π½Π° Π΅Π³ΠΎ ΡΠ°ΠΉΡΠ΅ β https://pyup.io/. ΠΡΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ (
Update Schedules
) Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ every week
. ΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ, Π²Ρ Π½Π΅ ΡΡΠΎΠ»ΠΊΠ½ΡΡΠ΅ΡΡ ΡΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΠΎΠ².ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ
ΠΠΎΡ ΠΊΠ°ΠΊ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ , Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΡΡΠ°ΡΠ΅Π»ΠΈ, Π½Π° ΡΠ°ΠΉΡΠ΅ PyUp.io.
Π‘Π²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°Ρ
ΠΠΎΠ»ΡΠ·ΡΡΡΡ ΡΡΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡΠΎΠΌ, Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅ΡΠ΅ Π·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Π²ΡΡ ΠΎΠ΄ΡΡ ΡΠ²Π΅ΠΆΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π²Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ½Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ, Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΏΠΎΠ±Π΅Π΄Ρ. Π Π²ΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° β ΡΡΠΎ, ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠ»Π»-Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΡΠΎΠ³ΠΈ
ΠΠ· ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»Π° Π²Ρ ΡΠ·Π½Π°Π»ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Python-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² ΡΠ°ΠΊΠΈΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ, ΠΊΠ°ΠΊ Black, pytest, Travis CI, Coveralls ΠΈ PyUp. ΠΠ½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄, ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡΡ. ΠΠ°Π΄Π΅Π΅ΠΌΡΡ, Π²Π°ΠΌ ΡΡΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΈΠ³ΠΎΠ΄ΡΡΡΡ.
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ! ΠΠ°ΠΊΠΈΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ΡΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Python-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ²?
Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ 30-ΠΊΡΠ°ΡΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Python-ΠΊΠΎΠ΄Π° / ΠΠ»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com / Π₯Π°Π±Ρ
Python β ΡΡΠΎ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π»ΡΠ±ΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ. ΠΡΠΈΠΌ ΡΠ·ΡΠΊΠΎΠΌ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΡΡ Π΄Π΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Python, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ½ΡΡΠΈΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠΎΠ½ΡΡΠ½ΠΎΡΡΡΡ ΠΈ Ρ ΠΎΡΠΎΡΠ΅ΠΉ ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΠΎΡΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ°Π·Π³ΠΎΠ²ΠΎΡΠ°Ρ ΠΎ Python ΡΠ°ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ ΠΆΠ°Π»ΠΎΠ±Ρ Π½Π° ΡΡΠΎΡ ΡΠ·ΡΠΊ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎ Python Π³ΠΎΠ²ΠΎΡΡΡ Π·Π½Π°ΡΠΎΠΊΠΈ ΡΠ·ΡΠΊΠ° C. ΠΠΎΡ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π·Π²ΡΡΠΈΡ: Β«Python β ΡΡΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΒ». Π ΡΠ΅, ΠΊΡΠΎ ΡΠ°ΠΊ Π³ΠΎΠ²ΠΎΡΡΡ, Π½Π΅ Π³ΡΠ΅ΡΠ°Ρ ΠΏΡΠΎΡΠΈΠ² ΠΈΡΡΠΈΠ½Ρ.Π ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python β ΡΡΠΎ, ΠΈ ΠΏΡΠ°Π²Π΄Π°, ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ, Π² Ρ ΠΎΠ΄Π΅ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π·Π½ΡΡ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π·Π°Π΄Π°Ρ.
ΠΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΡΠ΄Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. Π’Π΅ΠΌ, ΠΊΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Numpy, Pandas ΠΈΠ»ΠΈ Scikit-Learn, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅ΡΠΎΠ²Π°ΡΡ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ Rapids, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ GPU ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Π½Π°ΡΡΠ½ΡΡ
ΡΠ°ΡΡΡΡΠΎΠ².
ΠΡΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ Ρ
ΠΎΡΠΎΡΠΈ Π² ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΡ
, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ°Π΅ΠΌΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ β ΡΡΠΎ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ°ΡΡΠΈΡΠ°ΠΌΠΈ.
ΠΠΎ ΠΊΠ°ΠΊ Π±ΡΡΡ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π²Π°Ρ ΠΊΠΎΠ΄ β ΡΡΠΎ ΡΠΈΡΡΡΠΉ Python? Π§ΡΠΎ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΠΊΠ» for
, ΠΊΠΎΡΠΎΡΡΠΉ Π²Π°ΠΌ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΠ΅ Π² Π½ΡΠΌ Π΄Π°Π½Π½ΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ? ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΊΠ°ΠΊ-ΡΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΡΠ°ΠΌ Python?
ΠΡΠ²Π΅Ρ Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π΄Π°ΡΡ Cython β ΠΏΡΠΎΠ΅ΠΊΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Python.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Cython?
Cython, ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ, ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ ΡΠ»ΠΎΠΉ ΠΌΠ΅ΠΆΠ΄Ρ Python ΠΈ C/C++. Cython ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΈΡΠ°ΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ Python-ΠΊΠΎΠ΄ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΠ΅ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅ΡΡΡ Π² C-ΠΊΠΎΠ΄.
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Python-ΠΊΠΎΠ΄Π° ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΠ± Π΅Ρ ΡΠΈΠΏΠ΅. ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π° Python ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠ°ΠΊ:
x = 0.5
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Cython ΠΏΡΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π΅Ρ ΡΠΈΠΏ:
cdef float x = 0.5
ΠΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ Cython ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠΈΡΠ»ΠΎ Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ ΡΠΎΡΠΊΠΎΠΉ. ΠΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π² C. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Python ΡΠΈΠΏΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ. Π―Π²Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ΅ Π² Cython β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Python-ΠΊΠΎΠ΄Π° Π² C-ΠΊΠΎΠ΄. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² C Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ²Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠΎΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Cython ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°:
pip install cython
Π’ΠΈΠΏΡ Π² Cython
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Cython ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΡΠΈΠΏΠΎΠ². ΠΠ΄ΠΈΠ½ β Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π²ΡΠΎΡΠΎΠΉ β Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΡΠΎ ΡΡΡ Π½Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ:
cdef int a, b, c
cdef char *s
cdef float x = 0.5
(ΡΠΈΡΠ»ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ)cdef double x = 63.4
(ΡΠΈΡΠ»ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ)cdef list names
cdef dict goals_for_each_play
cdef object card_deck
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΡΡ, ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΡΠΈΠΏΡ C/C++!
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π½Π°ΠΌ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΏΡ:
def
β ΠΎΠ±ΡΡΠ½Π°Ρ Python-ΡΡΠ½ΠΊΡΠΈΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Python.cdef
β Cython-ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π»ΡΠ·Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΈΠ· ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Python-ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ Cython-ΠΊΠΎΠ΄Π°.cpdef
β Π€ΡΠ½ΠΊΡΠΈΡ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ ΠΈΠ· C, ΠΈ ΠΈΠ· Python.
Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΡΠ°Π·ΠΎΠ±ΡΠ°Π»ΠΈΡΡ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Python, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΡΡΡΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ Python-ΠΊΠΎΠ΄Π°.
Π£ΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Cython
ΠΠ°ΡΠ½ΡΠΌ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Python-Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠ°. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΈΠΊΠ»
for
, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π° ΡΠΈΡΠ»Π°. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½Π° ΡΠΈΡΡΠΎΠΌ Python Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:def test(x):
Β Β Β Β y = 1
Β Β Β Β for i in range(1, x+1):
Β Β Β Β Β Β Β Β y *= i
Β Β Β Β return y
Cython-ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π° Π΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π² ΡΠ°ΠΉΠ» Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ
.pyx
. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π²Π½Π΅ΡΡΠΈ Π² ΠΊΠΎΠ΄, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ Π² Π½Π΅Π³ΠΎ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΈΠΏΠ°Ρ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ:cpdef int test(int x):
Β Β Β Β cdef int y = 1
Β Β Β Β cdef int i
Β Β Β Β for i in range(1, x+1):
Β Β Β Β Β Β Β Β y *= i
Β Β Β Β return y
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ ΡΡΠΎΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
cpdef
. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠ· Python. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠΈΠΏ Π½Π°Π·Π½Π°ΡΠ΅Π½ ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ i
, ΠΈΠ³ΡΠ°ΡΡΠ΅ΠΉ ΡΠΎΠ»Ρ ΡΡΡΡΡΠΈΠΊΠ° ΡΠΈΠΊΠ»Π°. ΠΠ΅ Π±ΡΠ΄Π΅ΠΌ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΠ±ΡΡΠ²Π»Π΅Π½Π½ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ C ΡΠ·Π½Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΈΠΏΡ Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°ΠΉΠ» setup.py
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΡ Cython-ΠΊΠΎΠ΄ Π² C-ΠΊΠΎΠ΄:
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize('run_cython.pyx'))
ΠΡΠΏΠΎΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ:
python setup.py build_ext --inplace
Π’Π΅ΠΏΠ΅ΡΡ Π‘-ΠΊΠΎΠ΄ Π³ΠΎΡΠΎΠ² ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π²Π·Π³Π»ΡΠ½ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Cython-ΠΊΠΎΠ΄, ΡΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° C-ΠΊΠΎΠ΄Π°, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΠ°ΠΉΠ» run_cython.c
. ΠΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ β ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΡΠΎΡ ΡΠ°ΠΉΠ» ΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊΠΎΠΉ Π‘-ΠΊΠΎΠ΄ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π» Cython.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΡ Π³ΠΎΡΠΎΠ²ΠΎ ΠΊ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ²Π΅ΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ C-ΠΊΠΎΠ΄Π°. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½ ΠΊΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
import run_python
import run_cython
import time
number = 10
start = time.time()
run_python.test(number)
end =Β time.time()
py_time = end - start
print("Python time = {}".format(py_time))
start = time.time()
run_cython.test(number)
end =Β time.time()
cy_time = end - start
print("Cython time = {}".format(cy_time))
print("Speedup = {}".format(py_time / cy_time))
ΠΠΎΠ΄ ΡΡΠΎΡ ΡΡΡΡΠΎΠ΅Π½ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ. ΠΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ β ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ Python-ΡΠ°ΠΉΠ»Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π΅Π»Π°Ρ ΡΡΠΎ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ Π²ΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π±Ρ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ Python-ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ.
ΠΠ·Π³Π»ΡΠ½ΠΈΡΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Cython-Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π±ΡΡΡΡΠ΅ΠΉ Π΅Ρ Python-Π²Π΅ΡΡΠΈΠΈ Π²ΠΎ Π²ΡΠ΅Ρ
ΡΠ»ΡΡΠ°ΡΡ
. Π§Π΅ΠΌ ΠΌΠ°ΡΡΡΠ°Π±Π½Π΅Π΅ Π·Π°Π΄Π°ΡΠ° β ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Cython.
ΠΡΠΎΠ³ΠΈ
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Cython ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π½Π° Python, Π½Π΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊ ΡΡΠΎΠΌΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΡ ΡΡΠΈΠ»ΠΈΠΉ. Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π°Π½Π½ΡΡ ΠΎΠ½Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ β ΡΠ΅ΠΌ Π»ΡΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΆΠ΄Π°ΡΡ ΠΎΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Cython.
Π£Π²Π°ΠΆΠ°Π΅ΠΌΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ! ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Cython Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ?
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° Python | Python 3 Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ ΠΈ ΡΠ°ΠΉΠ½ΠΈΠΊΠΎΠ²
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠ·ΡΠΊΠ° Python, ΠΊΠ°ΠΊ ΠΈ ΡΠ°ΠΌ ΡΠ·ΡΠΊ, ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡ.
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
ΠΠΎΠ½Π΅Ρ ΡΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ (ΡΠΎΡΠΊΠ° Ρ Π·Π°ΠΏΡΡΠΎΠΉ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ).
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΡΡΡΡ Π² Π±Π»ΠΎΠΊΠΈ ΠΏΠΎ Π²Π΅Π»ΠΈΡΠΈΠ½Π΅ ΠΎΡΡΡΡΠΏΠΎΠ². ΠΡΡΡΡΠΏ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΡΠΌ, Π³Π»Π°Π²Π½ΠΎΠ΅, ΡΡΠΎΠ±Ρ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° ΠΎΡΡΡΡΠΏ Π±ΡΠ» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ². Π ΠΏΡΠΎ ΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΡ ΠΊΠΎΠ΄Π° Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅. ΠΡΡΡΡΠΏ Π² 1 ΠΏΡΠΎΠ±Π΅Π», ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, Π½Π΅ Π»ΡΡΡΠ΅Π΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ 4 ΠΏΡΠΎΠ±Π΅Π»Π° (ΠΈΠ»ΠΈ Π·Π½Π°ΠΊ ΡΠ°Π±ΡΠ»ΡΡΠΈΠΈ, Π½Π° Ρ ΡΠ΄ΠΎΠΉ ΠΊΠΎΠ½Π΅Ρ).
ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² Python Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ΠΌ, Π²ΡΠ»Π΅Π΄ Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΎΠ±ΡΡΠ½ΠΎ Ρ ΠΎΡΡΡΡΠΏΠΎΠΌ ΠΏΠΎΠ΄ ΡΡΡΠΎΠΊΠΎΠΉ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
ΠΡΠ½ΠΎΠ²Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ: ΠΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ Π±Π»ΠΎΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ
ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π²
ΠΠ½ΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΡ ΡΠΎΡΠΊΠΎΠΉ Ρ Π·Π°ΠΏΡΡΠΎΠΉ:
a = 1; b = 2; print(a, b)
ΠΠΎ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ! ΠΠΎΠΌΠ½ΠΈΡΠ΅ ΠΎΠ± ΡΠ΄ΠΎΠ±ΠΎΡΠΈΡΠ°Π΅ΠΌΠΎΡΡΠΈ. Π Π»ΡΡΡΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ°ΠΊ Π½Π΅ Π΄Π΅Π»Π°ΠΉΡΠ΅.
ΠΠΎΠΏΡΡΡΠΈΠΌΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΡΡΡΠΎΠΊΠ°Ρ . ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΅Π΅ Π·Π°ΠΊΠ»ΡΡΠΈΡΡ Π² ΠΏΠ°ΡΡ ΠΊΡΡΠ³Π»ΡΡ , ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠΈΠ³ΡΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ:
if (a == 1 and b == 2 and c == 3 and d == 4): # ΠΠ΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΠΏΡΠΎ Π΄Π²ΠΎΠ΅ΡΠΎΡΠΈΠ΅ print('spam' * 3)
Π’Π΅Π»ΠΎ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠΎΠΊΠ΅, ΡΡΠΎ ΠΈ ΡΠ΅Π»ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ, Π΅ΡΠ»ΠΈ ΡΠ΅Π»ΠΎ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π½Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΠΎΡΡΠ°Π²Π½ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΡ Ρ Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΏΠΎΠ½ΡΠ»ΠΈ :). ΠΠ°Π²Π°ΠΉΡΠ΅ Π»ΡΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Ρ:
if x > y: print(x)
ΠΠΎΠ»Π½ΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Ρ ΠΎΠΏΡΡΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ ΡΠΎΠ²Π΅ΡΡΡ Π²Π°ΠΌ Π·Π°Π³Π»ΡΠ½ΡΡΡ Π² ΡΡΠ±ΡΠΈΠΊΡ «ΠΡΠΈΠΌΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ».
Π’Π°ΠΊΠΆΠ΅ ΡΠΎΠ²Π΅ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ PEP 8 β ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Python ΠΈ ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π² Python. PEP 257.
ΠΠ»Ρ Π²ΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ΄Π° Π½Π° Python Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π·Π°ΠΊΠ»ΡΡΠ°ΠΉΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅Π³ΠΈ <pre><code>ΠΠ°Ρ ΠΊΠΎΠ΄</code></pre>
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° Python?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°- ΠΠΊΠΎΠ»ΠΎ
- Π’ΠΎΠ²Π°ΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
- ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡ
- ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈ
- ΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°
- Π’Π°Π»Π°Π½Ρ ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»Ρ
- Π Π΅ΠΊΠ»Π°ΠΌΠ° ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°
- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
— Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Python 3.8.5
- ΠΠ²ΡΠΎΡ
Π Π°ΠΉΠΌΠΎΠ½Π΄ Π₯Π΅ΡΡΠΈΠ½Π³Π΅Ρ
- ΠΠΎΠ½ΡΠ°ΠΊΡ
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΡΠ΅Π·ΡΠΌΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ. ΠΡΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Python Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΠΊΠ°ΠΆΠΈ ΠΏΠΎΠΊΠ°ΠΆΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡ ΡΠΈΡΡΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Python ΠΈ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΎΠ»ΡΡΠ΅ΠΌΡ Π½Π°Π±ΠΎΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π½ΠΎ ΠΈ Π΄Π°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Python, ΠΈ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π·Π° ΡΠ»Π΅Π³Π°Π½ΡΠ½ΠΎΡΡΡ Π΅Π³ΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½Π°.
Π ΠΎΠ±ΡΠ΅ΠΌ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ — ΡΡΠΎ Π°ΡΡΠΈΠ±ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ Β«ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈΒ», ΠΎΠ΄ΠΈΠ½
Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ» ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ΅
ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ: __get __ ()
, __set __ ()
ΠΈ __ ΡΠ΄Π°Π»ΠΈΡΡ __ ()
. ΠΡΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· ΡΡΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΎΠ½
Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ.
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ — ΠΏΠΎΠ»ΡΡΠΈΡΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΠ»ΠΈ ΡΠ΄Π°Π»ΠΈΡΡ
Π°ΡΡΠΈΠ±ΡΡ ΠΈΠ· ΡΠ»ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, a.x
ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ
Π½Π°ΡΠΈΠ½Π°Ρ Ρ a .__ dict __ ['x']
, Π·Π°ΡΠ΅ΠΌ type (a) .__ dict __ ['x']
ΠΈ
ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ΅ΡΠ΅Π· Π±Π°Π·ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΡΠΈΠΏΠ° (a)
, ΠΈΡΠΊΠ»ΡΡΠ°Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ. ΠΡΠ»ΠΈ
ΠΈΡΠΊΠΎΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ — ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, Π·Π°ΡΠ΅ΠΌ Python
ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°.Π’ΠΎ, Π³Π΄Π΅ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°
Π±ΡΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ — ΡΡΠΎ ΠΌΠΎΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΡΠ΅Π³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ½ΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ
Π·Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ, ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡΠ° ΠΈ super ()
.
ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Python Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½ΠΎΠ²ΡΡ
ΠΊΠ»Π°ΡΡΠΎΠ² ΡΡΠΈΠ»Π΅ΠΉ.
Π²Π²Π΅Π΄Π΅Π½ Π² Π²Π΅ΡΡΠΈΠΈ 2.2. ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΡΠΏΡΠΎΡΠ°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ C-ΠΊΠΎΠ΄ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ
Π³ΠΈΠ±ΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ Π½ΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ²ΡΠ΅Π΄Π½Π΅Π²Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π° Python.
ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅__get __ (self, obj, type = None) -> Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅
descr .__ set __ (self, obj, value) -> ΠΠ΅Ρ
descr .__ delete __ (self, obj) -> ΠΠ΅Ρ
ΠΠΎΡ ΠΈ Π²ΡΠ΅. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΡΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΊΠ°ΠΊ Π°ΡΡΠΈΠ±ΡΡ.
ΠΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ __set __ ()
ΠΈΠ»ΠΈ __delete __ ()
, ΠΎΠ½ ΡΡΠΈΡΠ°Π΅ΡΡΡ
Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ
. ΠΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ __get __ ()
.
Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π±Π΅Π· Π΄Π°Π½Π½ΡΡ
(ΠΎΠ½ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π½ΠΎ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ).
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π΅-Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΡΡ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ΅ΠΉ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°. ΠΡΠ»ΠΈ ΡΠ»ΠΎΠ²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΈΠΌΠ΅Π΅Ρ Π·Π°ΠΏΠΈΡΡ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΡΡΠΎ ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ , Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ. ΠΡΠ»ΠΈ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΡΠ°ΠΊΠΈΠΌ ΠΆΠ΅ name ΠΊΠ°ΠΊ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΡΠ»ΠΎΠ²Π°ΡΠ½Π°Ρ Π·Π°ΠΏΠΈΡΡ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ.
Π§ΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π°Π½Π½ΡΡ
ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΠΊΠ°ΠΊ __get __ (),
ΠΈ __set __ ()
Ρ __set __ ()
, Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΠΌ AttributeError
, ΠΊΠΎΠ³Π΄Π°
Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ.ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π° __set __ ()
Ρ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ
.
ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½ Π½Π°ΠΏΡΡΠΌΡΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, d .__ ΠΏΠΎΠ»ΡΡΠΈΡΡ __ (obj)
.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ
ΠΏΡΠΈ Π΄ΠΎΡΡΡΠΏΠ΅ ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, obj.d
ΠΈΡΠ΅Ρ d
Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅.
ΠΈΠ· obj
. ΠΡΠ»ΠΈ d
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ __get __ ()
, ΡΠΎ d.__get __ (ΠΎΠ±ΡΠ΅ΠΊΡ)
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°, ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΠΌΠΈ Π½ΠΈΠΆΠ΅.
ΠΠ΅ΡΠ°Π»ΠΈ Π²ΡΠ·ΠΎΠ²Π° Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ obj
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΠΎΠΌ.
ΠΠ»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² object .__ getattribute __ ()
ΠΊΠΎΡΠΎΡΡΠΉ
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ b.x
Π² ΡΠΈΠΏΠ° (b) .__ dict __ ['x'] .__ get __ (b, type (b))
. Π
ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΠ°Ρ Π΄Π°Π΅Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Π΄Π°Π½Π½ΡΡ
ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π½Π°Π΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°, ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° Π½Π°Π΄ Π½Π΅ Π΄Π°Π½Π½ΡΠΌΠΈ
Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ ΠΈ Π½Π°Π·Π½Π°ΡΠ°Π΅Ρ ΡΠ°ΠΌΡΠΉ Π½ΠΈΠ·ΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ __getattr __ ()
, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½.ΠΠΎΠ»Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ C ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² PyObject_GenericGetAttr ()
Π²
ΠΠ±ΡΠ΅ΠΊΡΡ / object.c.
ΠΠ»Ρ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ .__ getattribute __ ()
, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ B.x
Π² B .__ dict __ ['x'] .__ get __ (None, B)
. ΠΠ° ΡΠΈΡΡΠΎΠΌ Python ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ
Π½ΡΠ°Π²ΠΈΡΡΡ:
def __getattribute __ (self, key): "ΠΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ type_getattro () Π² Objects / typeobject.c" v = ΠΎΠ±ΡΠ΅ΠΊΡ .__ getattribute __ (ΡΠ°ΠΌ, ΠΊΠ»ΡΡ) Π΅ΡΠ»ΠΈ hasattr (v, '__get__'): return v .__ get __ (ΠΠ΅Ρ, ΡΠ°ΠΌ) Π²Π΅ΡΠ½ΡΡΡ v
ΠΠ°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ:
ΠΠ±ΡΠ΅ΠΊΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ super ()
, ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ __getattribute __ ()
ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ².ΠΠΎΠΈΡΠΊ ΠΏΠΎ Π°ΡΡΠΈΠ±ΡΡΡ super (B, obj) .m
ΠΈΡΠ΅Ρ obj .__ class __.__ mro__
Π΄Π»Ρ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° A
ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ B
Π° Π·Π°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ A .__ dict __ ['m'] .__ get __ (obj, B)
. ΠΡΠ»ΠΈ Π½Π΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΠΌ.
Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΎ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ Π½Π΅Ρ Π² ΡΠ»ΠΎΠ²Π°ΡΠ΅, m
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ
ΠΏΠΎΠΈΡΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° .__ getattribute __ ()
.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
.ΡΡΠ½ΠΊΡΠΈΠΉ Python
Π€ΡΠ½ΠΊΡΠΈΡ — ΡΡΠΎ Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅.
Π ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅.
Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π Python ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ def ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ:
ΠΡΠΈΠΌΠ΅Ρ
def my_function ():
print (Β«ΠΡΠΈΠ²Π΅Ρ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈΒ»)
ΠΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ
Π§ΡΠΎΠ±Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ:
ΠΡΠΈΠΌΠ΅Ρ
def my_function ():print (Β«ΠΡΠΈΠ²Π΅Ρ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈΒ»)
my_function ()
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ »ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠΌΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΎΡΡΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΠ² ΠΈΡ Π·Π°ΠΏΡΡΠΎΠΉ.
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ (fname). ΠΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ ΠΈΠΌΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ:
ΠΡΠΈΠΌΠ΅Ρ
def my_function ( fname ):print (fname + «Refsnes»)
my_function ( «Emil» )
my_function ( «Tobias» )
my_function ( «Linus» )
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ°ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡΡΡ Π΄ΠΎ args Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Python.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ»ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ?
Π’Π΅ΡΠΌΠΈΠ½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΌΠΎΠ³ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅: ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Π² ΡΡΠ½ΠΊΡΠΈΡ.
Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ — ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ, ΡΠΊΠ°Π·Π°Π½Π½Π°Ρ Π² ΠΊΡΡΠ³Π»ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ³ΡΠΌΠ΅Π½Ρ — ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π΅.
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°:
def my_function (fname, lname):print (fname + «» + lname)
my_function («Emil», «Refsnes»)
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ » ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ρ 1 ΠΈΠ»ΠΈ 3 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠΈΠ±ΠΊΡ:ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ 2 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ 1:
def my_function (fname, lname):print (fname + «» + lname)
my_function («Emil»)
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ »ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, * args
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ,
Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ *
ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡ ΠΊΠΎΡΡΠ΅ΠΆ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ:
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° *
:
print (Β«Π‘Π°ΠΌΡΠΉ ΠΌΠ»Π°Π΄ΡΠΈΠΉ ΡΠ΅Π±Π΅Π½ΠΎΠΊ is «+ kids [2])
my_function (» ΠΠΌΠΈΠ»Ρ «,» Π’ΠΎΠ±ΠΈΠ°Ρ «,» ΠΠΈΠ½ΡΡ «)
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ »ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ°ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡΡΡ Π΄ΠΎ * args Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Python.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
ΠΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠΎΠΌ ΠΊΠ»ΡΡ = Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ .
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
ΠΡΠΈΠΌΠ΅Ρ
def my_function (child3, child2, child1):print («Π‘Π°ΠΌΡΠΉ ΠΌΠ»Π°Π΄ΡΠΈΠΉ ΡΠ΅Π±Π΅Π½ΠΎΠΊ is «+ child3»
my_function (child1 = «Emil», child2 = «Tobias», child3 = «Linus»)
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ »Π€ΡΠ°Π·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΡΠ°ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ°Π΅ΡΡΡ Π΄ΠΎ kwargs Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Python.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°, ** kwargs
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ΠΎ Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ,
Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΄Π²Π΅ Π·Π²Π΅Π·Π΄ΠΎΡΠΊΠΈ: **
ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ:
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ **
ΠΏΠ΅ΡΠ΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
print («ΠΠ³ΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΡ» + kid [«lname»])
my_function (fname = «Tobias», lname = «Refsnes»)
ΠΠΎΠΏΡΠΎΠ±ΡΠΉ ΡΠ°ΠΌ »ΠΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Kword ΡΠ°ΡΡΠΎ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡΡΡ Π΄ΠΎ ** kwargs Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Python.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠ»ΠΈ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ:
ΠΡΠΈΠΌΠ΅Ρ
def my_function ( country = «ΠΠΎΡΠ²Π΅Π³ΠΈΡ» ):print («Π― ΠΈΠ·» + ΡΡΡΠ°Π½Π°)
my_function (Β«Π¨Π²Π΅ΡΠΈΡΒ»)
my_function (Β«ΠΠ½Π΄ΠΈΡΒ»)
my_function ()
my_function (Β«ΠΡΠ°Π·ΠΈΠ»ΠΈΡΒ»)
ΠΠ΅ΡΠ΅Π΄Π°ΡΠ° ΡΠΏΠΈΡΠΊΠ° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π»ΡΠ±ΡΡ ΡΠΈΠΏΠΎΠ² Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ (ΡΡΡΠΎΠΊΠ°, ΡΠΈΡΠ»ΠΎ, ΡΠΏΠΈΡΠΎΠΊ, ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ Ρ. Π.).), ΠΈ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΎΠ½ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΏΠΈΡΠΊΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΡΠΈΠΌΠ΅Ρ
def my_function (food):Π΄Π»Ρ x Π² food:
print (x)
fruit = [«ΡΠ±Π»ΠΎΠΊΠΎ», «Π±Π°Π½Π°Π½», «Π²ΠΈΡΠ½Ρ»]
my_function (fruit)
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
Π§ΡΠΎΠ±Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°Ρ
Π²ΡΠΏΠΈΡΠΊΠ°:
ΠΡΠΈΠΌΠ΅Ρ
def my_function (x):
return 5 * x
print (my_function (3))
print (my_function (5))
ΠΏΠ΅ΡΠ°ΡΡ (ΠΌΠΎΡ_ΡΡΠ½ΠΊΡΠΈΡ (9))
ΠΡΠΎΠΏΡΡΠΊ ΠΠ°ΡΠ²Π»Π΅Π½ΠΈΠ΅
ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΡΡΡΠΌ, Π½ΠΎ Π΅ΡΠ»ΠΈ
ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π±Π΅Π· ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ, Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ pass
, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ.
Π Π΅ΠΊΡΡΡΠΈΡ
Python ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·ΡΠ²Π°ΡΡ ΡΠ°ΠΌΠ° ΡΠ΅Π±Ρ.
Π Π΅ΠΊΡΡΡΠΈΡ — ΡΡΠΎ ΠΎΠ±ΡΠ°Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ°ΠΌΠ° ΡΠ΅Π±Ρ. ΠΡΠΎ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ, ΡΡΠΎ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΡΠΌ Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΡΠΊΠΎΠ»ΡΠ·Π½ΡΡΡ ΠΎΡ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°.ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠ΅ΠΊΡΡΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠΌ ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ tri_recursion () — ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°ΠΌΠΎΠΉ ΡΠ΅Π±Ρ (Β«ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°ΡΒ»). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ k, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° (-1) ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΡ. Π Π΅ΠΊΡΡΡΠΈΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ 0 (Ρ.Π΅. ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ ΡΠ°Π²Π½ΠΎ 0).
ΠΠΎΠ²ΠΎΠΌΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π»ΡΡΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΡΠ½ΠΈΡΡ ΡΡΠΎ — ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ.
ΠΡΠΈΠΌΠ΅Ρ
ΠΡΠΈΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΡΠΈΠΈ
def tri_recursion (k):Π΅ΡΠ»ΠΈ (k> 0):
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = k + tri_recursion (k — 1)
print (ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ)
Π΅ΡΠ΅:
ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ = 0
Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
print («\ n \ nΠ Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ΅ΠΊΡΡΡΠΈΠΈ»)
tri_recursion (6)
.
3. ΠΠΎΠ΄Π΅Π»Ρ Π΄Π°Π½Π½ΡΡ — Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Python 3.8.5
3.1. ΠΠ±ΡΠ΅ΠΊΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΡΠΈΠΏΡ
ΠΠ±ΡΠ΅ΠΊΡΡ — ΡΡΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΡ Π΄Π°Π½Π½ΡΡ Python. ΠΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Python ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. (Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΠΈ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΎΠ½ ΠΠ΅ΠΉΠΌΠ°Π½Π° Β«ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ Ρ Ρ ΡΠ°Π½ΠΈΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉΒ», ΠΊΠΎΠ΄ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ.)
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ, ΡΠΈΠΏ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π°
ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ; Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΡΠΌΠ°ΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ± Π°Π΄ΡΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²
ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΠΈ.ΠΠΏΠ΅ΡΠ°ΡΠΎΡ Β« is
Β» ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ Π΄Π²ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²; Π² id () Π€ΡΠ½ΠΊΡΠΈΡ
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π»ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠ΅Π΅ Π΅Π³ΠΎ Π»ΠΈΡΠ½ΠΎΡΡΡ.
ΠΠ΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ CPython: ΠΠ»Ρ CPython id (x)
— ΡΡΠΎ Π°Π΄ΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΠΈ, Π³Π΄Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ x
.
Π’ΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Β«Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ
ΠΈΠΌΠ΅Π΅Ρ Π΄Π»ΠΈΠ½Ρ? Β»), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΎΠ³ΠΎ
ΡΠΈΠΏ. Π€ΡΠ½ΠΊΡΠΈΡ type ()
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ° (ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ
ΡΠ°ΠΌ).ΠΠ°ΠΊ ΠΈ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ, ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ. ΠΠ±ΡΠ΅ΠΊΡΡ, ΡΠ΅Π½Π½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΡΠΌ ; ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΡΠ΅Π½Π½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Π° ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ, Π½Π°Π·ΡΠ²Π°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΌΠΈ . (ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ; ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°Π±ΠΎΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π½Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.ΠΡΠ°ΠΊ, Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡΡ Π½Π΅ ΡΡΡΠΎΠ³ΠΎ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ½ΠΊΠΎ.) ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΡΠΈΠΏΠΎΠΌ; Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΈΡΠ»Π°, ΡΡΡΠΎΠΊΠΈ ΠΈ ΠΊΠΎΡΡΠ΅ΠΆΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ, Π° ΡΠ»ΠΎΠ²Π°ΡΠΈ ΠΈ ΡΠΏΠΈΡΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²Ρ.
ΠΠ±ΡΠ΅ΠΊΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ½ΠΈΡΡΠΎΠΆΠ°ΡΡΡΡ ΡΠ²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠΎΠ±ΡΠ°Π½Ρ ΠΌΡΡΠΎΡΠΎΠΌ. Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΎΡΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡ ΠΌΡΡΠΎΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ ΠΎΠΏΡΡΠΊΠ°ΡΡ Π²ΠΎΠ²ΡΠ΅ — ΡΡΠΎ Π²ΠΎΠΏΡΠΎΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ.
ΠΠ΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ CPython : Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ CPython ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡ
Π΅ΠΌΡ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠ° ΡΡΡΠ»ΠΎΠΊ Ρ (Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ) Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ.
ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ±ΠΈΡΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ
ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ, Π½ΠΎ ΡΠ±ΠΎΡ ΠΌΡΡΠΎΡΠ° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ. Π‘ΠΌ. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° gc
ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΡΡΠΎΡΠ°.
ΠΡΡΠ³ΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π΅ΠΉΡΡΠ²ΡΡΡ ΠΈΠ½Π°ΡΠ΅, ΠΈ CPython ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ.
ΠΠ΅ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡΠ΅ΡΡ Π½Π° Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΡΡΠ°Π½ΡΡ
Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ (ΠΏΠΎΡΡΠΎΠΌΡ Π²Ρ Π²ΡΠ΅Π³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ Π·Π°ΠΊΡΡΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΡΠ²Π½ΠΎ).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ² ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ
ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π² ΠΆΠΈΠ²ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π»ΠΎΠ²Π»Ρ
ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Β« ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅
β¦ ΠΊΡΠΎΠΌΠ΅
Β» ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΆΠΈΠ²ΡΠ΅.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Β«Π²Π½Π΅ΡΠ½ΠΈΠ΅Β» ΡΠ΅ΡΡΡΡΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΎΡΠΊΡΡΡΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ
ΠΎΠΊΠ½Π°. ΠΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΡΡΠΈ ΡΠ΅ΡΡΡΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ
ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΌΡΡΠΎΡΠ°, Π½ΠΎ ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ,
ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΡΠ΅ΡΡΡΡ,
ΠΎΠ±ΡΡΠ½ΠΎ ΠΌΠ΅ΡΠΎΠ΄ close ()
.ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΡΠ²Π½ΠΎ
Π·Π°ΠΊΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠ°ΡΠ²Π»Π΅Π½ΠΈΠ΅ Β« ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅
β¦ , Π½Π°ΠΊΠΎΠ½Π΅Ρ,
Β»
ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Β« Ρ
Β» ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΡΡΠ»ΠΊΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ; ΠΎΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°ΠΌΠΈ . ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²: ΠΊΠΎΡΡΠ΅ΠΆΠΈ, ΡΠΏΠΈΡΠΊΠΈ ΠΈ ΡΠ»ΠΎΠ²Π°ΡΠΈ. Π‘ΡΡΠ»ΠΊΠΈ ΡΠ°ΡΡΡ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, ΠΌΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° Π½Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΡ ΡΡ Π² Π½Π΅ΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎΠ± ΠΈΠ·ΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ.ΠΡΠ°ΠΊ, Π΅ΡΠ»ΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ (ΠΊΠ°ΠΊ ΠΊΠΎΡΡΠ΅ΠΆ) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΡΡΡΠ»ΠΊΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½.
Π’ΠΈΠΏΡ Π²Π»ΠΈΡΡΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π° Π²ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΠ°ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎΡΡΡ
Π Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ°: Π΄Π»Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
ΡΠΈΠΏΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ,
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ½ΡΡΡ ΡΡΡΠ»ΠΊΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ
ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΈΠΏ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΠΎ Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ.,
ΠΏΠΎΡΠ»Π΅ a = 1; b = 1
, a
ΠΈ b
ΠΌΠΎΠ³ΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ
ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ c = []; d =
[]
, c
ΠΈ d
Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ Π΄Π²ΡΠΌ ΡΠ°Π·Π½ΡΠΌ, ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ, Π½ΠΎΠ²ΡΠΌ
ΡΠΎΠ·Π΄Π°Π» ΠΏΡΡΡΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ.(ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ c = d = []
Π½Π°Π·Π½Π°ΡΠ°Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΠ±ΠΎΠΈΠΌ c
ΠΈ d
.)
3.2. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΡΠΈΠΏΠΎΠ²
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΡΠΏΠΈΡΠΎΠΊ ΡΠΈΠΏΠΎΠ², Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π² Python. ΠΠΎΠ΄ΡΠ»ΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ (Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° C, Java ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ) ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΏΡ. Π Π±ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ Python ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΡΠΈΠΏΡ ΠΊ ΡΠΈΠΏΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠΌΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» ΠΈ Ρ. Π΄.), Ρ ΠΎΡΡ ΡΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ.
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½ΠΈΠΆΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΉ ΡΠΈΠΏΠΎΠ² ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π°Π±Π·Π°Ρ ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ «ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ. βΠΡΠΎ Π°ΡΡΠΈΠ±ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π½Π΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ Π΄Π»Ρ ΠΎΠ±ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ.
- ΠΠ΅Ρ
ΠΡΠΎΡ ΡΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΡΡΠΎ ΠΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ
ΠΠ΅Ρ
. ΠΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠ΅Π½Π½ΠΎΡΡΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ.g., Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ, Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ²Π½ΠΎ. ΠΠ³ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π»ΠΎΠΆΠ½ΠΎ.- NotImplemented
ΠΡΠΎΡ ΡΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΡΡΠΎ ΠΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡ
NotImplemented
. Π§ΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΎΠ². (ΠΠ°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅Ρ ΠΎΡΡΠ°ΠΆΠ΅Π½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΠΊΠ°Ρ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°.) ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡΠΈΠ½Ρ Π²Π΅ΡΠ½ΠΎ.Π‘ΠΌ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ.
- Ellipsis
ΠΡΠΎΡ ΡΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΡΡΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ. ΡΡΠΎ ΠΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Π»ΠΈΡΠ΅ΡΠ°Π»
...
ΠΈΠ»ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΠΈΠΌΡΠΠ»Π»ΠΈΠΏΡΠΈΡ
. ΠΠ³ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎΡΡΡ ΠΈΡΡΠΈΠ½Π½Π°.-
ΡΠΈΡΠ΅Π».ΠΠΎΠΌΠ΅Ρ
ΠΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠΌΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»Π°ΠΌΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ. ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.Π§ΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ; ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅, ΠΈΡ ΡΠ΅Π½Π½ΠΎΡΡΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. Π§ΠΈΡΠ»Π° Python, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ, Π½ΠΎ Ρ ΡΡΠ΅ΡΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ .
Python ΡΠ°Π·Π»ΠΈΡΠ°Π΅Ρ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°. Π½ΠΎΠΌΠ΅ΡΠ°:
-
ΡΠΈΡΠ»Π°. ΠΠ½ΡΠ΅Π³ΡΠ°Π»
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π» (ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ).
ΠΡΡΡ Π΄Π²Π° ΡΠΈΠΏΠ° ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π»:
Π¦Π΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° (
int
)ΠΡΠΎ ΡΠΈΡΠ»Π° Π² Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΡ (Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ) ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΠΌΡΡΡ.ΠΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ΄Π²ΠΈΠ³Π° ΠΈ ΠΌΠ°ΡΠΊΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, Π° ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ Π² Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎ 2, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ»Π»ΡΠ·ΠΈΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π·Π½Π°ΠΊΠΎΠ²ΡΡ Π±ΠΈΡΠΎΠ² ΠΏΡΠΎΡΡΠΈΡΠ°Π΅ΡΡΡ Π²Π»Π΅Π²ΠΎ.
- Booleans (
bool
) ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ False ΠΈ True. ΠΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
False
ΠΈTrue
— Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. ΠΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΈΠΏ — ΡΡΠΎ ΠΏΠΎΠ΄ΡΠΈΠΏ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ 0 ΠΈ 1, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°Ρ , Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΡΡΡΠΎΠΊΠ°, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠΈΒ«ΠΠΎΠΆΡΒ»
ΠΈΠ»ΠΈΒ«ΠΡΡΠΈΠ½Π°Β»
ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
ΠΡΠ°Π²ΠΈΠ»Π° Π΄Π»Ρ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ·Π²Π°Π½Ρ Π΄Π°ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π·Π½Π°ΡΠΈΠΌΠΎΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ΄Π²ΠΈΠ³Π° ΠΈ ΠΌΠ°ΡΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ ΡΠΈΡΠ΅Π».
- Booleans (
-
ΡΠΈΡΠ»Π°. Π Π΅Π°Π»ΡΠ½ΡΠ΅
(Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ
) ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ. Π’Ρ Π²ΠΎ Π²Π»Π°ΡΡΠΈ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ (ΠΈ C ΠΈΠ»ΠΈ Java ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ) Π΄Π»Ρ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Python Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ ΠΎΠ΄ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ; ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, Π·Π°ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² Python, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅Ρ ΠΏΡΠΈΡΠΈΠ½ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ ΡΠ·ΡΠΊ Ρ Π΄Π²ΡΠΌΡ Π²ΠΈΠ΄Π°ΠΌΠΈ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ.
-
ΡΠΈΡΠ»Π°. ΠΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠΉ
(ΡΠ»ΠΎΠΆΠ½ΡΠΉ
) ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π° ΠΊΠ°ΠΊ ΠΏΠ°ΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ΅ΡΠ΅ΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΠΈ Π΄Π»Ρ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ. ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΈ ΠΌΠ½ΠΈΠΌΠ°Ρ ΡΠ°ΡΡΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΠ»Π°
z
ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡz.real
ΠΈz.imag
.
-
- ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
ΠΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ ΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΠ»Π°ΠΌΠΈ.Π Π²ΡΡΡΠΎΠ΅Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ