Π‘Π»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π° Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΌΠ°Π»ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈΠΌΠ΅Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ Π½Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅, ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠΌΠ΅Π½ΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ (Ρ ΠΎΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°ΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ) ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π±ΠΈΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌ. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β Π·Π°Π΄Π°ΡΠ° Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΌΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Ρ ΠΎΠΏΡΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ Π±ΠΎΠ»ΡΡΠΎΠΉ Π΄Π»ΠΈΠ½Π΅ Π΄Π°Π½Π½ΡΡ Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π΅Ρ, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΈΡΠΊΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π΅Π½, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠ΄Π°.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ timeit ΡΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ΡΠΎΠΈΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΡΠ°ΠΉΠ»Π΅ΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠ΅ΡΡΠ° ΠΊΠΎΠ΄Π°, ΠΎΡΠ½ΠΈΠΌΠ°ΡΡΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΠ±ΡΡΠ½ΠΎ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π² ΡΠ°ΠΌΠΎΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΡΠ½Π΅ΡΡΠΈ ΠΈΠ· ΡΠΈΠΊΠ»Π° Π²ΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π² Π±ΠΎΠ»Π΅Π΅ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΡΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π²Π½Π΅ ΡΠΈΠΊΠ»Π°.
Π ΡΠ·ΡΠΊΠ΅ Python Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΡΠΎΠ³ΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° ΠΊΡΠΈΡΠΈΡΠ½ΡΡ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΡΠ°ΡΡΠΊΠ°Ρ ΠΊΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π²ΡΠ·ΠΎΠ²Π° Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΡΠΈΡΠ»Π° ΡΡΠ½ΠΊΡΠΈΠΉ.
Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° Python ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΎΡΠ° (ΠΎΠ½ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΡΡΠ°Π²ΠΊΡ Python, Π½ΠΎ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ): psyco. ΠΠ»Ρ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π² Π½Π°ΡΠ°Π»Π΅ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ:
import psyco
psyco.full()
ΠΡΠ°Π²Π΄Π°, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π°ΡΡΡΡ Β«ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈΒ» Ρ ΠΏΠΎΠΌΠΎΡΡΡ psyco. Π ΡΡΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π±ΡΠ΄ΡΡ Π²ΡΠ΄Π°Π½Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ psyco Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΈΡ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅Π½ΠΈΡ.
ΠΡΠ΅ ΠΎΠ΄Π½ΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°ΡΡΠΊΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π½Π° ΡΠ·ΡΠΊΠ°Ρ Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΡΡΠΎΠ²Π½Ρ (Π‘/Π‘++) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ· Python. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ° ΠΊΡΠ°ΠΉΠ½ΡΡ ΠΌΠ΅ΡΠ° ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ Π·Π°Π΄Π°Ρ, ΡΡΠ΅Π±ΡΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ, ΡΠΆΠ΅ Π½Π°ΠΏΠΈΡΠ°Π½Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠ°ΡΡΡΠΎΠ²ΡΠΌΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ PIL (Python Imaging Library). Π§ΠΈΡΠ»Π΅Π½Π½ΡΠ΅ ΡΠ°ΡΡΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Numeric ΠΈ Ρ.Π΄.
Pychecker
ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Python ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Pychecker. ΠΠ°ΠΊ ΠΈ lint Π΄Π»Ρ ΡΠ·ΡΠΊΠ° C, Pychecker ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠ²Π»ΡΡΡ ΡΠ»Π°Π±ΠΎΡΡΠΈ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π½Π° ΡΠ·ΡΠΊΠ΅ Python. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Pychecker:
import re, string
import re
a = "a b c"
def test(x, y):
from string import split
a = "x y z"
print split(a) + x
test(['d'], 'e')
Pychecker Π²ΡΠ΄Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ:
badcode.py:1: Imported module (string) not used
badcode.py:2: Imported module (re) not used
badcode.py:2: Module (re) reβimported
badcode.py:5: Parameter (y) not used
badcode.py:6: Using import and from ... import for (string)
badcode.py:7: Local variable (a) shadows global defined on line 3
badcode.py:8: Local variable (a) shadows global defined on line 3
Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΌΠΎΠ΄ΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π΄Π°Π»Π΅Π΅ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ, ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ re. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠ΄ΡΠ»Ρ re ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ. ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ: ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ y Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½; ΠΌΠΎΠ΄ΡΠ»Ρ string ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ ΠΊΠ°ΠΊ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ import, ΡΠ°ΠΊ ΠΈ Π²ΠΎ fromβimport; Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ a Π·Π°ΡΠ΅Π½ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π² ΡΡΠ΅ΡΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠ΅.
ΠΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Pychecker Π²ΡΠ΄Π°Π²Π°Π» ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠΉ:
import string
a = "a b c"
def test(x, y):
a1 = "x y z"
print string.split(a1) + x
test(['d'], 'e')
Π’Π΅ΠΏΠ΅ΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ Π»ΠΈΡΡ ΠΎΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅:
goodcode.py:4: Parameter (y) not used
Π’Π°ΠΊΠΎΠ΅ ΡΠΎΠΆΠ΅ Π±ΡΠ²Π°Π΅Ρ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈΡΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΎΠ½ Π½Π΅ ΡΠ΄Π΅Π»Π°Π» ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΠ°ΠΆΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Python ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, ΠΎΠ±ΡΠΈΠ΅ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ id()), ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ β Π΄Π°ΠΆΠ΅ Π² Π΄Π²ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ°Ρ (ΡΡΠ½ΠΊΡΠΈΠΈ str() ΠΈ repr()); ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ dir() ΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠΌ __dict__ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈΠΌΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ·Π½Π°ΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΡΡΠ³ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° Π΄Π°Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ sys.getrefcount(). ΠΡΡΡ Π΅ΡΠ΅ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»Π΅Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΡΡΡΠ»ΠΊΠΈ Π΄ΡΡΠ³ Π½Π° Π΄ΡΡΠ³Π° (ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ). Π‘Π±ΠΎΡΠΊΠΎΠΉ ΠΌΡΡΠΎΡΠ° (garbage collection) ΠΌΠΎΠΆΠ½ΠΎ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ gc.
ΠΡΠ΅ ΡΡΠΎ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°Π΅Ρ ΡΠΎΡ ΡΠ°ΠΊΡ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Python ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅, Π° ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ: ΠΎΠ½ΠΈ ΠΈ ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΡΡΠΎΠ³ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ.
Π‘ΡΠ°Π·Ρ ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ, ΡΡΠΎ Python ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΡΡΠΎΡΠΎΠ½Ρ ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ: Β«ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡΒ», ΠΊΠΎΡΠΎΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΠΈ Β«Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡΒ», ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Β«ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Β» ΡΡΠ΅Π΄ΡΡΠ² ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΡΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ (ΡΡΠ½ΠΊΡΠΈΡ type()), ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° ΠΊΠ»Π°ΡΡΡ (isinstance()), ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ (issubclass()), Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎΡΡ ΡΡΡΡ Π²ΡΡΠ΅. ΠΡΠΎ ΠΊΠ°ΠΊ Π±Ρ ΠΏΡΠΈΠ±ΠΎΡΠ½Π°Ρ Π΄ΠΎΡΠΊΠ° ΠΌΠ°ΡΠΈΠ½Ρ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Β«Π½Π΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉΒ» ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ (ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ΅ΠΌΡ ΡΠ³ΠΎΠ΄Π½ΠΎ: ΠΊ ΡΠ΅ΠΊΡΡΠ΅ΠΌΡ ΡΡΠ΅ΠΉΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΡΡΠ΅ΠΊΡ, ΠΊ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Ρ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (ΠΎΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΡΡΠ΅Π΄ΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ). Π‘ΡΠ°Π·Ρ ΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΡΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ (ΠΈ ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ) ΠΎΡΠ΅Π½Ρ Π΄Π΅Π»ΠΈΠΊΠ°ΡΠ½ΠΎ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ·ΡΠΊΠ° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½ΡΡΠ²ΠΎ ΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΡ Π²Π΅ΡΡΠΈΠΈ ΠΊ Π²Π΅ΡΡΠΈΠΈ, Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΡΠ΅Π»Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ ΡΠ°Π½Π΅Π΅ ΡΡΠΊΠΎΡΠΈΡΠ΅Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ PythonβΠΊΠΎΠ΄Π° psyco ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ Π²ΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎ ΡΡΠ΅ΠΉΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½ΡΡ ΠΈΡ ΡΠ²ΠΎΠΈΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Python ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ.
Π‘ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ ΡΡΠΎΠΈΡ ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ.
Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Β«ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΡ Β» ΡΡΠ΅Π΄ΡΡΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π²ΡΠ±ΡΠ°Π½Π° ΠΎΠ±ΡΡΠ½Π°Ρ ΡΡΡΠΎΠΊΠ°:
>>> s = "abcd"
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__',
'__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__',
'__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__',
'__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__',
'__str__', 'capitalize', 'center', 'count', 'decode',
'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha',
'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust',
'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
>>> id(s)
1075718400
>>> print str(s)
abcd
>>> print repr(s)
'abcd'
>>> type(s)
<type 'str'>
>>> isinstance(s, basestring)
True
>>> isinstance(s, int)
False
>>> issubclass(str, basestring)
True
Β«ΠΠ΅ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΡΠ΅Β» ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΈΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΠΈ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ΡΡΠ΅Π΄Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠΈΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ, ΠΊΠ°ΠΊ Π³Π»Π°Π²Π½Π°Ρ (Π½Π° Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ) ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Python ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ:
>>> def f(x, y=0):
... """Function f(x, y)"""
... global s
... return t + x + y
...
>>> f.secure = 1 # ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ
>>> f.func_name # ΠΈΠΌΡ
'f'
>>> f.func_doc # ΡΡΡΠΎΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ
'Function f(x, y)'
>>> f.func_defaults # Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
(0,)
>>> f.func_dict # ΡΠ»ΠΎΠ²Π°ΡΡ Π°ΡΡΠΈΠ±ΡΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ
{'secure': 1}
>>> co = f.func_code # ΠΊΠΎΠ΄ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
>>> co
<code object f at 0x401ec7e0, file "<stdin>", line 1>
ΠΠΎΠ΄ΠΎΠ²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ Π°ΡΡΠΈΠ±ΡΡΡ:
>>> co.co_code # Π±Π°ΠΉΡ-ΠΊΠΎΠ΄
't\x00\x00|\x00\x00\x17|\x01\x00\x17Sd\x01\x00S'
>>> co.co_argcount # ΡΠΈΡΠ»ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²
2
>>> co.co_varnames # ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
('x', 'y')
>>> co.co_consts # ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
(None,)
>>> co.co_names # Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π°