π Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Python? Π£Π·Π½Π°ΠΉΡΠ΅ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅ΠΌ!
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² Python - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΡΡΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(5)
result = closure(3)
print(result) # ΠΡΠ²ΠΎΠ΄: 8
Π€ΡΠ½ΠΊΡΠΈΡ "outer_function" ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ "x" ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ "inner_function". ΠΠ½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ "inner_function" ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ "x" ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ "outer_function", Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ "outer_function" Π·Π°Π²Π΅ΡΡΠΈΠ»Π° ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅, ΠΊΠΎΠ³Π΄Π° Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ "outer_function" ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ "closure". ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ "closure(3)" ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ "x" ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΌΠ»ΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ "outer_function" Π²ΡΠ΅ Π΅ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Π°, ΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ 8.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² Python?
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ (closure) Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² ΡΠ²ΠΎΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΡΠ° ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π·Π°ΠΊΠΎΠ½ΡΠΈΠ»Π°ΡΡ. ΠΠ½ ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ:
def outer_function(x):
def inner_function(y):
return x + y
return inner_function
closure = outer_function(5)
result = closure(10)
print(result) # Output: 15
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ outer_function
Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inner_function
. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ outer_function(5)
, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ x
ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΡΠΌ 5. ΠΠ°ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ inner_function
, ΠΊΠΎΡΠΎΡΠ°Ρ "Π·Π°ΠΌΡΠΊΠ°Π΅Ρ" ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ closure(10)
, ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ x
Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ y
, ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ 15.
ΠΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ Π΅Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΡ Π² Python:
def outer_function():
message = "Hello"
def inner_function():
print(message)
return inner_function
my_closure = outer_function()
my_closure() # Output: Hello
ΠΠ΄Π΅ΡΡ ΡΡΠ½ΠΊΡΠΈΡ outer_function
ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ inner_function
, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ message
Π²Π½ΡΡΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ my_closure()
, ΠΎΠ½Π° Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ message
, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ°Π²Π½ΠΎ "Hello".
ΠΠ°ΠΌΡΠΊΠ°Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ-ΡΠ°Π±ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠ΅ Π² Python - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π² ΡΠ²ΠΎΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π°ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ.