Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

def (функция/ΠΌΠ΅Ρ‚ΠΎΠ΄) Π² Python

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ инструкций, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π½Π΅ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ ноль ΠΈ Π±ΠΎΠ»Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ инструкция return. ДопускаСтся использованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… return, Π² Ρ‚ΠΎΠΌ числС для Ρ€Π°Π½Π½Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· инструкции return (Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ с нСю, Π½ΠΎ Π±Π΅Π· указания Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°) всё Ρ€Π°Π²Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” None.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова def, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список Π΅Ρ‘ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… строках, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ отступом слСва, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠ΅Ρ€Π²ΠΎΠΉ инструкциСй Π² Ρ‚Π΅Π»Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ для Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ β€” Β«docstringΒ»). НСкоторыС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ ΠΈ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΈΠ΅ строки для формирования ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ справки.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ считаСтся Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Ρ‚ΠΎΠ½ΠΎΠΌ.

def do_work(work, reverse=False):
"""ВыполняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Π’ случаС ΡƒΠ΄Π°Ρ‡Π½ΠΎΠ³ΠΎ выполнСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ True,
ΠΈΠ½Π°Ρ‡Π΅ - False.

:param list work: Бписок для Ρ€Π°Π±ΠΎΡ‚Ρ‹.
:param bool reverse: Π€Π»Π°Π³. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ
Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС
:rtype: bool
"""


Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ функция do_work, с Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ work ΠΈ reverse. Ѐункция Π·Π°Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° (ΠΈΡΠΏΠΎΠ»ΡŒΡƒΠ·Π΅Ρ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ описания сигнатуры reStructuredText
). ΠšΡ€ΠΎΠΌΠ΅ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ содСрТит инструкций, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ описываСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ» ΠΈ являСтся исполняСмой инструкциСй. Π’ Ρ…ΠΎΠ΄Π΅ исполнСния происходит связываниС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ локальном пространствС ΠΈΠΌΡ‘Π½ (локальной символьной Ρ‚Π°Π±Π»ΠΈΡ†Π΅) с Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ» β€” ΠΎΠ±Ρ‘Ρ€Ρ‚ΠΊΠΎΠΉ Π²ΠΎΠΊΡ€ΡƒΠ³ исполняСмого ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ глобальноС пространство ΠΈΠΌΡ‘Π½, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ использовано ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ связан ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ (это ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для пСрСимСнования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ создания псСвдонимов).

Π‘Π°ΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ исполнСния ΠΊΠΎΠ΄Π° ΠΈΠ· Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Код исполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

    def print_yes():
print('yes')

print_yes() # yes

print_yes_alias = print_yes

print_yes_alias() # yes


Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Π½ΠΈΡ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ» ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС значСния Π² словарС ΠΈ Ρ‚.ΠΏ.).
    def print_yes():
print('yes')

def print_no():
print('no')

my_functions = [print_yes, print_no]

for function in my_functions:

# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ function Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
# Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π•Π³ΠΎ-Ρ‚ΠΎ ΠΌΡ‹ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС.
function()


Π’ Ρ…ΠΎΠ΄Π΅ исполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ формируСтся новая символьная Ρ‚Π°Π±Π»ΠΈΡ†Π° с Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: всС назначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΉ. ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, сначала производится ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΎΡ‚Ρ‹ΡΠΊΠ°Ρ‚ΡŒ Π΅Ρ‘ Π² локальной символьной Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π΄Π°Π»Π΅Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΎΠ±Ρ€Π°ΠΌΠ»ΡΡŽΡ‰ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π΄Π°Π»Π΅Π΅ Π² глобальной Ρ‚Π°Π±Π»ΠΈΡ†Π΅, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ встроСнных ΠΈΠΌΡ‘Π½.

Π’Π²ΠΈΠ΄Ρƒ Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π° ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π±Π΅Π· использования инструкции

global) нСльзя.

    MY_GLOBAL = 1

def set_global_1():
MY_GLOBAL = 2

def set_global_2():
global MY_GLOBAL
MY_GLOBAL = 2

print(MY_GLOBAL) # 1

set_global_1()
print(MY_GLOBAL) # 1

set_global_2()
print(MY_GLOBAL) # 2


АргумСнты, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π° функция, Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π΅Ρ‘ локальной символьной Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Β«ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽΒ» (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΈ этом всСгда являСтся ссылка Π½Π° сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½ΠΎ Π½Π΅ Π½Π° Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅). Однако, Π²Π²ΠΈΠ΄Ρƒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ измСняСмыС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Π²Ρ‹Π·Π²Π°Π²ΡˆΠΈΠΉ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚ всС измСнСния, сдСланныС Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов Π² список), Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°Π·Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Β«

ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠΎ ссылкС Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β».

    def mutate_list(a_list):
a_list.append(0)
return True

my_list = [1]
print(my_list) # [1]

mutate_list(my_list) # True
print(my_list) # [1, 0]


Когда функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, для Π²Ρ‹Π·ΠΎΠ²Π° создаётся новая локальная символьная Ρ‚Π°Π±Π»ΠΈΡ†Π°.

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ опрСдСлСния

Π’ ΠŸΠΈΡ‚ΠΎΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (этим ΠΏΡ€ΠΈΡ‘ΠΌΠΎΠΌ, Π² частости, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ создании Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²), Π½ΠΎ ΠΈ классов (Π² случаС нСобходимости).

    def outer_func():

# ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ
# Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
def inner_func():
return 'some'

return inner_func()

print(outer_func()) # some

def get_my_class():

# ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ класса Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния
# Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
class MyClass:

my_attr = 1

return MyClass

my_class = get_my_class()
print(my_class.my_attr) # 1


Π‘ΠΈΠ½ΠΎΠ½ΠΈΠΌΡ‹ поиска: def (функция/ΠΌΠ΅Ρ‚ΠΎΠ΄), function, define, return, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, procedure, Π²ΡƒΠ°

#12 — Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ (def, lambda, return)

Π’ ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ Π·Π°Ρ‚Ρ€ΠΎΠ½Π΅ΠΌ Ρ‚Π΅ΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² языкС Python.

ΠœΡ‹ разбСрСмся с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ понятиями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ: def, lambda ΠΈ return, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΡ‹ научимся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. На основС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ построСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΈΠ½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ нСбольшими ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΡƒΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ вынСсти ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° это Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°ΡŽΡ‚ построСниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π°ΠΌ Π½Π΅ Π½Π°Π΄ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ мноТСство Ρ€Π°Π·, Π° ΠΌΠΎΠΆΠ½ΠΎ просто Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

МногиС ΠΏΡƒΡ‚Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ. На самом Π΄Π΅Π»Π΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Π½Π΅Ρ‚, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Ρ‚ΠΎ записаны Π²Π½Π΅ классов Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ функциями, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Ρ‚ΠΎ записаны Π²Π½ΡƒΡ‚Ρ€ΠΈ классов Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ.

Π’ΠΎΡ‡Π½ΠΎ такая ΠΆΠ΅ ситуация обстоит с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. Π’ классах ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ полями, Π° Π²Π½Π΅ классов — ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ.

Π’ Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова def. КаТдая функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈΠ»ΠΈ ΠΆΠ΅ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… вовсС. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ способны Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π² Ρ…ΠΎΠ΄Π΅ выполнСния ΠΊΠΎΠ΄Π°, Ссли это трСбуСтся.

def some_test(): # Ѐункция Π±Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
	x = 23
	return x # Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ

def some_test_2(a, b, c): # Ѐункция с 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ
	return a * b * c # Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ чисСл

def print_something(word, prefix): # Ѐункция с 2 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ
	print (prefix, "-", word)
	pass # Ѐункция Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚

Когда функция Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово pass.Β 

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π΅ΠΌ самым вызывая ΠΈΡ…. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π΅Ρ‘ Π½Π°Π·Π²Π°Π½ΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Ссли Ρ‚Π°ΠΊΠΎΠ²Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ:

res = some_test_2 (2, 67, 12)

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ res. Π”Π°Π»Π΅Π΅ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Если функция Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ большой объСм ΠΊΠΎΠ΄Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

Для этого потрСбуСтся функция lambda.Β 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ создания Β«lambdaΒ» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

multiple = lambda a, b: a * b
multiple(7, 12)

Подобная функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ названия, Π½ΠΎ Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² дальнСйшСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π£Ρ€ΠΎΠΊ 10 курса «Python. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

Ѐункция Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ прСдставляСт собой обособлСнный участок ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ²ΡˆΠΈΡΡŒ ΠΊ Π½Π΅ΠΌΡƒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ Π±Ρ‹Π» Π½Π°Π·Π²Π°Π½. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ происходит Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с нСбольшими ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами ΠΏΠΎ сСбС, Ρ‚. Π΅. Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Π° Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. НСрСдко ΠΈΡ… Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ – ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅Ρ‚. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Волько ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π΅ с Π²Π²ΠΎΠ΄Π° (ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄Ρ€. ), Π° ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Бюда ΠΆΠ΅ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

БущСствуСт мноТСство встроСнных Π² язык программирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π² Python ΠΌΡ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ. Π­Ρ‚ΠΎ print(), input(), int(), float(), str(), type(). Код ΠΈΡ… Ρ‚Π΅Π»Π° Π½Π°ΠΌ Π½Π΅ Π²ΠΈΠ΄Π΅Π½, ΠΎΠ½ Π³Π΄Π΅-Ρ‚ΠΎ «ΡΠΏΡ€ΡΡ‚Π°Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ языка». Нам ΠΆΠ΅ прСдоставляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс – имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, программист всСгда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜Ρ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ΄ «ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ» ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ программиста, Π° Π½Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. РазбСрСмся, Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°Π΄ΠΎ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° подряд Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π½Π° Π²Π²ΠΎΠ΄ ΠΏΠ°Ρ€Ρƒ чисСл ΠΈ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»:

i = 0
while i < 3:
    a = int(input())
    b = int(input())
    print(a+b)
    i += 1

Однако, Ρ‡Ρ‚ΠΎ Ссли ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ запросом чисСл, Π½Π°Π΄ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ надпись, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· эта надпись разная. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Ρƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° получится Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, содСрТащий Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ участки:

print("Бколько бананов и ананасов для обСзьян?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚.")

print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚.")

print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚.")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Бколько бананов и ананасов для обСзьян?
15
5
ВсСго 20 ΡˆΡ‚.
Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?
50
12
ВсСго 62 ΡˆΡ‚.
Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?
16
8
ВсСго 24 ΡˆΡ‚.

Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ дублирования ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Благодаря ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ участок ΠΊΠΎΠ΄Π° Π½Π΅ сразу, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ понадобится.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ def

Π’ языкС программирования Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° def. Рассмотрим ΠΊΠΎΠ΄:

def countFood():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слоТныС инструкции Π²Ρ€ΠΎΠ΄Π΅ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² функция состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚Π΅Π»Π°. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ оканчиваСтся Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. Π’Π΅Π»ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ отступ.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def сообщаСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π° def слСдуСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Оно ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ всякий ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСмСнная. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ вСсьма ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ всСму осмыслСнныС ΠΈΠΌΠ΅Π½Π°. Π’Π°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС функция Π½Π°Π·Π²Π°Π½Π° «ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΠ•Π΄Ρƒ» Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° русский.

ПослС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ставятся скобки. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½ΠΈ пустыС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ функция Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡ… ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π² скобках Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ПослС двоСточия слСдуСт Ρ‚Π΅Π»ΠΎ, содСрТащСС инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ². Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π½Π΅ рядом ΠΈ Π½Π΅ вмСстС. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½ΠΈ Ρ€Π°Π·Ρƒ Π΅Π΅ Π½Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. НСльзя Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π²Ρ‹Π·Π²Π°Π² Π΅Π΅, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π΅ Ρ‚Π΅Π»Π°.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Рассмотрим ΠΏΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

def countFood():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")

print("Бколько бананов и ананасов для обСзьян?")
countFood()

print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
countFood()

print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
countFood()

ПослС Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ сообщСния осущСствляСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит просто ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ со скобками. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ скобки ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ пустыС. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ функция вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°.

Когда функция вызываСтся, ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π΅ Ρ‚Π΅Π»ΠΎ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ исполнСно, ΠΏΠΎΡ‚ΠΎΠΊ выполнСния возвращаСтся Π² основной ΠΊΠΎΠ΄ Π² Ρ‚ΠΎ мСсто, Π³Π΄Π΅ функция Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ. Π”Π°Π»Π΅Π΅ исполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’ языкС Python ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄ строка Π·Π° строкой ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ находится Π½ΠΈΠΆΠ΅ ΠΏΠΎ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ, Π΅ΠΌΡƒ Π΅Ρ‰Π΅ нСизвСстно. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка (выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NameError):

print("Бколько бананов и ананасов для обСзьян?")
countFood()

print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
countFood()

print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
countFood()

def countFood():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Бколько бананов и ананасов для обСзьян?
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    countFood()
NameError: name 'countFood' is not defined

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… мСстах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако для удобочитаСмости ΠΊΠΎΠ΄Π° программисты Π΄Π°ΠΆΠ΅ Π² этом случаС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ структуру

Польза Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² возмоТности ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… мСст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НС ΠΌΠ΅Π½Π΅Π΅ Π²Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ благодаря ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ ΠΈΡΡ‚ΠΈΠ½Π½ΡƒΡŽ структуру. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Π±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π΅Π΅ Π½Π° обособлСнныС части, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… выполняСт свою ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

ΠŸΡƒΡΡ‚ΡŒ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ. ПослС этого Π²Π²ΠΎΠ΄ΠΈΡ‚ исходныС Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, Π΄Π»ΠΈΠ½Ρƒ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² случаС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния Π½Π° нСсколько Π²Π΅Ρ‚Π²Π΅ΠΉ, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if-elif-else:

figure = input("1-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 
2-Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 3-ΠΊΡ€ΡƒΠ³: ")

if figure == '1':
  a = float(input("Π¨ΠΈΡ€ΠΈΠ½Π°: "))
  b = float(input("Высота: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %. 2f" % (a*b))
elif figure == '2':
  a = float(input("ОснованиС: "))
  h = float(input("Высота: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (0.5 * a * h))
elif figure == '3':
  r = float(input("Радиус: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (3.14 * r**2))
else:
  print("Ошибка ввода")

Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ всС прСкрасно. Но напишСм Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с функциями:

def rectangle():
    a = float(input("Π¨ΠΈΡ€ΠΈΠ½Π°: "))
    b = float(input("Высота: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (a*b))

def triangle():
    a = float(input("ОснованиС: "))
    h = float(input("Высота: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (0.5 * a * h))

def circle():
    r = float(input("Радиус: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (3.14 * r**2))

figure = input("1-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 
2-Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 3-ΠΊΡ€ΡƒΠ³: ")
if figure == '1':
  rectangle()
elif figure == '2':
  triangle()
elif figure == '3':
  circle()
else:
  print("Ошибка ввода")

Он каТСтся слоТнСС, Π° каТдая ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вызываСтся всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Однако ΠΈΠ· ΠΎΠ±Ρ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Π±Ρ‹ ΡƒΠ±Ρ€Π°Π½Ρ‹ ΠΈ обособлСны инструкции для нахоТдСния ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ состоит ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… «ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ² Π›Π΅Π³ΠΎ». Π’ основной Π²Π΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Она ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

Если Π½Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ захочСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ Π“Π΅Ρ€ΠΎΠ½Π°, Π° Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· высоту, Ρ‚ΠΎ Π½Π΅ придСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π²ΠΎ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° состоит ΠΈΠ· тысяч строк ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). ΠœΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ ΠΊ мСсту опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π΅Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

Если ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚ΠΎ ΠΌΡ‹ смоТСм ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΡƒΠ΄Π°, сославшись Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ (ΠΊΠ°ΠΊ это дСлаСтся Π² Python, Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно ΠΏΠΎΠ·ΠΆΠ΅).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ этой возмоТности Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ описанию.

Основная Π²Π΅Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ считая Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ test(). Π’ Π½Π΅ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π° Π²Π²ΠΎΠ΄ Ρ†Π΅Π»ΠΎΠ΅ число. Если ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ вызываСтся функция positive(), Ρ‚Π΅Π»ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран слова «ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅». Если число ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ вызываСтся функция negative(), Π΅Π΅ Ρ‚Π΅Π»ΠΎ содСрТит Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран слова «ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅».

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² test() Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Однако ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ порядок опрСдСлСния самих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ? Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ опрСдСлСния positive() ΠΈ negative() ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ test() ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС Π½Π΅Π³ΠΎ? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π°ΡˆΡƒ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ, помСняв объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ мСстами. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ Π² android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ pdf-вСрсии курса

синтаксис, Π»ΠΎΠ³ΠΈΠΊΠ° ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ~ PythonRu

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def compute_surface(radius):
    from math import pi
    return pi * radius * radius

Для опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ всСго лишь Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π° послС β€” ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Π‘Π»Π΅Π΄ΠΎΠΌ ΠΈΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊ инструкций.

ПослСдняя строка Π² Π±Π»ΠΎΠΊΠ΅ инструкций ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с return, Ссли Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если инструкции return Π½Π΅Ρ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ функция Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ None. Как Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

i = 0
def increment():
    global i
    i += 1

Ѐункция ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ i ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).

Π’Ρ‹Π·ΠΎΠ²Ρ‹

Для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, Π½ΡƒΠΆΠ½ΠΎ ввСсти:

surface = compute_surface(1.)

Для Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚:

increment()

Π•Ρ‰Π΅

Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² ΠΎΠ΄Π½Ρƒ строку, Ссли Π±Π»ΠΎΠΊ инструкций прСдставляСт собой простоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

def sum(a, b): return a + b

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ:

def func1(a, b):

    def inner_func(x):
        return x*x*x

    return inner_func(a) + inner_func(b)

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, поэтому ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ return

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ простого значСния

АргумСнты ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для измСнСния Π²Π²ΠΎΠ΄Π° ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но ΠΊΡƒΠ΄Π° ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ return, ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ Ρ€Π°Π½Π΅Π΅. Если Π΅Π΅ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, функция Π²Π΅Ρ€Π½Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ None.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Пока Ρ‡Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Π½ΠΈΡ‡Π΅Π³ΠΎ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ None). А ΠΊΠ°ΠΊ насчСт Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ? Π­Ρ‚ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ массива. ВСхничСски, это всС Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. НапримСр:

def stats(data):
    """Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ списком"""
    _sum = sum(data) 
    mean = sum / float(len(data)) 
    variance = sum([(x-mean(data))**2/len(data) for x in data])
    return mean,variance   

m, v = stats([1, 2, 1])

АргумСнты ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π½ΠΎ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ. Π­Ρ‚ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π’Π°ΠΊΠΆΠ΅ Python прСдоставляСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²-ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” это имя Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Он ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅. АргумСнт β€” это Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ссылка Π½Π° Π½Π΅Π³ΠΎ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅. Π’ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def sum(x, y):
    return x + y

x ΠΈ y β€” это ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π° Π² этой:

sum(1, 2)

1 ΠΈ 2 β€” Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ со значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

def compute_surface(radius, pi=3.14159):
    return pi * radius * radius

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, Ρ‚ΠΎΠ³Π΄Π° всС, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ справа, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄ΠΎΠΏΡƒΡ‰Π΅Π½Π° ошибка:

def compute_surface(radius=1, pi):
    return pi * radius * radius

Для Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅:

S = compute_surface(10, pi=3.14)

На самом Π΄Π΅Π»Π΅, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ (ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ имя ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°), Π½ΠΎ этот способ Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒΡŽ:

S = compute_surface(radius=10, pi=3.14)

А этот Π²Ρ‹Π·ΠΎΠ² Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½:

S = compute_surface(pi=3.14, 10)

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько, ΠΈ порядок Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ значСния:

def compute_surface2(radius=1, pi=3.14159):
    return pi * radius * radius
S = compute_surface2(radius=1, pi=3.14)
S = compute_surface2(pi=3.14, radius=10.)
S = compute_surface2(radius=10.)

МоТно Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° порядок ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ порядку ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ:

S = compute_surface2(10. , 3.14)
S = compute_surface2(10.)

Если ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Ρ‚ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ всС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

def f(a=1,b=2, c=3):
    return a + b + c

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:

f(1,,3)

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ:

params = {'a':10, 'b':20}
S = f(**params)

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ оцСниваСтся ΠΈ сохраняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π½Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅). Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ β€” это измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, список ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ повСдСния, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСизмСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

def inplace(x, mutable=[]):
   mutable.append(x)
   return mutable
res = inplace(1)
res = inplace(2)
print(inplace(3))
[1, 2, 3]
def inplace(x, lst=None):
   if lst is None: lst=[]
   lst. append()
   return lst

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ измСняСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ помСнялось ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅:

def change_list(seq):
    seq[0] = 100
original = [0, 1, 2]
change_list(lst1)
original
[100, 1, 2]

Π”Π°Π±Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ измСнСния ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ копию измСняСмого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

original = [0, 1, 2]
change_list(original[:])
original
[100, 1, 2]

Π£ΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ количСства Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Иногда количСство ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ max() ΠΈ min(). Бинтаксис для опрСдСлСния Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

def func(pos_params, *args):
    block statememt

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

func(pos_params, arg1, arg2, . ..)

Python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: подставляСт ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (*args), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ:

def add_mean(x, *data):
    return x + sum(data)/float(len(data))

add_mean(10,0,1,2,-1,0,-1,1,2)
10.5

Если лишниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ пустой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²-ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов

Как ΠΈ Π² случаС с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²-ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (Π² сочСтании с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ· ΠΏΡ€ΠΎΡˆΠ»ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π°):

def func(pos_params, *args, **kwargs):
    block statememt

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

func(pos_params, kw1=arg1, kw2=arg2, ...)

Python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹-ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: подставляСт ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆ (*args), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (см. ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»). Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΎΠ½ добавляСт всС лишниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ (**kwargs), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ смоТСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ функция.

Π•ΡΡ‚ΡŒ функция:

def print_mean_sequences(**kwargs):
    def mean(data):
        return sum(data)/float(len(data))
    for k, v in kwargs.items():
        print k, mean(v)

print_mean_sequences(x=[1,2,3], y=[3,3,0])
y 2.0
x 2.0

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π΅ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ (**):

print_mean_sequences(**{'x':[1,2,3], 'y':[3,3,0]})
y 2.0
x 2.0

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π½Π΅ отсортирован.

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

def sum(s,y): return x + y

Если ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π΅, обнаруТатся Π΄Π²Π° скрытых ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с Π΄Π²ΡƒΡ… Π·Π½Π°ΠΊΠΎΠ² Π½ΠΈΠΆΠ½Π΅Π³ΠΎ подчСркивания), срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ __doc__. Он Π½ΡƒΠΆΠ΅Π½ для настройки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ДокумСнтация Π² Python называСтся docstring ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объСдинСна с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

def sum(x, y):
    """ΠŸΠ΅Ρ€Π²Π°Ρ срока - Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ

    Π—Π°Ρ‚Π΅ΠΌ слСдуСт Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ пустая строка ΠΈ тСкст 
    Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
    """
    return x+y

Команда docstring Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ инструкциСй послС объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π•Π΅ ΠΏΠΎΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ:

print(sum.__doc__)
sum.__doc__ += "some additional text"

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, связанныС с ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Если ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ доступныС для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, Ρ‚ΠΎ Π² спискС окаТутся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ (Π² Python всС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ β€” Π΄Π°ΠΆΠ΅ функция):

sum.func_closure   sum.func_defaults  sum.func_doc       sum.func_name
sum.func_code      sum.func_dict      sum.func_globals

И нСсколько скрытых ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ². НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ модуля, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°:

>>> sum.__name__
"sum"
>>> sum.__module
"__main__"

Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅. Π’ΠΎΡ‚ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π»ΠΈΡΡŒ:

sum.__call__          sum.__delattr__       sum.__getattribute__     sum.__setattr__
sum.__class__         sum.__dict__          sum.__globals__       sum.__new__           sum.__sizeof__
sum.__closure__       sum.__hash__          sum.__reduce__        sum.__str__
sum.__code__          sum.__format__        sum.__init__          sum.__reduce_ex__     sum.__subclasshook__
sum.__defaults__      sum.__get__           sum.__repr__

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

РСкурсия β€” это Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Python. Π­Ρ‚ΠΎ общСпринятая ΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° Π² Computer Science, ΠΊΠΎΠ³Π΄Π° функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сама сСбя. Π‘Π°ΠΌΡ‹ΠΉ извСстный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° n! = n * n β€” 1 * n -2 * … 2 *1. Зная, Ρ‡Ρ‚ΠΎ 0! = 1, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

def factorial(n):
    if n != 0:
        return n * factorial(n-1)
    else:
        return 1

Π”Ρ€ΡƒΠ³ΠΎΠΉ распространСнный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ:

f(0) = 1
f(1) = 1
f(n) = f(n-1) + f(n-2)

Π Π΅ΠΊΡƒΡ€ΡΠΈΠ²Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

def fibbonacci(n):
    if n >= 2:
        else:
    return 1

Π’Π°ΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½Π΅ΠΉ Π±Ρ‹Π»ΠΎ Π±Ρ‹Π»Π° конСчная инструкция, ΠΈΠ½Π°Ρ‡Π΅ ΠΎΠ½Π° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ закончится. РСализация вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π²Ρ‹ΡˆΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ являСтся Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ. Если ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ сСбя бСсконСчно. НуТно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

def factorial(n):
    assert n > 0
    if n != 0:
        return n * factorial(n-1)
    else:
        return 1

Π’Π°ΠΆΠ½ΠΎ!
РСкурсия позволяСт ΠΏΠΈΡΠ°Ρ‚ΡŒ простыС ΠΈ элСгантныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ это Π½Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ исполнСния.

Если рСкурсия содСрТит Π±Π°Π³ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, длится бСсконСчно), Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ памяти. Π—Π°Π΄Π°Ρ‚ΡŒ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ рСкурсий ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ модуля sys.

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ пСрСмСнная

Π’ΠΎΡ‚ ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ:

i = 0
def increment():
    global i
    i += 1

Π—Π΄Π΅ΡΡŒ функция ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π½Π° 1 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i. Π­Ρ‚ΠΎ способ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π΅Π· Π½Π΅Π³ΠΎ функция Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ пСрСмСнная i. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово global ΠΌΠΎΠΆΠ½ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π² любом мСстС, Π½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС Π΅Π΅ объявлСния.

Π—Π° Ρ€Π΅Π΄ΠΊΠΈΠΌΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΠΌΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ

Π‘ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ func синтаксис максимально простой:

variable = func

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ·ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ называСтся нСпрямым Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠœΠ΅Π½ΡΡ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ:

def func(x): return x
a1 = func
a1(10)
10
a2 = a1
a2()
10

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ a1, a2 ΠΈ func ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ id. Они ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠ΄Π°. НапримСр, Π΅ΡΡ‚ΡŒ функция sq, которая вычисляСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ значСния:

def sq(x): return x*x

ПозТС Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΎΠ»Π΅Π΅ осмыслСнноС имя. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ β€” просто ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ имя. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ мСстС ΠΊΠΎΠ΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ sq, Ρ‚ΠΎ этот участок Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Π›ΡƒΡ‡ΡˆΠ΅ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:

square = sq

ПослСдний ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, встроСнная функция Π±Ρ‹Π»Π° ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°:

dir = 3

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ Π½Π΅ΠΉ нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ, Π° это ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π½ΡƒΠΆΠ½ΠΎ просто ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:

del dir
dir()

Анонимная функция: лямбда

Лямбда-функция β€” это короткая однострочная функция, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ имя Π΄Π°Π²Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΈΠ΅ выраТСния содСрТат лишь ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ, поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, if, for ΠΈ while ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСльзя. Π˜Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:

product = lambda x,y: x*y

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, здСсь Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово return. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ Ρ‚Π°ΠΊ возвращаСтся.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ type() ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ:

>>> type(product)
function

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ. Π­Ρ‚ΠΎ всСго лишь элСгантный способ записи, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° содСрТит ΠΎΠ΄Π½Ρƒ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ.

power = lambda x=1, y=2: x**y
square = power
square(5.)
25
power = lambda x,y,pow=2: x**pow + y
[power(x,2, 3) for x in [0,1,2]]
[2, 3, 10]

Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

>>> def foo(x=[]):
...     x.append(1)
...     print x
...
>>> foo()
[1]
>>> foo()
[1, 1]
>>> foo()
[1, 1, 1]

ВмСсто этого Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎΒ» ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° измСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

>>> def foo(x=None):
...     if x is None:
. ..         x = []
...     x.append(1)
...     print x
>>> foo()
[1]
>>> foo()
[1]

Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ языка Python

1. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Напомним, Ρ‡Ρ‚ΠΎ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» числа n опрСдСляСтся ΠΊΠ°ΠΊ n! = 1 β‹… 2 β‹… … β‹… n. НапримСр, 5! = 1 β‹… 2 β‹… 3 β‹… 4 β‹… 5 = 120. Ясно, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, воспользовавшись Ρ†ΠΈΠΊΠ»ΠΎΠΌ for. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Ρ€Π°Π·Π½Ρ‹Ρ… чисСл нСсколько Ρ€Π°Π· (ΠΈΠ»ΠΈ Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах ΠΊΠΎΠ΄Π°). ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Copy-Paste Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠΆΠ½ΠΎ.

	
# вычислим 3!
res = 1
for i in range(1, 4):
    res *= i
print(res)

# вычислим 5!
res = 1
for i in range(1, 6):
    res *= i
print(res)

Однако, Ссли ΠΌΡ‹ ΠΎΡˆΠΈΠ±Ρ‘ΠΌΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌ эта ошибка ΠΏΠΎΠΏΠ°Π΄Ρ‘Ρ‚ Π² ΠΊΠΎΠ΄ Π²ΠΎ всС мСста, ΠΊΡƒΠ΄Π° ΠΌΡ‹ скопировали вычислСниС Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. Π”Π° ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΊΠΎΠ΄ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ большС мСста, Ρ‡Π΅ΠΌ ΠΌΠΎΠ³ Π±Ρ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ написания ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ, Π² языках программирования ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Ρ‚Π°ΠΊΠΈΠ΅ участки ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ. Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с функциями sqrt(), len() ΠΈ print(). Они всС ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ ΠΎΠ±Ρ‰ΠΈΠΌ свойством: ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (ноль, ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько), ΠΈ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (хотя ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ). НапримСр, функция sqrt() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΊΠΎΡ€Π΅Π½ΡŒ числа). Ѐункция print() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚.

ПокаТСм, ΠΊΠ°ΠΊ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ factorial(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ β€” число, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» этого числа.

	
def factorial(n):
    res = 1
    for i in range(1, n + 1):
        res *= i
    return res

print(factorial(3))
print(factorial(5))

Π”Π°Π΄ΠΈΠΌ нСсколько объяснСний. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠΎΠ΄ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Π΅Ρ€Π½Π΅Π΅, Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ factorial(). ΠŸΠ΅Ρ€Π²Π°Ρ строчка этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° являСтся описаниСм нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. factorial β€” ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ имя нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ПослС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΠΈΠ΄Π΅Ρ‚ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ наша функция. Бписок состоит ΠΈΠ· пСрСчислСнных Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ нашСм случаС список состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ n. Π’ ΠΊΠΎΠ½Ρ†Π΅ строки ставится Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅.

Π”Π°Π»Π΅Π΅ ΠΈΠ΄Π΅Ρ‚ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½ΠΎΠ΅ Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с отступом. Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вычисляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° числа n ΠΈ ΠΎΠ½ΠΎ сохраняСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ res. Ѐункция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ инструкциСй return res, которая Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ res.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ return ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ мСстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π΅Π΅ исполнСниС Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² мСсто Π²Ρ‹Π·ΠΎΠ²Π°. Если функция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния, Ρ‚ΠΎ инструкция return ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±Π΅Π· Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Π’ функциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния, инструкция return ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. НапишСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ max(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ максимальноС ΠΈΠ· Π½ΠΈΡ… (Π½Π° самом Π΄Π΅Π»Π΅, такая функция ΡƒΠΆΠ΅ встроСна Π² ΠŸΠΈΡ‚ΠΎΠ½).

10
20
def max(a, b):
    if a > b:
        return a
    else:
        return b

print(max(3, 5))
print(max(5, 3))
print(max(int(input()), int(input())))

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ max3(), которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ числа ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ максимальноС ΠΈΡ… Π½ΠΈΡ….

	
def max(a, b):
    if a > b:
        return a
    else:
        return b

def max3(a, b, c):
    return max(max(a, b), c)

print(max3(3, 5, 4))
ВстроСнная функция max() Π² ΠŸΠΈΡ‚ΠΎΠ½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ максимум ΠΈΠ· Π½ΠΈΡ…. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ такая функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ написана.
	
def max(*a):
    res = a[0]
    for val in a[1:]:
        if val > res:
            res = val
    return res

print(max(3, 5, 4))
ВсС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ собСрутся Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ с ΠΈΠΌΠ΅Π½Π΅ΠΌ a, Π½Π° Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π·Π²Ρ‘Π·Π΄ΠΎΡ‡ΠΊΠ° Π² строкС объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

2. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

	
def f():
    print(a)

a = 1
f()

Π—Π΄Π΅ΡΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1, ΠΈ функция f() ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎ объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f эта пСрСмСнная Π½Π΅ инициализируСтся. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f() ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a ΡƒΠΆΠ΅ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, поэтому функция f() ΠΌΠΎΠΆΠ΅Ρ‚ вывСсти Π΅Π³ΠΎ Π½Π° экран.

Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ доступныС Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.

Но Ссли ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ удастся. НапримСр:

	
def f():
    a = 1

f()
print(a)

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ NameError: name 'a' is not defined. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Π­Ρ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ становятся нСдоступными послС Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹ΠΌ получится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

	
def f():
    a = 1
    print(a)

a = 0
f()
print(a)

Π‘ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ числа 1 ΠΈ 0. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a измСнилось Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠΌ! Π­Ρ‚ΠΎ сдСлано Π² цСлях β€œΠ·Π°Ρ‰ΠΈΡ‚Ρ‹β€ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ случайного измСнСния ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли функция Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i, Π° Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ использована пСрСмСнная i Ρ‚Π°ΠΊΠΆΠ΅ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ. Если Π²Ρ‹ Π½Π΅ поняли послСднСС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‚ΠΎ посмотритС Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ Π±Ρ‹ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π», Ссли Π±Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСнялась пСрСмСнная i.

	
def factorial(n):
    res = 1
    for i in range(1, n + 1):
        res *= i
    return res

for i in range(1, 6):
    print(i, '! = ', factorial(i), sep='')
Если Π±Ρ‹ глобальная пСрСмСнная i измСнялась Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΌΡ‹ Π±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ:
5! = 1
5! = 2
5! = 6
5! = 24
5! = 120
Π˜Ρ‚Π°ΠΊ, Ссли Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ модифицируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ пСрСмСнная с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ становится локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΈ Π΅Π΅ модификация Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ измСнСнию глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

Π‘ΠΎΠ»Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ: ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠŸΠΈΡ‚ΠΎΠ½ считаСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ локальной для Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли Π² Π΅Ρ‘ ΠΊΠΎΠ΄Π΅ Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° инструкция, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚ΠΎ эта пСрСмСнная считаСтся локальной ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована Π΄ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡ, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ β€” это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ =, +=, Π° Ρ‚Π°ΠΊΠΆΠ΅ использованиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ†ΠΈΠΊΠ»Π° for. ΠŸΡ€ΠΈ этом Π΄Π°ΠΆΠ΅ Ссли инструкция, ΠΌΠΎΠ΄ΠΈΡ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ это ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚, ΠΈ пСрСмСнная всС Ρ€Π°Π²Π½ΠΎ считаСтся локальной. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

	
def f():
    print(a)
    if False:
        a = 0

a = 1
f()

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка: UnboundLocalError: local variable 'a' referenced before assignment. А ΠΈΠΌΠ΅Π½Π½ΠΎ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f() ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ a становится локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚.ΠΊ. Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ a, ΠΏΡƒΡΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉΡΡ (Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ это ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΡŽ ΠΊ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ функция ΠΌΠΎΠ³Π»Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ глобальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова global:

	
def f():
    global a
    a = 1
    print(a)

a = 0
f()
print(a)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π° экран Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ 1 1, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ пСрСмСнная a объявлСна, ΠΊΠ°ΠΊ глобальная, ΠΈ Π΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ доступна.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π»ΡƒΡ‡ΡˆΠ΅ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ значСния Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если ваша функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΏΡƒΡΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ½Π° Π²Π΅Ρ€Π½Ρ‘Ρ‚ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈ Π²Ρ‹ сами ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ явно присвоитС Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ этим ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ нСзависимыми ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΈ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² Π΄Ρ€ΡƒΠ³ΡƒΡŽ.

НапримСр, ΠΏΡƒΡΡ‚ΡŒ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ числа, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠΎΡ‚ΠΎΠΌ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ f. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это Π½Π΅ стоит Π΄Π΅Π»Π°Ρ‚ΡŒ:

5
def factorial(n):
    global f
    res = 1
    for i in range(2, n + 1):
        res *= i
    f = res

n = int(input())
factorial(n)
# дальшС всякиС дСйствия с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ f

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ написан ΠΏΠ»ΠΎΡ…ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Если Π²Π°ΠΌ Π·Π°Π²Ρ‚Ρ€Π° понадобится Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Β«Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Β», Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ смоТСтС просто ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² Π²Π°ΡˆΡƒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Π’Π°ΠΌ придётся ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ посчитанноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ:

5
# Π½Π°Ρ‡Π°Π»ΠΎ куска ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ
def factorial(n):
    res = 1
    for i in range(2, n + 1):
        res *= i
    return res
# ΠΊΠΎΠ½Π΅Ρ† куска ΠΊΠΎΠ΄Π°

n = int(input())
f = factorial(n)
# дальшС всякиС дСйствия с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ f

Если Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция Π²Π΅Ρ€Π½ΡƒΠ»Π° Π½Π΅ ΠΎΠ΄Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅, Ρ‚ΠΎ для этого функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список ΠΈΠ· Π΄Π²ΡƒΡ… ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

Π’ΠΎΠ³Π΄Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎ мноТСствСнном присваивании:

3.

РСкурсия
def short_story():
    print("Π£ ΠΏΠΎΠΏΠ° Π±Ρ‹Π»Π° собака, ΠΎΠ½ Π΅Π΅ любил.")
    print("Она съСла кусок мяса, ΠΎΠ½ Π΅Π΅ ΡƒΠ±ΠΈΠ»,")
    print("Π’ зСмлю Π·Π°ΠΊΠΎΠΏΠ°Π» ΠΈ надпись написал:")
    short_story()

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π²Ρ‹ΡˆΠ΅, функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Но функция Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ саму сСбя! Рассмотрим это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°. Π₯ΠΎΡ€ΠΎΡˆΠΎ извСстно, Ρ‡Ρ‚ΠΎ 0!=1, 1!=1. А ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ n! для большого n? Если Π±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ (n-1)!, Ρ‚ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΌΡ‹ Π»Π΅Π³ΠΊΠΎ вычислим n!, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ n!=nβ‹…(n-1)!. Но ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ (n-1)!? Если Π±Ρ‹ ΠΌΡ‹ вычислили (n-2)!, Ρ‚ΠΎ ΠΌΡ‹ смоТСм вычисли ΠΈ (n-1)!=(n-1)β‹…(n-2)!. А ΠΊΠ°ΠΊ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ (n-2)!? Если Π±Ρ‹… Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΌΡ‹ Π΄ΠΎΠΉΠ΄Π΅ΠΌ Π΄ΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ 0!, которая Ρ€Π°Π²Π½Π° 1. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, для вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° для мСньшСго числа. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° ΠŸΠΈΡ‚ΠΎΠ½Π΅:

	
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5))

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ΅ΠΌ (Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ самой сСбя) называСтся рСкурсиСй, Π° сама функция называСтся рСкурсивной.

РСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΌΠΎΡ‰Π½Ρ‹ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. К соТалСнию, ΠΎΠ½ΠΈ Π½Π΅ всСгда эффСктивны. Π’Π°ΠΊΠΆΠ΅ часто использованиС рСкурсии ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкам. НаиболСС распространСнная ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΎΡˆΠΈΠ±ΠΎΠΊΒ β€“ бСсконСчная рСкурсия, ΠΊΠΎΠ³Π΄Π° Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΈ продолТаСтся, ΠΏΠΎΠΊΠ° Π½Π΅ кончится свободная ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ бСсконСчной рСкурсии ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² эпиграфС ΠΊ этому Ρ€Π°Π·Π΄Π΅Π»Ρƒ. Π”Π²Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для бСсконСчной рСкурсии:

  1. ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· рСкурсии. НапримСр, Ссли ΠΌΡ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ вычислСния Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° Π·Π°Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ if n == 0, Ρ‚ΠΎ factorial(0) Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ factorial(-1), Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ factorial(-2) ΠΈ Ρ‚. Π΄.
  2. РСкурсивный Π²Ρ‹Π·ΠΎΠ² с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. НапримСр, Ссли функция factorial(n) Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ factorial(n), Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ получится бСсконСчная Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠ°.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΎΡ„ΠΎΡ€ΠΌΠ»ΡΡ‚ΡŒ условия Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ рСкурсии ΠΈ Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ рСкурсия ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ.

Бсылки Π½Π° Π·Π°Π΄Π°Ρ‡ΠΈ доступны Π² мСню слСва. Π­Ρ‚Π°Π»ΠΎΠ½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступны Π½Π° страницС самой Π·Π°Π΄Π°Ρ‡ΠΈ.

Python def function: ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ ΠΊΠΎΠ½Π΅Ρ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?



Π― просто ΠΈΠ·ΡƒΡ‡Π°ΡŽ python ΠΈ Π·Π°ΠΏΡƒΡ‚Ρ‹Π²Π°ΡŽΡΡŒ, ΠΊΠΎΠ³Π΄Π° «def» Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ заканчиваСтся?

Π― Π²ΠΈΠΆΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ:

def myfunc(a=4,b=6):
    sum = a + b
    return sum

myfunc()

Π― знаю, Ρ‡Ρ‚ΠΎ это Π½Π΅ заканчиваСтся ΠΈΠ·-Π·Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° (ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ я Π²ΠΈΠ΄Π΅Π» ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ if… if FOO than return BAR, else return FOOBAR). ΠžΡ‚ΠΊΡƒΠ΄Π° Python Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ это Π½Π΅ рСкурсивная функция, которая сама сСбя Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚? Когда функция запускаСтся, ΠΎΠ½Π° просто ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚? Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ Π±Ρ‹ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ интСрСсным ошибкам.

Бпасибо

python syntax
ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Dan Β  Β  15 октября 2009 Π² 16:32

8 ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²


  • Бписок ΠΏΠΎΡ€Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Def (Python)

    Π£ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ этого задания. Π’ настоящСС врСмя я ΠΈΠ·ΡƒΡ‡Π°ΡŽ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ define (Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, я ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Python). И хотя я знаю, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ define, я Π½Π΅ совсСм понимаю, ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Π― понимаю, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ функция def, Π½ΠΎ ΠΏΠΎΠΏΡ€Π°Π²ΡŒΡ‚Π΅ мСня, Ссли я…

  • Python grammar ΠΊΠΎΠ½Ρ†Π΅ «Π’озвращСния Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ»

    Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Python grammar позволяСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ return ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ я Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ grammar Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ. Π­Ρ‚ΠΎ кусок Python grammar, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт это: single_input: NEWLINE | simple_stmt | compound_stmt NEWLINE…



66

Π’ Python whitespace Π·Π½Π°Ρ‡ΠΈΠΌΠΎ. Ѐункция заканчиваСтся, ΠΊΠΎΠ³Π΄Π° отступ становится мСньшС (мСньшС).

def f():
    pass # first line
    pass # second line
pass # <-- less indentation, not part of function f.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ однострочныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ записаны Π±Π΅Π· отступа, Π½Π° ΠΎΠ΄Π½ΠΎΠΉ строкС:

def f(): pass

И, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π΅ΡΡ‚ΡŒ использованиС Ρ‚ΠΎΡ‡Π΅ΠΊ с запятой, Π½ΠΎ это Π½Π΅ рСкомСндуСтся :

def f(): pass; pass

Π’Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΊΠΎΠ½Π΅Ρ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСтся синтаксичСски . Π§Ρ‚ΠΎ касаСтся сСмантики, Ρ‚ΠΎ Π² Python Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ способа Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return . Π­Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ языкС программирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ.

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ yield . Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ функция являСтся Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. ОбъяснСниС Π΅Π³ΠΎ сСмантики Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Ρ€Π°ΠΌΠΊΠΈ этого ΠΎΡ‚Π²Π΅Ρ‚Π°. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅Ρ‚ Π»ΠΈ ΠΊΡ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΌΠ½Π΅ заявлСниС ΠΎ доходности python?

  • ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ² послСднСС ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅. Если большС Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ послСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ являСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ return , Ρ‚ΠΎ функция сущСствуСт Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ послСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Ρ‹Π» return None . Π’ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· явного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None . Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None :

    def f():
        pass
    

    И этот Ρ‚ΠΎΠΆΠ΅:

    def f():
        42
    

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Stephan202 Β  Β  15 октября 2009 Π² 16:34



35

Python чувствитСлСн ΠΊ Π±Π΅Π»ΠΎΠΌΡƒ пространству Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ отступа. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ отступа возвращаСтся ΠΊ ΡƒΡ€ΠΎΠ²Π½ΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функция, функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ fforw Β  Β  15 октября 2009 Π² 16:34



9

Если Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π±Π»ΠΎΠΊ заканчиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ сталкиваСтся с нСпустой строкой, отступ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ находится Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с Π½Π°Ρ‡Π°Π»ΠΎΠΌ. Π­Ρ‚Π° нСпустая строка Π½Π΅ являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ этого Π±Π»ΠΎΠΊΠ° НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π»ΠΎΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ:

def foo():
    if bar:
        print "bar"

print "baz" # ends the if and foo at the same time

Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ отступа Ρ€Π°Π²Π΅Π½ less-than-or-equal ΠΊΠ°ΠΊ для def, Ρ‚Π°ΠΊ ΠΈ для if, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΡ… ΠΎΠ±Π°.

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π±Π΅Π· утвСрТдСния, нСзависимо ΠΎΡ‚ отступа, Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ значСния

def foo():
    print "The line below has no indentation"

    print "Still part of foo"

Но ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ† Π±Π»ΠΎΠΊΠ°, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ отступ Π½Π° Ρ‚ΠΎΠΌ ΠΆΠ΅ ΡƒΡ€ΠΎΠ²Π½Π΅, Ρ‡Ρ‚ΠΎ ΠΈ любой ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ отступ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ являСтся ошибкой:

def foo():
    print "Still correct"
   print "Error because there is no block at this indentation"

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ссли Π²Ρ‹ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ ΠΊ языку Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, просто сдСлайтС отступ Π² ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ, ΠΈ всС Π±ΡƒΠ΄Π΅Ρ‚ Π² порядкС.

BTW, способ отступа «standard» — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ, Π½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ табуляция, Π½ΠΎ, поТалуйста, Π½Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΈΡ… ΠΎΠ±Π°.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ RichN Β  Β  15 октября 2009 Π² 16:52




4

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ просто Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ тСкст Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ python, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ с пустой строкой. Π­Ρ‚ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚:

def foo(x):
  return x+1
print "last"

хотя это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π·Π°ΠΊΠΎΠ½Π½Ρ‹ΠΉ синтаксис python Π² Ρ„Π°ΠΉΠ»Π΅. Π•ΡΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ синтаксичСскиС различия ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ тСкста Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ GaryO Β  Β  21 ΠΌΠ°Ρ€Ρ‚Π° 2013 Π² 00:54



2

Π±Π΅Π»Ρ‹Π΅ пространства ΠΈΠΌΠ΅ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. ΠΊΠΎΠ³Π΄Π° Π±Π»ΠΎΠΊ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½, это ΠΊΠΎΠ³Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½ΠΎ.

ΠΊΠΎΠ³Π΄Π° функция выполняСтся, ΠΎΠ½Π° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ, ΠΈΠ»ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ встрСтится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return ΠΈΠ»ΠΈ yield . Если функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π½Π΅ встрСчая ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² return ΠΈΠ»ΠΈ yield , Ρ‚ΠΎ нСявно возвращаСтся None .

Π² ΡƒΡ‡Π΅Π±Π½ΠΈΠΊΠ΅ Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ .

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ SilentGhost Β  Β  15 октября 2009 Π² 16:34



1

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это отступ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Как ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π²Π°ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ, ΠΊΠΎΠ³Π΄Π° ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ отступа находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ объявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ def, ваша функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ табуляции ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Python. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ это.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ Mohan Gulati Β  Β  15 октября 2009 Π² 17:56



1

Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ отступы

 def func():
     funcbody
     if cond: 
         ifbody
     outofif

 outof_func 

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ OscarRyz Β  Β  15 октября 2009 Π² 16:35



0

На ΠΌΠΎΠΉ взгляд, Π»ΡƒΡ‡ΡˆΠ΅ явно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Π΅Ρ† Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ

def func():
     # funcbody
     ## end of subroutine func ##

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ какая-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‡Π΅Π½ΡŒ длинная ΠΈ Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‡ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π²Π²Π΅Ρ€Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, для ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½Π° Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Sublime, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ‰Π΅Π»ΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ -> goto Definition, ΠΈ ΠΎΠ½ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ объявлСнию ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ kstn Β  Β  13 дСкабря 2019 Π² 17:50


ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ вопросы:


Python функция ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ функция Python Π±Ρ‹Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? Π‘ΠΊΠ°ΠΆΠΈ: def myfunc(anotherfunc, extraArgs): # run anotherfunc and also pass the values from extraArgs to it pass Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ это Π² основном Π΄Π²Π°…


Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠΎΠ΄Π΅ Python я ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽ UnboundLocalError . Насколько я понимаю, Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ содСрТащСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ здСсь это вряд Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто. Π― ΠΏΡ€ΠΈΠ·Π½Π°ΡŽ, Ρ‡Ρ‚ΠΎ a…


Как я ΠΌΠΎΠ³Ρƒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² подсказках Ρ‚ΠΈΠΏΠ°?

Π― Ρ…ΠΎΡ‡Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсказки Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Python 3.5. Моя функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Как я ΠΌΠΎΠ³Ρƒ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° Π² ΠΌΠΎΠΈΡ… подсказках Ρ‚ΠΈΠΏΠ°? import typing…


Бписок ΠΏΠΎΡ€Ρ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Def (Python)

Π£ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ΠΌ этого задания. Π’ настоящСС врСмя я ΠΈΠ·ΡƒΡ‡Π°ΡŽ использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ define (Π˜Π·Π²ΠΈΠ½ΠΈΡ‚Π΅, я ΠΎΡ‡Π΅Π½ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² Python). И хотя я знаю, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ define, я Π½Π΅ совсСм…


Python grammar ΠΊΠΎΠ½Ρ†Π΅ «Π’озвращСния Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ»

Π― Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ», Ρ‡Ρ‚ΠΎ Python grammar позволяСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ return ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ я Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ понимаю, ΠΏΠΎΡ‡Π΅ΠΌΡƒ? Π― ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ grammar Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π½Π΅ Π±Ρ‹Π»ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ. Π­Ρ‚ΠΎ…


Ѐункция добавлСния элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† связанного списка

Π― Π½ΠΎΠ²ΠΈΡ‡ΠΎΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ python. НСдавно я ΡƒΠ·Π½Π°Π» ΠΎ связанных списках, ΠΈ Ρƒ мСня Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с использованиСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ добавлСния элСмСнта Π² ΠΊΠΎΠ½Π΅Ρ† ΠΌΠΎΠ΅Π³ΠΎ…


Как явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ использованиС значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ python?

МоТно Π»ΠΈ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ? НапримСр, Ссли функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ: def foo(a=1, b=2, c=3): pass Π― Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ. ..


Как ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ return Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ?

Π’ Python ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ return ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ def foo() -> int: some_int = get_some_int() return some_int Как ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ return ΠΏΡ€ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ? НапримСр, ΠΊΠ°ΠΊ…


Python функция ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ def

Π­Ρ‚ΠΎΡ‚ вопрос, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±Ρ‹Π» Π·Π°Π΄Π°Π½ для основ Python, ΠΊ соТалСнию, я ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Ρ†Π΅Π»Ρ‹ΠΉ час Π½Π° поиски ΠΎΡ‚Π²Π΅Ρ‚Π°, Π½ΠΎ Π½Π΅ смог Π΅Π³ΠΎ Π½Π°ΠΉΡ‚ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я надСюсь Π½Π° Ρ‡Π΅ΠΉ-Ρ‚ΠΎ Π²ΠΊΠ»Π°Π΄. Π― ΠΏΡ€ΠΈΠ²Ρ‹ΠΊ ΠΏΠΈΡΠ°Ρ‚ΡŒ класс, Π³Π΄Π΅ я ΠΌΠΎΠ³Ρƒ Π΄Π°Ρ‚ΡŒ…


Ѐункция python def ΠΈ input

Π― ΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ input , Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ это ? function = input(‘Please enter a function example’) def f(x): return function print(f(2)) ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли функция input Ρ€Π°Π²Π½Π° x**2, ΠΎΠ½Π°…

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Python лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ Python ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Java, C# ΠΈ Π΄Π°ΠΆΠ΅ C++, Π² ΠΈΡ… синтаксис Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ языки, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ LISP ΠΈΠ»ΠΈ сСмСйство языков ML, Haskell, OCaml ΠΈ F#, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ лямбда-выраТСния.

Python-лямбды β€” это малСнькиС Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠ΄Ρ‡ΠΈΠ½ΡΡŽΡ‰ΠΈΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ строгому, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΠΌΡƒ синтаксису, Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python.

К ΠΊΠΎΠ½Ρ†Ρƒ этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅:

  • Как появились лямбды Π² Python
  • Как лямбды ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
  • Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
  • КакиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ лямбда-выраТСния
  • Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ: Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠΎΠ΄Π° с использованиСм лямбды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ явно ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠΈΠ΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ стиля Python. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ лямбда-исчислСния ΠΈΠ»ΠΈ для дСмонстрации возмоТностСй лямбд.

Π­Ρ‚ΠΈ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ Π»ΡƒΡ‡ΡˆΠΈΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°ΠΌ ΠΈΠ»ΠΈ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π°ΠΌ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ прохоТдСния ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ВсС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² это руководство, Π±Ρ‹Π»ΠΈ протСстированы Π² Python 3.7.

Лямбда-исчислСниС

Лямбда-выраТСния Π² Python ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования ΠΈΠΌΠ΅ΡŽΡ‚ свои ΠΊΠΎΡ€Π½ΠΈ Π² лямбда-исчислСнии, ΠΌΠΎΠ΄Π΅Π»ΠΈ вычислСний, ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½ΠΎΠΉ Алонзо Π§Π΅Ρ€Ρ‡Π΅ΠΌ (Alonzo Church). Π”Π°Π»Π΅Π΅ ΠΌΡ‹ расскаТСм, ΠΊΠΎΠ³Π΄Π° появилось лямбда-исчислСниС ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ эта Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ концСпция появилась Π² экосистСмС Python.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ

Алонзо Π§Π΅Ρ€Ρ‡ Ρ„ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π» лямбда-исчислСниС, ΠΊΠ°ΠΊ язык, основанный Π½Π° чистой абстракции, Π² 1930-Ρ… Π³ΠΎΠ΄Π°Ρ…. Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ лямбда-абстракциями, прямой ссылкой Π½Π° Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΠΎΠ½Π½ΡƒΡŽ модСль ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ творСния Алонзо Π§Π΅Ρ€Ρ‡.

Π’ лямбда-исчислСниС ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ любоС вычислСниС. Оно являСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ ΠΏΠΎ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Ρƒ, Π½ΠΎ Π²ΠΎΠΏΡ€Π΅ΠΊΠΈ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° ΠΎΠ½ΠΎ являСтся чистым ΠΈ Π½Π΅ сохраняСт Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ состояния.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Π±Π΅Ρ€ΡƒΡ‚ своС Π½Π°Ρ‡Π°Π»ΠΎ Π² матСматичСской Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΈ лямбда-исчислСнии, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ языки программирования ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° состоянии модСль вычислСний, ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½Π½ΡƒΡŽ Аланом Π’ΡŒΡŽΡ€ΠΈΠ½Π³ΠΎΠΌ. Π”Π²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ вычислСний, лямбда-исчислСниС ΠΈ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. Π­Ρ‚Π° ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ извСстна ΠΊΠ°ΠΊ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Π° Π§Ρ‘Ρ€Ρ‡Π°-Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ„ΠΈΠ»ΠΎΡΠΎΡ„ΠΈΡŽ лямбда-исчислСния, примСняя Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ программирования, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ абстракции, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΈ чистоту (Π±Π΅Π· состояния ΠΈ Π±Π΅Π· ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов). ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… языков ΡΠ²Π»ΡΡŽΡ‚ΡΡ Haskell, Lisp ΠΈΠ»ΠΈ Erlang.

Напротив, машина Π’ΡŒΡŽΡ€ΠΈΠ½Π³Π° ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π² Ρ‚Π°ΠΊΠΈΡ… языках, ΠΊΠ°ΠΊ Fortran, C ΠΈΠ»ΠΈ Python.

Π˜ΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ состоит ΠΈΠ· программирования с утвСрТдСниями, шаг Π·Π° шагом ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ…ΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΌΠΈ инструкциями. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ способствуСт ΠΌΡƒΡ‚Π°Ρ†ΠΈΠΈ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ управлСния состояниС.

Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΠ±ΠΎΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°Ρ… ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ языки Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ OCaml, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ°ΡŽΡ‚ Π² ΠΈΠΌΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ сСмСйство языков, Π² частности, с Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Java ΠΈΠ»ΠΈ Python.

Python ΠΏΠΎ своСй сути Π½Π΅ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ языком, Π½ΠΎ Π½Π° Ρ€Π°Π½Π½Π΅ΠΌ этапС ΠΎΠ½ принял Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ. Π’ январС 1994 Π³ΠΎΠ΄Π° ΠΊ языку Π±Ρ‹Π»ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ map(), filter(), reduce() ΠΈ лямбда-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ.

Ѐункция тоТдСства (identity function), функция, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ свой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, выраТаСтся стандартным ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова def ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> def identity(x):
...   return x

identity() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ x ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅.

Если Π²Ρ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ΡΡŒ лямбда-конструкциСй, ваш ΠΊΠΎΠ΄ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ:

>>> lambda x: x

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ·:

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово: lambda
  • Бвязанная пСрСмСнная: x
  • Π’Π΅Π»ΠΎ: Ρ…

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ контСкстС этой ΡΡ‚Π°Ρ‚ΡŒΠΈ связанная пСрСмСнная являСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Напротив, свободная пСрСмСнная Π½Π΅ связана ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π΅Π»Π΅ выраТСния. Бвободная пСрСмСнная ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ константой ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² ΠΏΡ€ΠΈΠ»Π°Π³Π°Π΅ΠΌΠΎΠΉ области дСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НапишСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТный ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая добавляСт 1 ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> lambda x: x + 1

ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ, Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки:

>>> (lambda x: x + 1)(2)
3

Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ β€” это стратСгия лямбда-исчислСния для вычислСния значСния выраТСния. Оно состоит ΠΈΠ· Π·Π°ΠΌΠ΅Π½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° x Π½Π° 2:

(lambda x: x + 1)(2) = lambda 2: 2 + 1
                     = 2 + 1
                     = 3

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ лямбда-функция являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> add_one = lambda x: x + 1
>>> add_one(2)
3

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ лямбда-функция эквивалСнтна написанию этого:

def add_one(x):
    return x + 1

ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ лямбды Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Π²ΠΎΠΊΡ€ΡƒΠ³ Π½ΠΈΡ…. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ с нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°) Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² лямбда-выраТСниях Python, пСрСчисляя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ раздСляя ΠΈΡ… запятой (,), Π½ΠΎ Π½Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки:

>>> full_name = lambda first, last: f'Full name: {first.title()} {last.title()}'
>>> full_name('guido', 'van rossum')
'Full name: Guido Van Rossum'

Лямбда-функция full_name, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ послСдний. Как ΠΈ оТидалось, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ лямбды пСрСчисляСт Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π΅Π· скобок, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ обычная функция Python, с ΠΊΡ€ΡƒΠ³Π»Ρ‹ΠΌΠΈ скобками Π²ΠΎΠΊΡ€ΡƒΠ³ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ взаимозамСняСмо Π² зависимости ΠΎΡ‚ языка программирования:

  • АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • Лямбда-выраТСния
  • Лямбда-абстракции
  • Лямбда-Ρ„ΠΎΡ€ΠΌΠ°
  • Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹

Π’ ΠΎΡΡ‚Π°Π²ΡˆΠ΅ΠΉΡΡ части этой ΡΡ‚Π°Ρ‚ΡŒΠΈ послС этого Ρ€Π°Π·Π΄Π΅Π»Π° Π²Ρ‹ Π² основном ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ лямбда-функция.

Π’ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎΠΌ смыслС, анонимная функция β€” это функция Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ. Π’ Python анонимная функция создаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова lambda. Рассмотрим Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбды, Π½ΠΎ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

>>> lambda x, y: x + y

Π’Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ функция опрСдСляСт лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ… сумму.

Помимо дСмонстрации Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Python ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для этой ΠΈΠ΄Π΅ΠΈ, это Π½ΠΈΠΊΠ°ΠΊ нСльзя практичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Python:

>>> _(1, 2)
3

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ функция ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ транслятора, прСдставлСнная Ρ‡Π΅Ρ€Π΅Π· символ подчСркивания (_).

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Python. РассматривайтС _ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΊΠ°ΠΊ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΉ эффСкт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΡ‹ воспользовались. Π’ ΠΌΠΎΠ΄ΡƒΠ»Π΅ Python Π²Ρ‹ Π±Ρ‹ присваивали лямбда-имя ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π»ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠœΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π²Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ·ΠΆΠ΅ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π’ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ (_) привязано ΠΊ послСднСму вычислСнному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ.

Для получСния Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± использовании этого ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ символа Π² Python, посмотритС Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ подчСркивания Π² Python (The Meaning of Underscores in Python).

Π”Ρ€ΡƒΠ³ΠΎΠΉ шаблон, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ JavaScript, β€” это Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python. Π­Ρ‚ΠΎ называСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (IIFE β€” Β Immediately Invoked Function Expression, произносится Β«iffyΒ»). Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> (lambda x, y: x + y)(2, 3)
5

Π’Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ лямбда-функция опрСдСляСтся, Π° Π·Π°Ρ‚Π΅ΠΌ сразу вызываСтся с двумя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ (2 ΠΈ 3). Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся суммой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² этом руководствС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ этот Ρ„ΠΎΡ€ΠΌΠ°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ аспСкт лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ сосрСдоточСния внимания Π½Π° лямбда-выраТСниях Π² Python ΠΊΠ°ΠΊ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΌ способС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ с функциями Π±ΠΎΠ»Π΅Π΅ высокого порядка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Лямбда-функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π±ΠΎΠ»Π΅Π΅ высокого порядка, принимая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ»ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ) Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

>>> high_ord_func = lambda x, func: x + func(x)
>>> high_ord_func(2, lambda x: x * x)
6
>>> high_ord_func(2, lambda x: x + 3)
7

Python содСрТит Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Π² Π²ΠΈΠ΄Π΅ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка map(), filter(), functools.reduce(), Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ sort(), sorted(), min() ΠΈ max(). ΠœΡ‹ продСмонстрируСм использованиС лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСстС с функциями Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Β«Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ использованиС лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉΒ».

Лямбда ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚Π° Ρ†ΠΈΡ‚Π°Ρ‚Π° ΠΈΠ· часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… вопросов ΠΏΠΎ Python Design and History FAQ, ΠΏΠΎΡ…ΠΎΠΆΠ΅, Π·Π°Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ½ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΠΎΠ±Ρ‰Π΅Π³ΠΎ оТидания использования лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python:

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, лямбды Π² Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ лишь сокращСнной записью, Ссли Π²Ρ‹ слишком Π»Π΅Π½ΠΈΠ²Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. (Source)

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π΅ позволяйтС этому ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΡŽ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ вас ΠΎΡ‚ использования lambda. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ³Π»Π°ΡΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ лямбда-функция β€” это функция с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ синтаксичСским сахаром, ΡΠΎΠΊΡ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ для опрСдСлСния ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… освСщСны ΠΎΠ±Ρ‰ΠΈΠ΅ Ρ‡Π΅Ρ€Ρ‚Ρ‹ ΠΈ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ различия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями Python ΠΈ лямбда-функциями.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒΡΡ вопросом, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°Π΅Ρ‚ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с СдинствСнной строкой return: каТСтся Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ Python Π²ΠΈΠ΄ΠΈΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, созданной с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ lambda.

ΠœΠΎΠ΄ΡƒΠ»ΡŒ dis прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π°Π½Π°Π»ΠΈΠ·Π° Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Python, сгСнСрированного компилятором Python:

>>> import dis
>>> add = lambda x, y: x + y
>>> type(add)
<class 'function'>
>>> dis.dis(add)
  1           0 LOAD_FAST                0 (x)
              2 LOAD_FAST                1 (y)
              4 BINARY_ADD
              6 RETURN_VALUE
>>> add
<function <lambda> at 0x7f30c6ce9ea0>

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ dis() прСдоставляСт Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π° Python, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>> import dis
>>> def add(x, y): return x + y
>>> type(add)
<class 'function'>
>>> dis.dis(add)
  1           0 LOAD_FAST                0 (x)
              2 LOAD_FAST                1 (y)
              4 BINARY_ADD
              6 RETURN_VALUE
>>> add
<function add at 0x7f30c6ce9f28>

Π‘Π°ΠΉΡ‚-ΠΊΠΎΠ΄, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Python, ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² для ΠΎΠ±Π΅ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ отличаСтся: имя добавляСтся для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ def, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ лямбда-функция Python рассматриваСтся ΠΊΠ°ΠΊ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Traceback

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, Ρ‡Ρ‚ΠΎ Π² контСкстС лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python Π½Π΅ прСдоставлял имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ <lambda> . Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ трассировки отобраТаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ:

>>> div_zero = lambda x: x / 0
>>> div_zero(2)
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 1, in <lambda>
ZeroDivisionError: division by zero

Врассировка ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, возникшСго ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ <lambda> .

Π’ΠΎΡ‚ Ρ‚ΠΎ ΠΆΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠ΅ Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>> def div_zero(x): return x / 0
>>> div_zero(2)
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 1, in div_zero
ZeroDivisionError: division by zero

ΠΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Π½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠΉ трассировкС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, div_zero.

Бинтаксис

Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, лямбда ΠΈΠΌΠ΅Π΅Ρ‚ синтаксичСскиС отличия ΠΎΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ частности, лямбда ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ характСристики:

  • Она ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ выраТСния ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² своС Ρ‚Π΅Π»ΠΎ.
  • Она ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° строка исполнСния.
  • Она Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ².
  • Она ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹Π·Π²Π°Π½Π° (IIFE).

ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΉ

Лямбда-функция Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ утвСрТдСния. Π’ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ return, pass, assert ΠΈΠ»ΠΈ raise, Π²Ρ‹Π·ΠΎΠ²ΡƒΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ SyntaxError. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ добавлСния assert ΠΊ Ρ‚Π΅Π»Ρƒ лямбды:

>>> (lambda x: assert x == 2)(2)
  File "<input>", line 1
    (lambda x: assert x == 2)(2)
                    ^
SyntaxError: invalid syntax

Π­Ρ‚ΠΎΡ‚ Π½Π°Π΄ΡƒΠΌΠ°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Ρ‡Ρ‚ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ assert, утвСрТдаСтся Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ x ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2. Но ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Π²Ρ‹Π΄Π°Π΅Ρ‚ SyntaxError ΠΏΡ€ΠΈ синтаксичСском Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ assert Π² Ρ‚Π΅Π»Π΅ лямбда-выраТСния.

ΠžΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, лямбда-функция прСдставляСт собой ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π₯отя Π² Ρ‚Π΅Π»Π΅ лямбды Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° нСсколько строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ скобки ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ строку, ΠΎΠ½ΠΎ остаСтся ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

>>> (lambda x:
... (x % 2 and 'odd' or 'even'))(3)
'odd'

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Β«oddΒ», Ссли лямбда-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ, ΠΈ Β«evenΒ», ΠΊΠΎΠ³Π΄Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Π΅Ρ‚Π½Ρ‹ΠΉ. Он распространяСтся Π½Π° Π΄Π²Π΅ строки, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ содСрТится Π² скобках, Π½ΠΎ остаСтся ΠΎΠ΄Π½ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Аннотации Ρ‚ΠΈΠΏΠΎΠ²

Если Π²Ρ‹ Π½Π°Ρ‡Π°Π»ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступны Π² Python, Ρƒ вас Π΅ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° вСская ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅ΡΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ лямбда-функциям Python. Π’ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ эквивалСнта для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

def full_name(first: str, last: str) -> str:
    return f'{first.title()} {last.title()}'

Π›ΡŽΠ±Π°Ρ ошибка Ρ‚ΠΈΠΏΠ° Π² full_name() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π° Ρ‚Π°ΠΊΠΈΠΌΠΈ инструмСнтами, ΠΊΠ°ΠΊ mypy ΠΈΠ»ΠΈ pyre, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² эквивалСнтной лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ сразу Π±ΡƒΠ΄Π΅Ρ‚ ошибка SyntaxError Π²ΠΎ врСмя выполнСния:

>>> lambda first: str, last: str: first.title() + " " + last.title() -> str
  File "<stdin>", line 1
    lambda first: str, last: str: first.title() + " " + last.title() -> str

SyntaxError: invalid syntax

IIFE

Π’Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ запуска Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>> (lambda x: x * x)(3)
9

Π’Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° эта функция, вСроятно, Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅. Π­Ρ‚ΠΎ прямоС слСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ лямбда-функция вызываСтся сразу послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. Но, это конструкция позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ лямбды Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±ΠΎΠ»Π΅Π΅ высокого порядка, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ map(), filter() ΠΈΠ»ΠΈ functools.reduce().

АргумСнты

Как ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ def, лямбда ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π­Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚:

  • ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
  • Π˜ΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ (ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ)
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (часто Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ varargs)
  • ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΉ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов
  • АргумСнты Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ ΠΎΠΏΡ†ΠΈΠΈ, доступныС для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² лямбда-выраТСния:

>>> (lambda x, y, z: x + y + z)(1, 2, 3)
6
>>> (lambda x, y, z=3: x + y + z)(1, 2)
6
>>> (lambda x, y, z=3: x + y + z)(1, y=2)
6
>>> (lambda *args: sum(args))(1,2,3)
6
>>> (lambda **kwargs: sum(kwargs. values()))(one=1, two=2, three=3)
6
>>> (lambda x, *, y=0, z=0: x + y + z)(1, y=2, z=3)
6

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Ρ‹

Π’ Python Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ β€” это рСализация шаблона, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ классу. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это выраТаСтся синтаксисом @decorator с прСфиксом Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

def some_decorator(f):
    def wraps(*args):
        print(f"Calling function '{f.__name__}'")
        return f(args)
    return wraps

@some_decorator
def decorated_function(x):
    print(f"With argument '{x}'")

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ some_decorator() β€” это функция, которая добавляСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ decorated_function(), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ decorated_function(2) получаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Calling function 'decorated_function'
With argument 'Python'

decorated_function() ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ With argument β€˜Python’, Π½ΠΎ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ Calling function β€˜decorated_function’.

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ лямбдС. Π₯отя Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лямбду с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ синтаксиса @decorator, Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ β€” это просто функция, поэтому ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ лямбда:

 1 # Defining a decorator
 2 def trace(f):
 3     def wrap(*args, **kwargs):
 4         print(f"[TRACE] func: {f.__name__}, args: {args}, kwargs: {kwargs}")
 5         return f(*args, **kwargs)
 6 
 7     return wrap
 8 
 9 # Applying decorator to a function
10 @trace
11 def add_two(x):
12     return x + 2
13 
14 # Calling the decorated function
15 add_two(3)
16 
17 # Applying decorator to a lambda
18 print((trace(lambda x: x ** 2))(3))

add_two(), Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π° @trace Π² строкС 11, вызываСтся с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 3 Π² строкС 15. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ этого, Π² строкС 18 сразу ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ лямбда-функция ΠΈ встраиваСтся Π² Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° trace(), Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€Π°. Когда Π²Ρ‹ выполняСтС ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

[TRACE] func: add_two, args: (3,), kwargs: {}
[TRACE] func: <lambda>, args: (3,), kwargs: {}
9

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, ΠΊΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, имя лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выглядит ΠΊΠ°ΠΊ <lambda>, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ add_two Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ обычная функция.

Π”Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ лямбды Ρ‚Π°ΠΊΠΈΠΌ способом ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для Ρ†Π΅Π»Π΅ΠΉ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ повСдСния лямбды, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² контСкстС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ высокого порядка ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с map():

list(map(trace(lambda x: x*2), range(3)))

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ map() β€” это лямбда, которая ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ свой Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° 2. Π­Ρ‚Π° лямбда Π΄Π΅ΠΊΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½Π° trace(). ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

[TRACE] Calling <lambda> with args (0,) and kwargs {}
[TRACE] Calling <lambda> with args (1,) and kwargs {}
[TRACE] Calling <lambda> with args (2,) and kwargs {}
[0, 2, 4]

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ [0, 2, 4] прСдставляСт собой список, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта range(3). range(3) являСтся простым списком [0, 1, 2].

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅

Π—Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ β€” это функция, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ каТдая свободная пСрСмСнная, ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, привязана ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… области видимости этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ сущности, замыкания ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ срСду, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚, ΠΈ поэтому ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΈΠ· любого мСста. Π‘ΠΎΠ»Π΅Π΅ простоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ замыкания это ΠΊΠΎΠ³Π΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ низшСго порядка ΠΈΠΌΠ΅ΡŽΡ‚ доступ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка.

ΠŸΠΎΠ½ΡΡ‚ΠΈΡ лямбды ΠΈ замыкания Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ связаны, хотя лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ замыканиями Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ замыканиями. НСкоторыС языки ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ конструкции для замыкания ΠΈΠ»ΠΈ лямбды (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Groovy с Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΌ Π±Π»ΠΎΠΊΠΎΠΌ ΠΊΠΎΠ΄Π° Π² качСствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Closure) ΠΈΠ»ΠΈ лямбда-выраТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, лямбда-выраТСния Java с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ для замыкания).

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ замыкания, построСнноС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python:

 1 def outer_func(x):
 2     y = 4
 3     def inner_func(z):
 4         print(f"x = {x}, y = {y}, z = {z}")
 5         return x + y + z
 6     return inner_func
 7 
 8 for i in range(3):
 9     closure = outer_func(i)
10     print(f"closure({i+5}) = {closure(i+5)}")

outer_func() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ inner_func(), Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая вычисляСт сумму Ρ‚Ρ€Π΅Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

  • x пСрСдаСтся Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° outer_func().
  • y являСтся локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ для outer_func().
  • z Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π² inner_func().

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ outer_func() ΠΈ inner_func(), outer_func() вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° Π² Ρ†ΠΈΠΊΠ»Π΅ for, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

x = 0, y = 4, z = 5
closure(5) = 9
x = 1, y = 4, z = 6
closure(6) = 11
x = 2, y = 4, z = 7
closure(7) = 13

Π’ строкС 9 ΠΊΠΎΠ΄Π° inner_func(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ outer_func(), привязываСтся ΠΊ ΠΈΠΌΠ΅Π½ΠΈ замыкания. Π’ строкС 5 inner_func() Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ x ΠΈ y, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ своСй области видимости, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ замыкания ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с двумя свободными ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ x ΠΈ y.

Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ лямбда Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ. Π’ΠΎΡ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Python:

def outer_func(x):
    y = 4
    return lambda z: x + y + z

for i in range(3):
    closure = outer_func(i)
    print(f"closure({i+5}) = {closure(i+5)}")

Когда Π²Ρ‹ выполняСтС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Π²ΠΎΠ΄:

closure(5) = 9
closure(6) = 11
closure(7) = 13

Π’ строкС 6 outer_func() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ лямбду ΠΈ присваиваСт Π΅Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ замыкания. Π’ строкС 3 Ρ‚Π΅Π»ΠΎ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ссылаСтся Π½Π° x ΠΈ y. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ y доступна Π²ΠΎ врСмя опрСдСлСния, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ x опрСдСляСтся Π²ΠΎ врСмя выполнСния, ΠΊΠΎΠ³Π΄Π° вызываСтся outer_func().

Π’ этой ситуации ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ функция, ΠΈ лямбда Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ лямбды ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΠΌΠ°Π½Ρ‡ΠΈΠ²Ρ‹ΠΌ ΠΈΠ·-Π·Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π΅Π³ΠΎ ΠΎΡ†Π΅Π½ΠΊΠΈ (врСмя опрСдСлСния ΠΏΡ€ΠΎΡ‚ΠΈΠ² Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния).

ВрСмя ΠΎΡ†Π΅Π½ΠΊΠΈ

Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ситуациях, связанных с Ρ†ΠΈΠΊΠ»Π°ΠΌΠΈ, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΊΠ°ΠΊ замыкания ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ понимания, ΠΊΠΎΠ³Π΄Π° свободныС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ связаны Π² контСкстС лямбды. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΏΡ€ΠΈ использовании ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Python.

Π‘Π½Π°Ρ‡Π°Π»Π° протСстируСм сцСнарий, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

 1 >>> def wrap(n):
 2 ...     def f():
 3 ...         print(n)
 4 ...     return f
 5 ...
 6 >>> numbers = 'one', 'two', 'three'
 7 >>> funcs = []
 8 >>> for n in numbers:
 9 . ..     funcs.append(wrap(n))
10 ...
11 >>> for f in funcs:
12 ...     f()
13 ...
14 one
15 two
16 three

Π’ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ n вычисляСтся Π²ΠΎ врСмя опрСдСлСния, Π² строкС 9, ΠΊΠΎΠ³Π΄Π° функция добавляСтся Π² список: funcs.append (wrap (n)).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Π»ΠΎΠ³ΠΈΠΊΠΈ с лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, наблюдаСм Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:

 1 >>> numbers = 'one', 'two', 'three'
 2 >>> funcs = []
 3 >>> for n in numbers:
 4 ...     funcs.append(lambda: print(n))
 5 ...
 6 >>> for f in funcs:
 7 ...     f()
 8 ...
 9 three
10 three
11 three

НСоТиданный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ свободная пСрСмСнная n, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π°, связана Π²ΠΎ врСмя выполнСния лямбда-выраТСния. Лямбда-функция Python Π² строкС 4 являСтся Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ n, ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ Π²ΠΎ врСмя выполнСния. Π’ΠΎ врСмя выполнСния ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f ΠΈΠ· строки 7 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n Ρ€Π°Π²Π½ΠΎ three.

Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π²ΠΎ врСмя опрСдСлСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

 1 >>> numbers = 'one', 'two', 'three'
 2 >>> funcs = []
 3 >>> for n in numbers:
 4 ...     funcs.append(lambda n=n: print(n))
 5 ...
 6 >>> for f in funcs:
 7 ...     f()
 8 ...
 9 one
10 two
11 three

Лямбда Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ функция Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, лямбда-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ n ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для внСшнСго n. Лямбда ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹ Π±Ρ‹Ρ‚ΡŒ записана ΠΊΠ°ΠΊ lambda x=n: print(x) ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Лямбда вызываСтся Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² строкС 7 ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ n, установлСнноС Π²ΠΎ врСмя опрСдСлСния.

ВСстированиС Лямбды

Лямбды ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ функциям. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ unittest, Ρ‚Π°ΠΊ ΠΈ doctest.

unittest

ΠœΠΎΠ΄ΡƒΠ»ΡŒ unittest ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ функциям:

import unittest

addtwo = lambda x: x + 2

class LambdaTest(unittest.TestCase):
    def test_add_two(self):
        self.assertEqual(addtwo(2), 4)

    def test_add_two_point_two(self):
        self.assertEqual(addtwo(2.2), 4.2)

    def test_add_three(self):
        # Should fail
        self.assertEqual(addtwo(3), 6)

if __name__ == '__main__':
    unittest. main(verbosity=2)

LambdaTest опрСдСляСт тСстовый ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с трСмя ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ тСстирования, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ сцСнарий тСстирования для addtwo(), Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠ°ΠΊ лямбда-функция. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Python-Ρ„Π°ΠΉΠ»Π° lambda_unittest.py, содСрТащСго LambdaTest, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ:

$ python lambda_unittest.py
test_add_three (__main__.LambdaTest) ... FAIL
test_add_two (__main__.LambdaTest) ... ok
test_add_two_point_two (__main__.LambdaTest) ... ok

======================================================================
FAIL: test_add_three (__main__.LambdaTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "lambda_unittest.py", line 18, in test_add_three
    self. assertEqual(addtwo(3), 6)
AssertionError: 5 != 6

----------------------------------------------------------------------
Ran 3 tests in 0.001s

FAILED (failures=1)

Как ΠΈ оТидалось, Ρƒ нас Π΅ΡΡ‚ΡŒ Π΄Π²Π° ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹Ρ… тСстовых ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΈ ΠΎΠ΄ΠΈΠ½ сбой для test_add_three: Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ 5, Π½ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π²Π΅Π½ 6. Π­Ρ‚ΠΎΡ‚ сбой Π²Ρ‹Π·Π²Π°Π½ ΠΏΡ€Π΅Π΄Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎΠΉ ошибкой Π² тСстовом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. ИзмСнСниС ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° с 6 Π½Π° 5 ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ всС тСсты для LambdaTest.

doctest

ΠœΠΎΠ΄ΡƒΠ»ΡŒ doctest ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Python ΠΈΠ· docstring для выполнСния тСстов. Π₯отя синтаксис лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΡƒΡŽ docstring, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ строку элСмСнту __doc__ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ лямбды:

addtwo = lambda x: x + 2
addtwo. __doc__ = """Add 2 to a number.
    >>> addtwo(2)
    4
    >>> addtwo(2.2)
    4.2
    >>> addtwo(3) # Should fail
    6
    """

if __name__ == '__main__':
    import doctest
    doctest.testmod(verbose=True)

ВСст doctest Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lambda addtwo() описываСт Ρ‚Π΅ ΠΆΠ΅ тСсты, Ρ‡Ρ‚ΠΎ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Когда Π²Ρ‹ выполняСтС тСсты с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ doctest.testmod(), Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

$ python lambda_doctest.py
Trying:
    addtwo(2)
Expecting:
    4
ok
Trying:
    addtwo(2.2)
Expecting:
    4.2
ok
Trying:
    addtwo(3) # Should fail
Expecting:
    6
**********************************************************************
File "lambda_doctest.py", line 16, in __main__.addtwo
Failed example:
    addtwo(3) # Should fail
Expected:
    6
Got:
    5
1 items had no tests:
    __main__
**********************************************************************
1 items had failures:
   1 of   3 in __main__. addtwo
3 tests in 2 items.
2 passed and 1 failed.
***Test Failed*** 1 failures.

НСудачныС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСста ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ сбоя, объяснСнного Π² Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Ρ… тСстов Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ docstring ΠΊ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· присвоСниС __doc__ для докумСнтирования лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π₯отя это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, синтаксис docstring всС ΠΆΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π° Π½Π΅ для лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ЗлоупотрСблСния лямбда-выраТСниями

НСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅, Ссли ΠΎΠ½ΠΈ написаны Π² контСкстС ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Python, Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ злоупотрСблСния.

Если Π²Ρ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, это, вСроятно, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Π°Ρ функция ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ Π»ΡƒΡ‡ΡˆΠ΅. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ являСтся docstring для лямбда-выраТСния Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΡ€Π΅ΠΎΠ΄ΠΎΠ»Π΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ лямбда-функция Python Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, являСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ красным Ρ„Π»Π°Π³ΠΎΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования лямбды, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ. Π’Π°ΠΊΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ситуации, ΠΊΠΎΠ³Π΄Π° Π² контСкстС лямбда-ΠΊΠΎΠ΄Π° Python ΠΊΠΎΠ΄ дСмонстрируСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаблон:

  • Он Π½Π΅ слСдуСт руководству ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ Python (PEP 8)
  • Код выглядит Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ.

Π’ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Python заставит вас Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ Π΄Π²Π°ΠΆΠ΄Ρ‹. Π•ΡΡ‚ΡŒ нСсколько способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ:

>>> def throw(ex): raise ex
>>> (lambda: throw(Exception('Something bad happened')))()
Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 1, in <lambda>
    File "<stdin>", line 1, in throw
Exception: Something bad happened

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π΅ являСтся синтаксичСски ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π² лямбда-Ρ‚Π΅Π»Π΅ Python, ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ состоит Π² абстрагировании Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ throw(). Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования этого Ρ‚ΠΈΠΏΠ° ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ. Если Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с этим Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠΎΠ΄Π°, Π²Π°ΠΌ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π° ΠΊΠΎΠ΄Π° для использования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π°Π³Π°Π΄ΠΎΡ‡Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ

Как ΠΈ Π² Π»ΡŽΠ±Ρ‹Ρ… языках программирования, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с ΠΊΠΎΠ΄ Π½Π° Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·-Π·Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ стиля. Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, благодаря ΠΈΡ… краткости, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ написанию ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ лямбда-ΠΏΡ€ΠΈΠΌΠ΅Ρ€ содСрТит нСсколько Π½Π΅ΡƒΠ΄Π°Ρ‡Π½Ρ‹Ρ… стилСй:

>>> (lambda _: list(map(lambda _: _ // 2, _)))([1,2,3,4,5,6,7,8,9,10])
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]

ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ (_) относится ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π² явном Π²ΠΈΠ΄Π΅. Но Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Ρ€ΠΈ _ относятся ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ. ΠŸΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠΌ этого лямбда-ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСниС ΠΈΠΌΠ΅Π½ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ:

>>> (lambda some_list: list(map(lambda n: n // 2,
                                some_list)))([1,2,3,4,5,6,7,8,9,10])
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]

По ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΡŽ, это всС Π΅Ρ‰Π΅ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ. ВсС Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ лямбду, обычная функция ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этот ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ, распрСдСлив Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΏΠΎ нСскольким строкам ΠΈ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

>>> def div_items(some_list):
      div_by_two = lambda n: n // 2
      return map(div_by_two, some_list)
>>> list(div_items([1,2,3,4,5,6,7,8,9,10])))
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5]

Π­Ρ‚ΠΎ всС Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ для создания ΠΊΠΎΠ΄Π° ΠΈ, Π² частности, лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python, Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ…. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ лямбда-выраТСниям Π²Ρ‹ Π½Π°ΡƒΡ‡ΠΈΡ‚Π΅ΡΡŒ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ map() ΠΈ лямбда-выраТСния Π½Π° списки ΠΈΠ»ΠΈ выраТСния-Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

ΠšΠ»Π°ΡΡΡ‹ Python

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅, Π½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса ΠΊΠ°ΠΊ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ являСтся ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ допустимым ΠΊΠΎΠ΄ΠΎΠΌ Python, Π½ΠΎ дСмонстрируСт Π½Π΅Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, основанный Π½Π° лямбдС. НапримСр, вмСсто Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ __str__ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ лямбду. Аналогично, brand ΠΈ year β€” это свойства, Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вмСсто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ»ΠΈ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠ²:

class Car:
    """Car with methods as lambda functions."""
    def __init__(self, brand, year):
        self.brand = brand
        self. year = year

    brand = property(lambda self: getattr(self, '_brand'),
                     lambda self, value: setattr(self, '_brand', value))

    year = property(lambda self: getattr(self, '_year'),
                    lambda self, value: setattr(self, '_year', value))

    __str__ = lambda self: f'{self.brand} {self.year}'  # 1: error E731

    honk = lambda self: print('Honk!')     # 2: error E731

ΠŸΡ€ΠΈ запускС Ρ‚Π°ΠΊΠΎΠ³ΠΎ инструмСнта, ΠΊΠ°ΠΊ flake8, инструмСнт обСспСчСния соблюдСния стилСй, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ошибки для __str__ ΠΈ honk:

E731 do not assign a lambda expression, use a def

Π₯отя flake8 Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ использования лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² свойствах, ΠΈΡ… Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам ΠΈΠ·-Π·Π° использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ _brand ΠΈ _year.

ΠžΠΆΠΈΠ΄Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ рСализация __str__ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

def __str__(self):
    return f'{self.brand} {self.year}'

brand Π±ΡƒΠ΄Π΅Ρ‚ написана ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

@property
def brand(self):
    return self._brand

@brand.setter
def brand(self, value):
    self._brand = value

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² контСкстС ΠΊΠΎΠ΄Π°, написанного Π½Π° Python, ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ лямбда-выраТСниям. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ случаи, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лямбда-синтаксис, ΠΊΠ°ΠΊ Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ использованиС лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

Лямбды Π² Python, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΎΠΌ споров. НСкоторыС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΡ€ΠΎΡ‚ΠΈΠ² лямбды Π² Python:

  • ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ
  • НалоТСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ
  • ВяТСлый синтаксис с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом lambda

НСсмотря Π½Π° ΠΆΠ°Ρ€ΠΊΠΈΠ΅ Π΄Π΅Π±Π°Ρ‚Ρ‹, ставящиС ΠΏΠΎΠ΄ сомнСниС само сущСствованиС этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python, лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Ρ†Π΅Π½Π½ΠΎΡΡ‚ΡŒ языку Python ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ сцСнарии, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, Π½ΠΎ ΠΈ поощряСтся Π² ΠΊΠΎΠ΄Π΅ Python.

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ конструкции

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рСгулярно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ со встроСнными функциями map() ΠΈ filter(), Π° Ρ‚Π°ΠΊΠΆΠ΅ functools.reduce(), прСдставлСнными Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ functools. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΡΠΌΠΈ использования этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с лямбда-выраТСниями Π² качСствС компаньонов:

>>> list(map(lambda x: x. upper(), ['cat', 'dog', 'cow']))
['CAT', 'DOG', 'COW']
>>> list(filter(lambda x: 'o' in x, ['cat', 'dog', 'cow']))
['dog', 'cow']
>>> from functools import reduce
>>> reduce(lambda acc, x: f'{acc} | {x}', ['cat', 'dog', 'cow'])
'cat | dog | cow'

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ придСтся Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, хотя ΠΈ с Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. По этой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π²Π°ΠΆΠ½ΠΎ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒ эти конструкции. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, эти конструкции ΠΈΠΌΠ΅ΡŽΡ‚ эквивалСнтныС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ Pythonic. Π’ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ лямбдам Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ… лямбды Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅, Π±ΠΎΠ»Π΅Π΅ идиоматичСскиС Ρ„ΠΎΡ€ΠΌΡ‹.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python β€” это Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² качСствС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠšΠ»ΡŽΡ‡ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π­Ρ‚Π° функция Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ влияСт Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, управляСмый самой ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • sort():Β ΠΌΠ΅Ρ‚ΠΎΠ΄ списка
  • sorted(),Β min(),Β max(): встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • nlargest()Β andΒ nsmallest():Β Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΊΡƒΡ‡ΠΈ heapq

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ список ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², прСдставлСнных Π² Π²ΠΈΠ΄Π΅ строк. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ прСдставляСт собой объСдинСниС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° строки ΠΈ числа. ΠŸΡ€ΠΈ сортировкС этого списка с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sorted() ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ лСксикографичСский порядок, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ элСмСнты Π² спискС ΡΠ²Π»ΡΡŽΡ‚ΡΡ строками.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сортировки, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ лямбду ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠ»ΡŽΡ‡Ρƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сортировка использовала число, связанноС с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ:

>>> ids = ['id1', 'id2', 'id30', 'id3', 'id22', 'id100']
>>> print(sorted(ids)) # Lexicographic sort
['id1', 'id2', 'id30', 'id3', 'id22', 'id100']
>>> sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort
>>> print(sorted_ids)
['id1', 'id2', 'id3', 'id22', 'id30', 'id100']

UI Π€Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ

UI Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Tkinter, wxPython ΠΈΠ»ΠΈ . NET Windows Forms с IronPython, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для отобраТСния дСйствий Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° события ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса.

ΠŸΡ€ΠΎΡΡ‚Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Tkinter, прСдставлСнная Π½ΠΈΠΆΠ΅, дСмонстрируСт использованиС лямбды, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ Reverse:

import tkinter as tk
import sys

window = tk.Tk()
window.grid_columnconfigure(0, weight=1)
window.title("Lambda")
window.geometry("300x100")
label = tk.Label(window, text="Lambda Calculus")
label.grid(column=0, row=0)
button = tk.Button(
    window,
    text="Reverse",
    command=lambda: label.configure(text=label.cget("text")[::-1]),
)
button.grid(column=0, row=1)
window.mainloop()

НаТатиС ΠΊΠ½ΠΎΠΏΠΊΠΈ Β«ReverseΒ» запускаСт событиС, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ запускаСт лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, измСняя ΠΌΠ΅Ρ‚ΠΊΡƒ с Lambda Calculus Π½Π° suluclaC adbmaL *:

И wxPython, ΠΈ IronPython ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ лямбда-это ΠΎΠ΄ΠΈΠ½ ΠΈΠ· способов ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий, Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ ΠΊΠΎΠ΄ становится Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½Ρ‹ΠΌ ΠΈ ΠΌΠ΅Π½Π΅Π΅ многословным ΠΏΡ€ΠΈ использовании лямбды, ΠΊΠΎΠ³Π΄Π° объСм Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π».

Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€ΠΈΡ‚Π°Ρ‚ΠΎΡ€ Python

Когда Π²Ρ‹ ΠΈΠ³Ρ€Π°Π΅Ρ‚Π΅ с ΠΊΠΎΠ΄ΠΎΠΌ Python Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅, лямбда часто ΡΠ²Π»ΡΡŽΡ‚ΡΡ благословСниСм. Π›Π΅Π³ΠΊΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π±Ρ‹ΡΡ‚Ρ€ΡƒΡŽ ΠΎΠ΄Π½ΠΎΡΡ‚Ρ€ΠΎΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для изучСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ увидят свСт Π²Π½Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°. Лямбды, написанныС Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€ΠΈΡ‚Π°Ρ‚ΠΎΡ€Π΅, Ρ€Π°Π΄ΠΈ быстрого запуска, ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° ΠΌΠ°ΠΊΡƒΠ»Π°Ρ‚ΡƒΡ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ послС использования.

timeit

Π’ Ρ‚ΠΎΠΌ ΠΆΠ΅ Π΄ΡƒΡ…Π΅, Ρ‡Ρ‚ΠΎ ΠΈ экспСримСнты Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Python, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ timeit прСдоставляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для измСрСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π°. Π’ частности, timeit.timeit() ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, пСрСдавая Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΊΠΎΠ΄ Python Π² строку. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> from timeit import timeit
>>> timeit("factorial(999)", "from math import factorial", number=10)
0. 0013087529951008037

Когда инструкция пСрСдаСтся Π² Π²ΠΈΠ΄Π΅ строки, timeit() Π½ΡƒΠΆΠ΅Π½ ΠΏΠΎΠ»Π½Ρ‹ΠΉ контСкст. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это обСспСчиваСтся Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ устанавливаСт срСду, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для синхронизации. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NameError.

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбду:

>>> from math import factorial
>>> timeit(lambda: factorial(999), number=10)
0.0012704220062005334

Π­Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Ρ‡ΠΈΡ‰Π΅, Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎ ΠΈ быстрСС вводится Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅.

Monkey Patching

Для тСстирования ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° повторяСмыС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π΄Π°ΠΆΠ΅ Ссли Π²ΠΎ врСмя Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, ΠΊΠ°ΠΊ оТидаСтся, Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ случайными.

Допустим, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎ врСмя выполнСния ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ случайныС значСния. Но Π²ΠΎ врСмя выполнСния тСста Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒ прСдсказуСмыС значСния. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΊΠ°ΠΊ лямбда monkey patching ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ:

from contextlib import contextmanager
import secrets

def gen_token():
    """Generate a random token."""
    return f'TOKEN_{secrets.token_hex(8)}'

@contextmanager
def mock_token():
    """Context manager to monkey patch the secrets.token_hex
    function during testing.
    """
    default_token_hex = secrets.token_hex
    secrets.token_hex = lambda _: 'feedfacecafebeef'
    yield
    secrets.token_hex = default_token_hex

def test_gen_key():
    """Test the random token."""
    with mock_token():
        assert gen_token() == f"TOKEN_{'feedfacecafebeef'}"

test_gen_key()

ДиспСтчСр контСкста ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ monkey patching Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ secrets). Лямбда назначСнная для secrets.token_hex (), замСняСт ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, возвращая статичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

Π­Ρ‚ΠΎ позволяСт Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² зависимости ΠΎΡ‚ token_hex() прСдсказуСмым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· диспСтчСра контСкста ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ token_hex() ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ восстанавливаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ области тСстирования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ повСдСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ token_hex().

Π‘Ρ€Π΅Π΄Ρ‹ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΠ³ΠΎ тСстирования, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ unittest ΠΈ pytest, ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡŽΡ‚ эту ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ Π½Π° Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ слоТности.

Π‘ pytest, всС Π΅Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ становится Π±ΠΎΠ»Π΅Π΅ элСгантным ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ:

import secrets

def gen_token():
    return f'TOKEN_{secrets. token_hex(8)}'

def test_gen_key(monkeypatch):
    monkeypatch.setattr('secrets.token_hex', lambda _: 'feedfacecafebeef')
    assert gen_token() == f"TOKEN_{'feedfacecafebeef'}"

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pytest secretts.token_hex() пСрСзаписываСтся лямбда-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ feedfacecafebeef, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ тСста. monkeypatch позволяСт Π²Π°ΠΌ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ пСрСопрСдСлСния. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ secretts.token_hex() Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… тСстах Π±Π΅Π· использования monkey patching Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ обычная рСализация этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ тСста pytest Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

$ pytest test_token.py -v
============================= test session starts ==============================
platform linux -- Python 3. 7.2, pytest-4.3.0, py-1.8.0, pluggy-0.9.0
cachedir: .pytest_cache
rootdir: /home/andre/AB/tools/bpython, inifile:
collected 1 item

test_token.py::test_gen_key PASSED                                       [100%]

=========================== 1 passed in 0.01 seconds ===========================

ВСст ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ провСряСм, Ρ‡Ρ‚ΠΎ gen_token() Π±Ρ‹Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±Ρ‹Π»ΠΈ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² контСкстС тСста.

ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ лямбдам

Π₯отя ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ вСскиС ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ для использования лямбды, Π΅ΡΡ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° Π΅Π΅ использованиС Π½Π΅ одобряСтся. Π’Π°ΠΊ ΠΊΠ°ΠΊΠΎΠ²Ρ‹ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹?

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ высокого порядка, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ map(), filter() ΠΈ functools.reduce(), ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Π±ΠΎΠ»Π΅Π΅ элСгантныС Ρ„ΠΎΡ€ΠΌΡ‹ с нСбольшими измСнСниями, Π² частности, со списком ΠΈΠ»ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Map

ВстроСнная функция map() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ примСняСт Π΅Π΅ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов своСго Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… элСмСнтов ΡΠ²Π»ΡΡŽΡ‚ΡΡ строки, списки ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ.

map() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. НапримСр, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ список строк Π² Π½ΠΎΠ²Ρ‹ΠΉ список с Π·Π°Π³Π»Π°Π²Π½Ρ‹ΠΌΠΈ Π±ΡƒΠΊΠ²Π°ΠΌΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ map() ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> list(map(lambda x: x.capitalize(), ['cat', 'dog', 'cow']))
['Cat', 'Dog', 'Cow']

Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ list() для прСобразования ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ map(), Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Python.

ИспользованиС Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ опрСдСлСния ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

>>> [x. capitalize() for x in ['cat', 'dog', 'cow']]
['Cat', 'Dog', 'Cow']

Filter

ВстроСнная функция filter(), Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° классичСская Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ конструкция, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π° Π² прСдставлСниС списка. Она ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ список Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Она создаСт ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, содСрТащий всС элСмСнты Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΠΈΠΊΠ°Ρ‚Π°. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ всС Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ числа Π² Π΄Π°Π½Π½ΠΎΠΌ спискС Ρ†Π΅Π»Ρ‹Ρ… чисСл:

>>> even = lambda x: x%2 == 0
>>> list(filter(even, range(11)))
[0, 2, 4, 6, 8, 10]

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ filter() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ list, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт список с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

РСализация, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° списка, Π΄Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

>>> [x for x in range(11) if x%2 == 0]
[0, 2, 4, 6, 8, 10]

Reduce

Начиная с Python 3, Reduce() прСвратился ΠΈΠ· встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ модуля functools. Π§Ρ‚ΠΎ касаСтся map() ΠΈ filter(), Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ соотвСтствСнно Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΈ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ списком. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π² качСствС Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ аккумулятора. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ элСмСнта reduce() примСняСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ возвращаСтся, ΠΊΠΎΠ³Π΄Π° итСрация исчСрпана.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ reduce() ΠΊ списку ΠΏΠ°Ρ€ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ сумму ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

>>> import functools
>>> pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
>>> functools. reduce(lambda acc, pair: acc + pair[0], pairs, 0)
6

Π‘ΠΎΠ»Π΅Π΅ идиоматичСский ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для sum() Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

>>> pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
>>> sum(x[0] for x in pairs)
6

НСмного Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ чистоС Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ устраняСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ явного доступа ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту ΠΏΠ°Ρ€Ρ‹ ΠΈ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ распаковку:

>>> pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
>>> sum(x for x, _ in pairs)
6

ИспользованиС символа подчСркивания (_) являСтся соглашСниСм Python, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Ρ‹.

sum() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, поэтому Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π² скобках.

Лямбда β€” это ΠΏΠΈΡ‚ΠΎΠ½ ΠΈΠ»ΠΈ Π½Π΅Ρ‚?

PEP 8, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся руководством ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ для ΠΊΠΎΠ΄Π° Python, гласит:

ВсСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ def вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ связываСт лямбду нСпосрСдствСнно с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ. (Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ)

Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбду, ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ ΠΊ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ, Π² основном Ρ‚Π°ΠΌ, Π³Π΄Π΅ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. PEP 8 Π½Π΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы использования лямбды. Как Π²Ρ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, лямбды, бСзусловно, ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΉΡ‚ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, хотя ΠΎΠ½ΠΈ ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ способ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π½Π° этот вопрос Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ лямбда ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Pythonic, Ссли Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ доступного Pythonic. Π― Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Β«PythonicΒ», оставив вас с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСго ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡ, Π° Ρ‚Π°ΠΊΠΆΠ΅ для вашСго Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ стиля ΠΈΠ»ΠΈ стиля кодирования вашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбды Π² Python ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅:

  • ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ лямбду ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  • ΠœΡƒΠ΄Ρ€ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ лямбдами ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ функциями
  • Π˜Π·Π±Π΅Π³Π°Ρ‚ΡŒ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ использования лямбд
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбды с функциями Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ функциями Python

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΠΊΠ»ΠΎΠ½Π½ΠΎΡΡ‚ΡŒ ΠΊ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅Π»ΠΈΡ‚ΡŒΡΡ, исслСдуя ΡƒΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΈΡ€ лямбда-исчислСния (lambda calculus).

Python лямбды ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ соли. Π©Π΅ΠΏΠΎΡ‚ΠΊΠ° соли ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ вкус, Π½ΠΎ слишком ΠΌΠ½ΠΎΠ³ΠΎ испортит блюдо.

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ ΡΡ‚Π°Ρ‚ΡŒΡ: Β Andre BurgaudΒ  How to Use Python lambda Functions

Π‘Ρ‹Π»Π° Π»ΠΈ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Π° эта ΡΡ‚Π°Ρ‚ΡŒΡ?

[15 / 4.7]

Python-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (def): ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция Π² Python?

Π’ Python функция — это Π³Ρ€ΡƒΠΏΠΏΠ° связанных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ части. По ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° становится всС большС ΠΈ большС, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ Π΅Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ управляСмой.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ повторСния ΠΈ позволяСт ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄.

Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

def имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹):
"" "строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ" ""
выписка (Π°) 

Π’Ρ‹ΡˆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

  1. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  2. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ИмСнованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ слСдуСт Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ написания ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² Python.
  3. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹), Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Они Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
  4. Π”Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ (:) для обозначСния ΠΊΠΎΠ½Ρ†Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  5. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (docstring), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π°Ρ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция.
  6. Один ΠΈΠ»ΠΈ нСсколько допустимых ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ЗаявлСния Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ отступа (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π°).
  7. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ return ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° значСния ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

  def greet (имя):
    "" "
    Π­Ρ‚Π° функция привСтствуСт
    Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΊΠ°ΠΊ
    ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
    "" "
    print (Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚,Β» + имя + Β«. Π”ΠΎΠ±Ρ€ΠΎΠ΅ ΡƒΡ‚Ρ€ΠΎ!Β»)  

Как Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python?

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π΅ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки Python.Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ просто Π½Π°Π±ΠΈΡ€Π°Π΅ΠΌ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

  >>> ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ('ПавСл')
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Пол. Π”ΠΎΠ±Ρ€ΠΎΠ΅ ΡƒΡ‚Ρ€ΠΎ!  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Python с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

  def greet (имя):
    "" "
    Π­Ρ‚Π° функция привСтствуСт
    Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΊΠ°ΠΊ
    ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
    "" "
    print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚," + имя + ".  Π”ΠΎΠ±Ρ€ΠΎΠ΅ ΡƒΡ‚Ρ€ΠΎ!")

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ('Пол')  

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

ΠŸΠ΅Ρ€Π²Π°Ρ строка послС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ называСтся строкой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ являСтся сокращСниСм ΠΎΡ‚ строки Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.Он ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для объяснСния Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция.

Π₯отя докумСнтация Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ, это Ρ…ΠΎΡ€ΠΎΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° программирования. Если Π²Ρ‹ Π½Π΅ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΅Π»ΠΈ Π½Π° ΡƒΠΆΠΈΠ½ Π½Π° ΠΏΡ€ΠΎΡˆΠ»ΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅, всСгда Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ свой ΠΊΠΎΠ΄.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρƒ нас Π΅ΡΡ‚ΡŒ строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ нСпосрСдствСнно ΠΏΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠ³Π»Π° Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ нСсколько строк. Π­Ρ‚Π° строка доступна Π½Π°ΠΌ ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ __doc__ .

НапримСр :

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

  >>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΏΡ€ΠΈΠ²Π΅Ρ‚ .__ doc__)

    Π­Ρ‚Π° функция привСтствуСт
    Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠΏΡ€ΠΎΡˆΠ΅Π» ΠΊΠ°ΠΊ
    ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€  

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ большС ΠΎ строках Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π² Python, посСтитС Python Docstrings.


ΠžΡ‚Ρ‡Π΅Ρ‚ ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π΅

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π² Ρ‚ΠΎ мСсто, ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΎΠ½Π° Π±Ρ‹Π»Π° Π²Ρ‹Π·Π²Π°Π½Π°.

Бинтаксис Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ [список_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ] 

Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ вычисляСтся ΠΈ возвращаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.Если Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π½Π΅Ρ‚ выраТСния ΠΈΠ»ΠΈ самого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° return Π½Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ функция Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ None .

НапримСр:

  >>> print (ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (Β«ΠΌΠ°ΠΉΒ»))
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠ°ΠΉ. Π”ΠΎΠ±Ρ€ΠΎΠ΅ ΡƒΡ‚Ρ€ΠΎ!
НСт  

Π—Π΄Π΅ΡΡŒ НСт — это Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ greet () Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ имя, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

  def absolute_value (число):
    "" "Π­Ρ‚Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅
    Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ числа "" "

    Ссли число> = 0:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€
    Π΅Ρ‰Π΅:
        return -num


ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (2))

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅_Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (-4))  

Π’Ρ‹Ρ…ΠΎΠ΄

  2
4  

Как функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Python?

Π Π°Π±ΠΎΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python

ОбъСм ΠΈ врСмя ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…

ΠžΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ — это Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ пСрСмСнная распознаСтся. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ снаруТи Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΡ…Π²Π°Ρ‚.

ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ — это ΠΏΠ΅Ρ€ΠΈΠΎΠ΄, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ пСрСмСнная находится Π² памяти. ВрСмя ΠΆΠΈΠ·Π½ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° функция выполняСтся.

Они ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ возвращаСмся ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, функция Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ· своих ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ².

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ дСйствия ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  def my_func ():
Ρ… = 10
print ("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:", x)

Ρ… = 20
my_func ()
print ("Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:", x)  

Π’Ρ‹Ρ…ΠΎΠ΄

  Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: 10
Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: 20  

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ 20. Π”Π°ΠΆΠ΅ нСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ функция my_func () ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x Π½Π° 10, это Π½Π΅ повлияло Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ пСрСмСнная x Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ отличаСтся (локальная для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ снаруТи.Π₯отя Ρƒ Π½ΠΈΡ… ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, это Π΄Π²Π΅ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ€Π°Π·Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ дСйствия.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΈΠ΄Π½Ρ‹ ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ. Π£ Π½ΠΈΡ… Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ°Ρ….

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ эти значСния ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡ… ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ (Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ). Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова global .


Π’ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π²Π° Ρ‚ΠΈΠΏΠ°:

  1. ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, встроСнныС Π² Python.
  2. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, опрСдСляСмыС самими ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ.

Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ Python: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Π³Π»Π°Π²Π°: МСлкоС ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π°: РСкурсия ΠΈ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Бинтаксис

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это конструкция для структурирования ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Они извСстны Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ языки, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°ΠΌΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для использования ΠΊΠΎΠ΄Π° Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.ЕдинствСнный способ Π±Π΅Π· Ѐункция ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°.

Ѐункция Π² Python опрСдСляСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ def. ΠžΠ±Ρ‰ΠΈΠΉ синтаксис выглядит ΠΊΠ°ΠΊ это:

def имя-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²):
    ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, Ρ‚.Π΅. Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
 
Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ссли функция вызываСтся. Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ состоит ΠΈΠ· заявлСния. Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠ»ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ. ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ (ноль ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

Π’Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π΅Π»ΠΎ. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Β«Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚Β» Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ Π·Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом return, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ. Если Π² ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°, функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡ‚ΠΎΠΊ управлСния достигаСт ΠΊΠΎΠ½Ρ†Π° Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

>>> def add (x, y):
... "" "Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ x плюс y" ""
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x + y
...
>>>
 
Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΌ сСансС функция, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ:
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (4,5)
9
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (8,3)
11
>>>
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ

>>> def add (x, y = 5):
... "" "Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒ x плюс y, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ" ""
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x + y
...
>>>
 
Π’Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (4)
9
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (8,3)
11
>>>
 

Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдставляСт собой строку, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ function_name.__doc__
Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ называСтся Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° .
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

>>> execfile ("function1.py")
>>> Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ .__ doc__
'Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ x плюс y'
>>> add2 .__ doc__
'Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ x плюс y, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ'
>>>
 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова

ИспользованиС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова — это Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ способ выполнСния Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ мСняСтся.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

def sumsub (a, b, c = 0, d = 0):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a - b + c - d
 
ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² качСствС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
>>> execfile ("funktion1.py")
>>> sumsub (12,4)
8
>>> sumsub (12,4,27,23)
12
>>> sumsub (12,4, d = 27, c = 23)
4
 

ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ сущСствуСт мноТСство ситуаций, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ количСство Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π°ΠΏΡ€ΠΈΠΎΡ€ΠΈ. ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ выполняСтся Π½Π° Python с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ссылками Π½Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ. Π—Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° «*» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ послСднСго ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ссылку Π½Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.Π­Ρ‚Ρƒ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ Π½Π΅ слСдуСт ΠΏΡƒΡ‚Π°Ρ‚ΡŒ с синтаксисом C, Π³Π΄Π΅ эта нотация связана с указатСлями.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

def ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ (x, y, * ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅):
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ "x =", x, ", y =", y
    Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Β«ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ:Β», ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅
 
x ΠΈ y — ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. * большС ссылка Π½Π° ΠΊΠΎΡ€Ρ‚Π΅ΠΆ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€:
>>> execfile ("funktion1.py")
>>> ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ (3,4)
Ρ… = 3, Ρ… = 4
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ:  ()
>>> ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ (3,4, Β«Hello WorldΒ», 3, 4)
Ρ… = 3, Ρ… = 4
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ: ('Hello World', 3, 4)
 
ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ Π³Π»Π°Π²Π°: МСлкоС ΠΈ Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π³Π»Π°Π²Π°: РСкурсивныС ΠΈ рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

5.Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Π½Π°Ρ‡Π°Π»ΠΎ программирования Π½Π° Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ… Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²

ЧСловСчСскиС сущСства вСсьма ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ Π² своих способностях ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ части информация Π² ΠΈΡ… Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ памяти. ИсслСдования ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ для для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° людСй количСство нСсвязанных кусков составляСт ΠΎΠΊΠΎΠ»ΠΎ сСми. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π±Π΅Π· Ρ‚Ρ€ΡƒΠ΄Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ тысячами ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… кусочки ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ забывая ΠΈΡ… ΠΈ Π½Π΅ запутывая.

Π§Ρ‚ΠΎΠ±Ρ‹ люди (программисты) ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ слоТныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ тысячи строк ΠΊΠΎΠ΄Π°, языки программирования ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ программистам ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ возмоТности abstracton для присвоСния ΠΈΠΌΠ΅Π½ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ инструкции, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π½Π΅ учитывая подробности инструкций, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ относятся.

Π’ этой Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ΄Π½Π° ΠΈΠ· ВозмоТности языка Python, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°ΠΊΡƒΡŽ β€‹β€‹Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ†ΠΈΡŽ.

5.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ использованиС

Π’ контСкстС программирования функция — это имСнованная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ ΠΆΠ΅Π»Π°Π΅ΠΌΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎΡ‚ опСрация ΡƒΠΊΠ°Π·Π°Π½Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ . Π’ Python синтаксис для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 def ΠΠΠ—Π’ΠΠΠ˜Π• (БПИБОК ΠŸΠΠ ΠΠœΠ•Π’Π ΠžΠ’):
    Π—ΠΠ―Π’Π›Π•ΠΠ˜Π―
 

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° для создаваСмых Π²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΡ€ΠΎΠΌΠ΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Python.Π’ спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ссли таковая имССтся, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ любоС количСство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ отступ ΠΎΡ‚ def .

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ — это составныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ , ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ†ΠΈΠΊΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² условных выраТСниях ΠΈ Ρ†ΠΈΠΊΠ»Π°Ρ… Π³Π»Π°Π²Ρ‹, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ состоят ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… частСй:

  1. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈ заканчиваСтся Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ.

  2. Π’Π΅Π»ΠΎ , состоящСС ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ с отступом Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство ( 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π° — стандарт Python ) ΠΈΠ· ​​заголовка.

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ — def , Ρ‚.Π΅. Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки. Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым ΠΈΠ»ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ количСство ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Π’ любом случаС ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹.

5.2. ΠžΡΠ½ΠΎΠ²Ρ‹Π²Π°ΡΡΡŒ Π½Π° Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ Π² ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ школС ΠΏΠΎ Π°Π»Π³Π΅Π±Ρ€Π΅

Π•Ρ‰Π΅ Π² ΡΡ‚Π°Ρ€ΡˆΠ΅ΠΉ школС Π² классС ΠΠ»ΡŒΠ³Π΅Π±Π΅Ρ€Ρ‹ Π²Ρ‹ познакомились с ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ схСму Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹Β», которая выглядСло ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

ИдСя этой Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ функция ΠΏΠΎΠ΄ΠΎΠ±Π½Π° машинС , которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄, x , ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² Π²Ρ‹Ρ…ΠΎΠ΄, f (x) . Π‘Π²Π΅Ρ‚ ΠΆΠ΅Π»Ρ‚Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ f — это абстракция процСсса, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для прСобразования ΠΎΡ‚ x Π΄ΠΎ f (x) .

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΈ сходство с функциями ΠΈΠ· Π°Π»Π³Π΅Π±Ρ€Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΡ….

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ квадратичная функция — это ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ΠΎΡ‚ такая ΠΆΠ΅ функция Π² Python:

 def f (x):
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 3 * x ** 2 - 2 * x + 5
 

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ функция Π½Π΅ запускаСтся. Для этого Π½Π°ΠΌ понадобится Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ . Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ содСрТит имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ выполняСтся, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт список Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ΠΎΡ‚ наша функция f , вызываСмая с нСсколькими Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ:

 >>> f (3)
26
>>> f (0)
5
>>> f (1)
6
>>> f (-1)
10
>>> f (5)
70
 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ сначала Π±Ρ‹Ρ‚ΡŒ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ:

 >>> def f (x):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 3 * x ** 2 - 2 * x + 5
...
>>>
 

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ нСявноС присвоСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ

Бвязь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это нСявноС присвоСниС . Π­Ρ‚ΠΎ ΠΊΠ°ΠΊ Ссли Π±Ρ‹ ΠΌΡ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присваивания x = 3 , x = 0 , x = 1 , x = -1 ΠΈ x = 5 соотвСтствСнно ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° f Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

5.3.

Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ выписка

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ функция для Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ прСкращСния выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ (ΠΈΠ»ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² заявлСниС ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅.

 >>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = f (3)
>>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
26
>>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = f (3) + f (-1)
>>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
36
 

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π±Π΅Π· значСния послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ всС Π΅Ρ‰Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅:

 >>> def mystery ():
...    Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ
...
>>> what_is_it = Ρ‚Π°ΠΉΠ½Π° ()
>>> what_is_it
>>> Ρ‚ΠΈΠΏ (what_is_it)
<класс 'NoneType'>
>>> print (what_is_it)
Никто
 

None являСтся СдинствСнным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Python NoneType . ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ это часто ΠΏΠΎΠ·ΠΆΠ΅ для прСдставлСния нСизвСстного ΠΈΠ»ΠΈ Π½Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ значСния. А ΠΏΠΎΠΊΠ° Ρ‚Π΅Π±Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвращаСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ return Π±Π΅Π· АргумСнт.

ВсС Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Если Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² своСм Ρ‚Π΅Π»Π΅ Π±Π΅Π· наТатия return , a НСт Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ возвращаСтся ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

 >>> def do_nothing_useful (n, m):
... Ρ… = ΠΏ + ΠΌ
... y = n - m
...
>>> do_nothing_useful (5, 3)
>>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = do_nothing_useful (5, 3)
>>> Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
>>>
>>> print (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚)
Никто
 

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ do_nothing_useful Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΎΠ½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ None , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ присваиваСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ . НСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ΅ Python, Ссли ΠΎΠ½ΠΈ явно Π½Π΅ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½Ρ‹.

Π›ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ послС return ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ ΠΈ ΡƒΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄.

 >>> def try_to_print_dead_code ():
... print ("Π­Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ...")
... print ("... ΠΈ это Π±ΡƒΠ΄Π΅Ρ‚.")
...    Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ
... print ("Но Π½Π΅ это ...")
... print ("ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ это ΠΌΠ΅Ρ€Ρ‚Π²Ρ‹ΠΉ ΠΊΠΎΠ΄!")
...
>>> try_to_print_dead_code ()
Π­Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ ...
... ΠΈ Ρ‚Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚.
>>>
 

5.4. ΠŸΠΎΡ‚ΠΎΠΊ исполнСния

Π§Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ использованиСм, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π½Π°Ρ‚ΡŒ порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся ΠΏΠΎΡ‚ΠΎΠΊ исполнСния.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ всСгда начинаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ЗаявлСния выполняСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ, Π² порядкС свСрху Π²Π½ΠΈΠ·.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° функция вызываСтся.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΎΠ±Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ Π² процСссС выполнСния. ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ΄Ρ‚ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΏΠΎΡ‚ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, выполняСт всС инструкции Ρ‚Π°ΠΌ, Π° Π·Π°Ρ‚Π΅ΠΌ возвращаСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ.

Π—Π²ΡƒΡ‡ΠΈΡ‚ достаточно просто, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ вспомнитС, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½. ΠΠ°Ρ…ΠΎΠ΄ΡΡΡŒ Π² сСрСдинС ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Но ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этой Π½ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ!

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Python ΡƒΠΌΠ΅Π΅Ρ‚ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π³Π΄Π΅ ΠΎΠ½ находится, поэтому ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· функция Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ‚ΠΎΠ³ΠΎ мСста, Π³Π΄Π΅ ΠΎΠ½Π° ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»Π°ΡΡŒ, Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½Π°Π·Π²Π°Π» это. Когда Π΄ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ.

Π’ Ρ‡Π΅ΠΌ ΠΌΠΎΡ€Π°Π»ΡŒ этой грязной сказки? Когда Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½Π΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ просто свСрху Π²Π½ΠΈΠ·. ВмСсто этого слСдуСт Π·Π° ΠΏΠΎΡ‚ΠΎΠΊΠΎΠΌ выполнСния . ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈ Π½Π° это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°:

 def f1 ():
    print ("Мо")

def f2 ():
    f4 ()
    print ("Минни")

def f3 ():
    f2 ()
    print ("Miny")
    f1 ()

def f4 ():
    print ("Ини")

f3 ()
 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚Π΅ Π·Π° процСссом выполнСния ΠΈ посмотритС, смоТСтС Π»ΠΈ Π²Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ это Π΄Π΅Π»Π°Π΅Ρ‚.

5.5. Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅

Π˜Π½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡ — это процСсс обСртывания Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΊΠΎΠ΄Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ , позволяя Π²Π°ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ всСми прСимущСствами Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

ΠžΠ±ΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ принятиС Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, подсчСт числа Ρ†ΠΈΡ„Ρ€ Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ†Π΅Π»ΠΎΠΌ числС, ΠΈ дСлая Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ подсчСт количСства Ρ†ΠΈΡ„Ρ€ любого Ρ†Π΅Π»ΠΎΠ³ΠΎ числа.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ этот процСсс, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, которая считаСт количСство Ρ†ΠΈΡ„Ρ€ Π² Π½ΠΎΠΌΠ΅Ρ€Π΅ 4203 :

НомСр
 = 4203
count = 0

Π° число! = 0:
    count + = 1
    число // = 10

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (количСство)
 

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΊ этому Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ ΠΏΡ€ΠΈ отслСТивании ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΠΎΠΊΠ° Π½Π΅ почувствуСтС ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° дСмонстрируСт Π²Π°ΠΆΠ½Ρ‹ΠΉ Π‘Ρ…Π΅ΠΌΠ° вычислСния называСтся счСтчиком . ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ count — это инициализируСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0 ΠΈ Π·Π°Ρ‚Π΅ΠΌ увСличиваСтся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°. Когда Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, счСтчик содСрТит Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ — ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ€Π°Π· Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Ρ‡Ρ‚ΠΎ соотвСтствуСт количСству Ρ†ΠΈΡ„Ρ€.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Π² инкапсуляции этой Π»ΠΎΠ³ΠΈΠΊΠΈ — Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΅Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

 def num_digits ():
    число = 4203
    count = 0

    Π° число! = 0:
        count + = 1
        число // = 10

    счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_Ρ†ΠΈΡ„Ρ€ΠΎΠ² ())
 

Запуск этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ даст Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅, Π½ΠΎ Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΎΡ‚ это, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄Π»ΠΈΠ½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ€Π°Π½ΡŒΡˆΠ΅, ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС, Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΌΠΎΡ‰Π½ΠΎΠ΅:

 def num_digits (число):
    count = 0

    Π° число! = 0:
        count + = 1
        число // = 10

    счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (число_Ρ†ΠΈΡ„Ρ€ΠΎΠ² (4203))
 

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ Π»ΠΎΠ³ΠΈΠΊΡƒ для подсчСта Ρ†ΠΈΡ„Ρ€ любоС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ print (num_digits (710)) Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ 3 .Π’Ρ‹Π·ΠΎΠ² print (num_digits (1345109)) Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ 7 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π­Ρ‚Π° функция Ρ‚Π°ΠΊΠΆΠ΅ содСрТит ошибки. Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ num_digits (0) , ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ 0 , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 1 . Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ num_digits (-23) , ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ Π² бСсконСчный Ρ†ΠΈΠΊΠ». Π’Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π΅ эти ошибки. ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅.

5.6. ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΡ

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ составлСны , Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

 >>> def f (x):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 2 * x
...
>>> def g (x):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x + 5
...
>>> def h (x):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x ** 2 - 3
>>> f (3)
6
>>> Π³ (3)
8
>>> Ρ‡ (4)
13
>>> f (g (3))
16
>>> g (f (3))
11
>>> h (f (g (0)))
97
>>>
 

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

 >>> # ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для f ΠΈ g, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅
>>> val = 10
>>> f (val)
20
>>> f (g (val))
30
>>>
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ΅-Ρ‡Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎΠ΅. Имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ( val ) Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ( x ). ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, это ΠΊΠ°ΠΊ Ссли Π±Ρ‹ x = val выполняСтся, ΠΊΠΎΠ³Π΄Π° вызываСтся f (val) . Π­Ρ‚ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ Π½Π°Π·Π²Π°Π½ΠΎ Ρƒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°, Π²Π½ΡƒΡ‚Ρ€ΠΈ f ΠΈ g Π΅Π³ΠΎ имя x .

5.7. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ опрСдСляСтС Π² Python, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

 >>> def f ():
... print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f!")
...
>>> Ρ‚ΠΈΠΏ (f)
<Ρ‚ΠΈΠΏ 'функция'>
>>> f ()
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ f!
>>>
 

ЗначСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ элСмСнтами списка. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ f , g ΠΈ h ΠΈΠΌΠ΅ΡŽΡ‚ Π±Ρ‹Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, ΠΊΠ°ΠΊ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «Π‘остав» Π²Ρ‹ΡˆΠ΅.

 >>> do_stuff = [f, g, h]
>>> для func в do_stuff:
... функция (10)
...
20
15
97
 

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΏΠΎΠΊΠ° Π½Π΅ почувствуСтС ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

5.8. Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° списка Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° фактичСски ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ссылку Π½Π° список, Π° Π½Π΅ копия списка. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ списки ΡΠ²Π»ΡΡŽΡ‚ΡΡ измСняСмыми измСнСниями, внСсСнными Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅. НапримСр, функция Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² спискС Π½Π° 2:

 def double_stuff_v1 (a_list):
    индСкс = 0
    для значСния Π² a_list:
        a_list [индСкс] = 2 * Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
        индСкс + = 1
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ помСстим Π΅Π΅ Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ pure_v_modify.py , ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π² Π½Π°ΡˆΡƒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python, Π³Π΄Π΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:

 >>> from pure_v_modify import double_stuff_v1
>>> things = [2, 5, 'Π‘ΠΏΠ°ΠΌ', 9.5]
>>> double_stuff_v1 (Π²Π΅Ρ‰ΠΈ)
>>> Π²Π΅Ρ‰ΠΈ
[4, 10, 'SpamSpam', 19.0]
 

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Π€Π°ΠΉΠ», содСрТащий ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ .py Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ записано Π² заявлСнии ΠΎΠ± ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅ .

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ a_list ΠΈ пСрСмСнная things ΡΠ²Π»ΡΡŽΡ‚ΡΡ псСвдонимами для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° состояний выглядит Ρ‚Π°ΠΊ:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ списка являСтся ΠΎΠ±Ρ‰ΠΈΠΌ для Π΄Π²ΡƒΡ… Ρ„Ρ€Π΅ΠΉΠΌΠΎΠ², ΠΌΡ‹ нарисовали Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ.

Если функция измСняСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ списка, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚ Π²ΠΈΠ΄ΠΈΡ‚ это ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅.

5.9. ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ списки Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ ΠΈΡ… Π²ΠΎ врСмя выполнСния: Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ , Π° вносимыС ΠΈΠΌΠΈ измСнСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами .

Чистая функция Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.Он общаСтся с Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½Π° Π½Π΅ измСняСт, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Ρ†Π΅Π½ΠΈΡ‚ΡŒ. Π’ΠΎΡ‚ double_stuff_v2 , записанная ΠΊΠ°ΠΊ чистая функция:

 def double_stuff_v2 (a_list):
    new_list = []
    для значСния Π² a_list:
        Π½ΠΎΠ²Ρ‹ΠΉ_лист + = [2 * Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅]
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ_лист
 

Π­Ρ‚Π° вСрсия double_stuff Π½Π΅ измСняСт свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹:

 >>> from pure_v_modify import double_stuff_v2
>>> things = [2, 5, 'Π‘ΠΏΠ°ΠΌ', 9. 5]
>>> double_stuff_v2 (Π²Π΅Ρ‰ΠΈ)
[4, 10, 'SpamSpam', 19.0]
>>> Π²Π΅Ρ‰ΠΈ
[2, 5, "Π‘ΠΏΠ°ΠΌ", 9.5]
>>>
 

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‡ΠΈΡΡ‚ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ double_stuff для измСнСния Π²Π΅Ρ‰Π΅ΠΉ , Π²Ρ‹ Π±Ρ‹ присвоили Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅Ρ‰Π°ΠΌ :

 >>> Π²Π΅Ρ‰ΠΈ = double_stuff (Π²Π΅Ρ‰ΠΈ)
>>> Π²Π΅Ρ‰ΠΈ
[4, 10, 'SpamSpam', 19.0]
>>>
 

5.10. Π§Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅?

ВсС, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈ с чистыми функциями.ЀактичСски, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ языки программирования Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. БущСствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, быстрСС Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ мСньшС ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ ошибкам, Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½Π°ΠΌΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Π° Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠ΅Π½Π΅Π΅ эффСктивны.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ Π²Π°ΠΌ ΠΏΠΈΡΠ°Ρ‚ΡŒ чистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΈ ΠΏΡ€ΠΈΠ±Π΅Π³Π°Ρ‚ΡŒ ΠΊ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅ΡΡ‚ΡŒ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ прСимущСство. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π²Π°Ρ‚ΡŒ стилСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ программирования .

5.11. ΠŸΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ ΠΈ Ρ‚ΠΈΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΡ‚ΠΎΠΊ

ВызываСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ. Π’ Python Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΠΈΠΌΠΎΡ€Ρ„ΠΈΠ·ΠΌ Π»Π΅Π³ΠΊΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ. По сути, это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° всС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ допустимы, функция ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±Π΅Π· ΠΆΠ°Π»ΠΎΠ±Π°. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡŽ:

 >>> def double (Π²Π΅Ρ‰ΡŒ):
... Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 2 * Π²Π΅Ρ‰ΡŒ
...
>>> Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ (5)
10
>>> double ('Π‘ΠΏΠ°ΠΌ')
'Π‘ΠΏΠ°ΠΌΠ‘ΠΏΠ°ΠΌ'
>>> double ([1, 2])
[1, 2, 1, 2]
>>> Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ (3,5)
7.0
>>> double (('Π°', 'Π±'))
('Π°', 'Π±', 'Π°', 'Π±')
>>> Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ (НСт)
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
  Π€Π°ΠΉΠ» "", строка 2, Π² Π΄Π²ΠΎΠΉΠ½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅
TypeError: Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² для *: 'int' ΠΈ 'NoneType'
>>>
 

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ * ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ для Ρ†Π΅Π»Ρ‹Ρ… чисСл, строк, списков, чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ, Π²Ρ‹Π·ΠΎΠ² нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ double с Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ² Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. * Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ для NoneType, поэтому ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° double function a None Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ошибкС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

5.12. Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹Π΅ столы

ДвумСрная Ρ‚Π°Π±Π»ΠΈΡ†Π° — это Ρ‚Π°Π±Π»ΠΈΡ†Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²Ρ‹ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° пСрСсСчСнии строки ΠΈ столбца. Π’Π°Π±Π»ΠΈΡ†Π° умноТСния — Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ умноТСния для Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚ 1 Π΄ΠΎ 6.

Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ способ Π½Π°Ρ‡Π°Ρ‚ΡŒ — Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ числа, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 2, всС Π½Π° ΠΎΠ΄Π½Π° строка:

 для i в диапазонС (1, 7):
    print (2 * i, end = "")
Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ()
 

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ range , Π½ΠΎ заставили Π΅Π΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ свою ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с 1.По ΠΌΠ΅Ρ€Π΅ выполнСния Ρ†ΠΈΠΊΠ»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i измСняСтся с 1 Π½Π° 6. Когда всС элСмСнтам Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° присвоСны Π½ΠΎΠΌΠ΅Ρ€Π° ΠΈ , Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π² Ρ†ΠΈΠΊΠ»Π΅ отобраТаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2 * i , Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹.

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ end = "" Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print подавляСт ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки ΠΈ вмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°. ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π² строкС 3, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ строку.

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Пока всС Ρ…ΠΎΡ€ΠΎΡˆΠΎ. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг — ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ .

5.13. Π‘ΠΎΠ»ΡŒΡˆΠ΅ инкапсуляции

Π­Ρ‚Π° функция инкапсулируСт ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΈ ΠΎΠ±ΠΎΠ±Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ n :

 def print_multiples (n):
    для i в диапазонС (1, 7):
        print (n * i, end = "")
    Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ()
 

Для инкапсуляции всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку, которая ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, всС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Ρ‹Π»ΠΎ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ n .

Если ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 2, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅. Π‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 3 Π²Ρ‹Π²ΠΎΠ΄:

Π‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 4 Π²Ρ‹Π²ΠΎΠ΄:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΡƒΠΆΠ΅ догадались, ΠΊΠ°ΠΊ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ умноТСния — ΠΏΠΎ Π²Ρ‹Π·ΠΎΠ² print_multiples нСсколько Ρ€Π°Π· с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. ЀактичСски, ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ†ΠΈΠΊΠ»:

 для i в диапазонС (1, 7):
    print_multiples (я)
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, насколько этот Ρ†ΠΈΠΊΠ» ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ†ΠΈΠΊΠ» Π²Π½ΡƒΡ‚Ρ€ΠΈ print_multiples .ВсС ΠΌΡ‹ сдСлал Π·Π°ΠΌΠ΅Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° умноТСния:

 1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24
5 10 15 20 25 30
6 12 18 24 30 36
 

5.14. Π•Ρ‰Π΅ большС инкапсуляции

Π§Ρ‚ΠΎΠ±Ρ‹ снова ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΡΡ†ΠΈΡŽ, возьмСм ΠΊΠΎΠ΄ ΠΈΠ· послСднСго Ρ€Π°Π·Π΄Π΅Π»Π°. ΠΈ Π·Π°Π²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

 def print_mult_table ():
    для i в диапазонС (1, 7):
        print_multiples (я)
 

Π­Ρ‚ΠΎΡ‚ процСсс являСтся ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΠ»Π°Π½ΠΎΠΌ развития .Π Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΠ΄ написаниСм строк ΠΊΠΎΠ΄Π° Π²Π½Π΅ любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ вводя ΠΈΡ… Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Когда ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΊΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΈ ΠΎΠ±ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅ΠΌ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π­Ρ‚ΠΎΡ‚ ΠΏΠ»Π°Π½ развития особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ продвиТСния.

5.15. Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅

Π’Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ интСрСсно, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ Π² ΠΎΠ±ΠΎΠΈΡ… print_multiples ΠΈ print_mult_table .Π Π°Π·Π²Π΅ это Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ мСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ?

ΠžΡ‚Π²Π΅Ρ‚ — Π½Π΅Ρ‚, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ i Π² print_multiples ΠΈ i Π² print_mult_table — это , Π° Π½Π΅ , ΠΎΠ΄Π½Π° ΠΈ Ρ‚Π° ΠΆΠ΅ пСрСмСнная.

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, созданныС Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ; Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ локальная пСрСмСнная ΠΈΠ·Π²Π½Π΅ своСй домашнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Ссли ΠΎΠ½ΠΈ Π½Π΅ находятся Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚ΠΎΠΌ ΠΆΠ΅ функция.

Python провСряСт всС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — Ссли ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΡ… присваиваСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, это ΠΊΠ»ΡŽΡ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ локальная пСрСмСнная.

Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° стСка для этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ Ρ‚Π° ΠΆΠ΅ пСрСмСнная. Они ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ€Π°Π·Π½Ρ‹ΠΌ значСниям ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ Π½Π΅ влияСт Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i Π² print_mult_table измСняСтся ΠΎΡ‚ 1 Π΄ΠΎ 6. На Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ это оказываСтся 3.ΠŸΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° это Π±ΡƒΠ΄Π΅Ρ‚ 4. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Ρ‡Π΅Ρ€Π΅Π· Ρ†ΠΈΠΊΠ» print_mult_table Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ print_multiples с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ n .

Π’Π½ΡƒΡ‚Ρ€ΠΈ print_multiples Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i измСняСтся ΠΎΡ‚ 1 Π΄ΠΎ 6. Π’ Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°, оказываСтся 2. ИзмСнСниС этой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π½Π΅ влияСт Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΈ Π² print_mult_table .

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π·Π°ΠΊΠΎΠ½Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ‚ΠΎ ΠΆΠ΅ имя.Π’ частности, Ρ‚Π°ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π°, ΠΊΠ°ΠΊ i ΠΈ j , часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ†ΠΈΠΊΠ»Π°. Если Π²Ρ‹ ΠΈΠ·Π±Π΅Π³Π°Π΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали ΠΈΡ… Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Π΅, Π²Ρ‹, вСроятно, Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

5.16. РСкурсивныС структуры Π΄Π°Π½Π½Ρ‹Ρ…

ВсС Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сгруппированы Π²Π½ΡƒΡ‚Ρ€ΠΈ списков ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами. Бписки ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ, обСспСчивая мноТСство возмоТностСй для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. ΠžΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… для Ρ†Π΅Π»ΡŒ облСгчСния использования называСтся структура Π΄Π°Π½Π½Ρ‹Ρ….

ВрСмя Π²Ρ‹Π±ΠΎΡ€ΠΎΠ², ΠΈ ΠΌΡ‹ ΠΏΠΎΠΌΠΎΠ³Π°Π΅ΠΌ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ количСство голосов ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ ΠΈΡ… поступлСния. Голоса, ΠΏΡ€ΠΈΠ±Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΎΠ², участков, ΠΌΡƒΠ½ΠΈΡ†ΠΈΠΏΠ°Π»ΠΈΡ‚Π΅Ρ‚ΠΎΠ², ΠΎΠΊΡ€ΡƒΠ³ΠΎΠ² ΠΈ состояния ΠΈΠ½ΠΎΠ³Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ суммы голосов, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π² Π²ΠΈΠ΄Π΅ списка ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΡ‚ΠΎΠ³ΠΎΠ² голосов. ΠžΠ±Π΄ΡƒΠΌΠ°Π², ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ всСго Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ счСта, ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ список Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ опрСдСляСм ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² — это список, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ:

  1. Π½ΠΎΠΌΠ΅Ρ€Π°

  2. списки Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ²

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Β«Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ²Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² собствСнном ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. РСкурсивныС опрСдСлСния Ρ‚Π°ΠΊΠΈΠ΅ довольно распространСны Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ°. Они ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎ ΠΈ эффСктивно ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ рСкурсивныС структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ частично состоят ΠΈΠ· Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΈ простых экзСмпляров самих сСбя. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся ΠΊΡ€ΡƒΠ³ΠΎΠ²Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ достигнСм списка, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ списков Π² качСствС элСмСнтов.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ наша Π·Π°Π΄Π°Ρ‡Π° — Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая суммируСт всС значСния Π² список Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ². Python ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ сумму ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€:

 >>> сумма ([1, 2, 8])
11
>>> sum ((3, 5, 8.5))
16,5
>>>
 

Однако для нашСго списка Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² , сумма Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ:

 >>> сумма ([1, 2, [11, 13], 8])
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
TypeError: Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² для +: 'int' ΠΈ 'list'
>>>
 

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ элСмСнт этого списка, [11, 13] , сам являСтся список, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСльзя Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² 1 , 2 ΠΈ 8 .

5.17. РСкурсия

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС числа Π² нашСм рСкурсивном спискС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… чисСл, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ список, посСщая ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· элСмСнтов Π²Π½ΡƒΡ‚Ρ€ΠΈ своСй Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ структуры, добавляя Π»ΡŽΠ±Ρ‹Π΅ числовыС элСмСнты ΠΊ нашСй суммС, ΠΈ повторяя этот процСсс с Π»ΡŽΠ±Ρ‹ΠΌΠΈ элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ списками.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ языки программирования ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ рСкурсия, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ сСбя Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… своих ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ. Благодаря рСкурсии ΠΊΠΎΠ΄ Python, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для суммирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ списка чисСл, Π½Π° ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ:

 def recursive_sum (nested_num_list):
    the_sum = 0
    для элСмСнта Π² nested_num_list:
        Ссли type (element) == list:
            the_sum = the_sum + recursive_sum (элСмСнт)
        Π΅Ρ‰Π΅:
            the_sum = the_sum + элСмСнт
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ the_sum
 

Π’Π΅Π»ΠΎ recursive_sum состоит Π² основном ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° для , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ nested_num_list . Если элСмСнт являСтся числовым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ (Π²Π΅Ρ‚Π²ΡŒ ΠΈΠ½Π°Ρ‡Π΅ ), ΠΎΠ½ просто добавляСтся ΠΊ the_sum . Если элСмСнт являСтся списком, Ρ‚ΠΎ recursive_sum вызываСтся снова с элСмСнтом Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя, являСтся извСстный ΠΊΠ°ΠΊ рСкурсивный Π²Ρ‹Π·ΠΎΠ².

Recursion — Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых красивых ΠΈ элСгантных инструмСнтов Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π½Π°ΡƒΠΊΠ°.

НСмного Π±ΠΎΠ»Π΅Π΅ слоТная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° — Π½Π°ΠΉΡ‚ΠΈ наибольшСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² нашСм Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ список Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ²:

 def recursive_max (nested_num_list):
    "" "
      >>> recursive_max ([2, 9, [1, 13], 8, 6])
      13
      >>> recursive_max ([2, [[100, 7], 90], [1, 13], 8, 6])
      100
      >>> recursive_max ([2, [[13, 7], 90], [1, 100], 8, 6])
      100
      >>> recursive_max ([[[13, 7], 90], 2, [1, 100], 8, 6])
      100
    "" "
    наибольший = nested_num_list [0]
    Π° Ρ‚ΠΈΠΏ (наибольший) == Ρ‚ΠΈΠΏ ([]):
        наибольший = наибольший [0]

    для элСмСнта Π² nested_num_list:
        Ссли type (element) == type ([]):
            max_of_elem = recursive_max (элСмСнт)
            Ссли самый большой 

ДоктСсты Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ recursive_max .

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ ΠΊ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ являСтся поиск числового значСния для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ наибольший . ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ nested_num_list [0] , Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ я Π»ΠΈΠ±ΠΎ число ΠΈΠ»ΠΈ список. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ†ΠΈΠΊΠ» while, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π·Π½Π°Ρ‡Π°Π΅Ρ‚ самоС большоС Π΄ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ числового значСния нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΠΎΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½ΠΎ.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ , Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ рСкурсивный Π²Ρ‹Π·ΠΎΠ²: случай, ΠΊΠΎΠ³Π΄Π° элСмСнт являСтся числом, Π° Π½Π΅ списком.Π‘Π΅Π· Π² Π±Π°Π·ΠΎΠ²ΠΎΠΌ случаС Ρƒ вас бСсконСчная рСкурсия , ΠΈ ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Python останавливаСтся послС достиТСния максимальной Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ рСкурсии ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ врСмя выполнСния ошибка.

Π—Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π² Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ infinite_recursion.py :

 #
# infinite_recursion.py
#
def recursion_depth (число):
    print "Число Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ рСкурсии% d." % Π½ΠΎΠΌΠ΅Ρ€
    recursion_depth (число + 1)

рСкурсия_Π³Π»ΡƒΠ±ΠΈΠ½Π° (0)
 

Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС unix Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ сохранили ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

 python infinite_recursion. Ρ€Ρƒ
 

ПослС просмотра ΠΌΠΈΠ³Π°ΡŽΡ‰ΠΈΡ… сообщСний Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΊΠΎΠ½Π΅Ρ† длинная трассировка, которая заканчиваСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

 ...
  Π€Π°ΠΉΠ» infinite_recursion.py, строка 3, Π² recursion_depth
    recursion_depth (число + 1)
RuntimeError: ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½Π° максимальная Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии
 

ΠœΡ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, поэтому, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ обсуТдСниС рСкурсии, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ошибки ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Python.

5.18. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, создаСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ . ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° останавливаСтся выполняСтся Π² этот ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΈ Python распСчатываСт трассировку, которая заканчиваСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ.

НапримСр, Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ноль создаСт ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

 >>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ 55/0
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
ZeroDivisionError: цСлочислСнноС Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ нуля
>>>
 

Π’ΠΎ ΠΆΠ΅ самоС ΠΈ с доступом ΠΊ Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту списка:

 >>> a = []
>>> Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ [5]
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
IndexError: список индСкса Π²Π½Π΅ допустимого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°
>>>
 

Или ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° присвоСния элСмСнта ΠΊΠΎΡ€Ρ‚Π΅ΠΆΡƒ:

 >>> tup = ('Π°', 'Π±', 'Π΄', 'Π΄')
>>> tup [2] = 'c'
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
TypeError: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 'tuple' Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнтов
>>>
 

Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ случаС сообщСниС ΠΎΠ± ошибкС Π² послСднСй строкС состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: Ρ‚ΠΈΠΏ ошибка ΠΏΠ΅Ρ€Π΅Π΄ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΈ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ свСдСния ΠΎΠ± ошибкС послС двоСточия.

Иногда ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‡Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Π»Π°ΡΡŒ. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈ , ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² .

НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ имя Ρ„Π°ΠΉΠ»Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠžΡ‚ΠΊΡ€ΠΎΠΉ это. Если Ρ„Π°ΠΉΠ» Π½Π΅ сущСствуСт, ΠΌΡ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π»Π΅Ρ‚Π΅Π»Π° ΠΈΠ· строя; ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ:

 filename = raw_input ('Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°:')
ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
    f = open (имя Ρ„Π°ΠΉΠ»Π°, "r")
ΠšΡ€ΠΎΠΌΠ΅:
    print 'НСт Ρ„Π°ΠΉΠ»Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ', имя Ρ„Π°ΠΉΠ»Π°
 

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ try выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅.Если Π½Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, ΠΎΠ½ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΠ΅Ρ‚ , ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° . Если Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ΅-Π»ΠΈΠ±ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ½ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² , ΠΊΡ€ΠΎΠΌΠ΅ Π²Π΅Ρ‚Π²ΠΈ , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: сущСствуСт ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ссли Ρ„Π°ΠΉΠ» сущСствуСт, false, Ссли Π΅Π³ΠΎ Π½Π΅Ρ‚:

 def сущСствуСт (имя Ρ„Π°ΠΉΠ»Π°):
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        f = open (имя Ρ„Π°ΠΉΠ»Π°)
        f. close ()
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ True
    ΠšΡ€ΠΎΠΌΠ΅:
        return False
 

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько Π±Π»ΠΎΠΊΠΎΠ² , ΠΊΡ€ΠΎΠΌΠ΅ , для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ. (см. Ошибки ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΡƒΡ€ΠΎΠΊ ΠΎΡ‚ Python Tutorial ΠΎΡ‚ создатСля Python Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россума для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ обсуТдСния ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ).

Если ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ состояниС ошибки, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π²Π²ΠΎΠ΄ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ провСряСт, Ρ‡Ρ‚ΠΎ число Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

 #
# learn_exceptions.py
#
def get_age ():
    age = input ('ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ свой возраст:')
    Ссли возраст <0:
        Raise ValueError, "% s Π½Π΅ являСтся допустимым возрастом"% age
    возраст возвращСния
 

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ raise ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ информация ΠΎΠ± ошибкС. ValueError - это встроСнноС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ соотвСтствуСт Ρ‚ΠΎΠΉ ошибкС, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ список встроСнных ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ находится Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ «ВстроСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡΒ» Python Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ создатСля Python, Π“Π²ΠΈΠ΄ΠΎ Π²Π°Π½ Россум.

Если функция, Π²Ρ‹Π·Π²Π°Π²ΡˆΠ°Ρ get_age , ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ; Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Python ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ трассировку ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ:

 >>> get_age ()
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ваш возраст: 42
42
>>> get_age ()
ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ваш возраст: -2
ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ (послСдний Π²Ρ‹Π·ΠΎΠ² послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
  Π€Π°ΠΉΠ» "learn_exceptions.py ", строка 4, Π² get_age
    Raise ValueError, "% s Π½Π΅ являСтся допустимым возрастом"% age
ValueError: -2 Π½Π΅ являСтся допустимым возрастом
>>>
 

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π²Ρ‹ прСдоставили.

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ infinite_recursion.py Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ останавливаСтся, ΠΊΠΎΠ³Π΄Π° достигаСт максимальной Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ рСкурсии:

 #
# infinite_recursion.py
#
def recursion_depth (число):
    print "Число Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ рСкурсии% d." % Π½ΠΎΠΌΠ΅Ρ€
    ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ:
        recursion_depth (число + 1)
    ΠšΡ€ΠΎΠΌΠ΅:
        print "ΠŸΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½Π° максимальная Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии. "

рСкурсия_Π³Π»ΡƒΠ±ΠΈΠ½Π° (0)
 

ЗапуститС эту Π²Π΅Ρ€ΡΠΈΡŽ ΠΈ посмотритС Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

5.19. Π₯востовая рСкурсия

Когда СдинствСнноС, Ρ‡Ρ‚ΠΎ возвращаСтся ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, - это рСкурсивный Π²Ρ‹Π·ΠΎΠ², Π½Π° Π½Π΅Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ хвостовая рСкурсия .

Π’ΠΎΡ‚ вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ отсчСта ΠΈΠ· Π³Π»Π°Π²Ρ‹ 6, написанная с использованиСм хвостовая рСкурсия:

 def ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (n):
    Ссли n == 0:
        ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ "Blastoff!"
    Π΅Ρ‰Π΅:
        Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ n
        ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ отсчСт (n-1)
 

Π›ΡŽΠ±Ρ‹Π΅ вычислСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ с использованиСм ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ с использованиСм рСкурсия.Π’ΠΎΡ‚ вСрсия find_max , написанная с использованиСм хвостовой рСкурсии:

 def find_max (seq, max_so_far):
    Ссли нС seq:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ max_so_far
    Ссли max_so_far 

Π₯востовая рСкурсия считаСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ Π² ​​Python, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Python компилятор Π½Π΅ выполняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ для хвостовых рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². РСкурсивный Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π°ΠΊΠΈΡ… случаях ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ большС систСмных рСсурсов, Ρ‡Π΅ΠΌ эквивалСнт ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

5.20. РСкурсивныС матСматичСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

РСкурсивно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ нСсколько Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстных матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Ρƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, придаСтся особая ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ! , ΠΈ опрСдСляСтся ΠΏΠΎ:

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это Π½Π° Python:

 def factorial (n):
    Ссли n == 0:
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 1
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ n * Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π» (n-1)
 

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ извСстноС рСкурсивноС ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ - это ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ. ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая опрСдСляСтся ΠΏΠΎ:

 Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (0) = 1
Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (1) = 1
Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (ΠΏ) = Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (ΠΏ-1) + Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (ΠΏ-2)
 

Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° Python:

 def fibonacci (n):
    Ссли n == 0 или n == 1:
        Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ 1
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ (n-1) + fibonacci (n-2)
 

Π’Ρ‹Π·ΠΎΠ² Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° (1000) прСвысит ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ рСкурсии.И ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ запуститС fibonacci (35) ΠΈ посмотритС, сколько Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ потрСбуСтся для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ (Π±ΡƒΠ΄ΡŒΡ‚Π΅ Ρ‚Π΅Ρ€ΠΏΠ΅Π»ΠΈΠ²Ρ‹, это Π·Π°Π²Π΅Ρ€ΡˆΡƒ).

Π’Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° ΠΊΠ°ΠΊ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅, ΠΈ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Ρ„ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π³Π»Π°Π²Π°.

5.21. Глоссарий

Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, прСдоставляСмоС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ присваиваСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠΏΠΎΡ‚ΠΎΠΊ выполнСния

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

frame

ПолС Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ стСка, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π΅ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ содСрТит Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

функция

ИмСнованная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.Он состоит ΠΈΠ· названия функция, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдуСт список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

композиция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ИспользованиС Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ.

ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, указывая Π΅Π΅ имя, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ выполняСт.

ΠŸΠ΅Ρ€Π²Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ составного ΠΎΡ‚Ρ‡Π΅Ρ‚Π°. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ (:)

локальная пСрСмСнная

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, опрСдСлСнная Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

НСт

ЕдинствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ . НСт часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой отсутствиС значСния. Π’Π°ΠΊΠΆΠ΅ возвращаСтся return ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ функция, которая достигаСт ΠΊΠΎΠ½Ρ†Π° своСго body Π±Π΅Π· наТатия return statement, содСрТащСго Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

Имя, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для обозначСния значСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° стСка

ГрафичСскоС прСдставлСниС стСка Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈ цСнности, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ½ΠΈ относятся.

трассировка

Бписок выполняСмых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, распСчатываСмый ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. ΠžΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ трассировка стСка , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ пСрСчисляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚ΠΎΠΌ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ хранятся Π² стСк Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния.

7.5 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

7.5 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСт опрСдСляСмый ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» ):

funcdef: "def" funcname "(" [список_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²] ")" ":" Π½Π°Π±ΠΎΡ€
список_ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: (defparameter ",") * ("*" ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ [, "**" ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€]
                                    | "**" ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€
                                    | defparameter [","])
defparameter: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ["=" Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅]
подсписок: ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ("," ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€) * [","]
ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ | "(" подсписок ")"
funcname: ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€
 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - это исполняСмый ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€.Π•Π³ΠΎ исполнСниС связываСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ локальном пространствС ΠΈΠΌΠ΅Π½ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΎΠ±Π΅Ρ€Ρ‚ΠΊΠ° исполняСмого ΠΊΠΎΠ΄Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ). Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит ссылку Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ глобальноС пространство ΠΈΠΌΠ΅Π½ Π² качСствС глобального пространства ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ выполняСт Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; это ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Когда ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ = Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ , функция ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².'' Для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° с Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅, Π² этом случаС подставляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, всС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - это синтаксичСскоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ выраТаСтся Π³Ρ€Π°ΠΌΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΉ.

ЗначСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ оцСниваСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, ΠΈ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС `` ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ вычислСнноС '' Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.Π­Ρ‚ΠΎ особСнно Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ являСтся измСняСмым ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, список ΠΈΠ»ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ: Ссли функция измСняСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²ΠΈΠ² элСмСнт Π² список), дСйствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ. Бпособ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ None ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ явно ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

def whats_on_the_telly (penguin = None):
    Ссли ΠΏΠΈΠ½Π³Π²ΠΈΠ½ - НСт:
        ΠΏΠΈΠ½Π³Π²ΠΈΠ½ = []
    ΠΏΠΈΠ½Π³Π²ΠΈΠ½.append ("ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·ΠΎΠΎΠΏΠ°Ρ€ΠΊΠ°")
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΏΠΈΠ½Π³Π²ΠΈΠ½
 

Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ° Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описана Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ . Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всСгда присваиваСт значСния всСм ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, упомянутым Π² список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π»ΠΈΠ±ΠΎ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Если Ρ„ΠΎΡ€ΠΌΠ° `` * ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ '' присутствуСт, ΠΎΠ½ инициализируСтся ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π»ΡŽΠ±Ρ‹Π΅ лишниС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ - пустой ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Если Ρ„ΠΎΡ€ΠΌΠ° ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ `` ** ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ '', ΠΎΠ½ инициализируСтся Π½ΠΎΠ²Ρ‹ΠΌ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ лишниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½ΠΎΠ²Ρ‹ΠΉ пустой ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ.

Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ созданиС Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ связаны ΠΊ ΠΈΠΌΠ΅Π½ΠΈ), для Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ использования Π² выраТСниях. Π—Π΄Π΅ΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ лямбда-Ρ„ΠΎΡ€ΠΌΡ‹, описано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ лямбда-Ρ„ΠΎΡ€ΠΌΠ° просто сокращСниС для ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ³ΠΎ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ; функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ `` def '' ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΈΠ»ΠΈ присваиваСтся Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΈΠΌΠ΅Π½ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ функция, опрСдСлСнная лямбда Ρ„ΠΎΡ€ΠΌΠ°. Π€ΠΎΡ€ΠΌΠ° def Π½Π° самом Π΄Π΅Π»Π΅ Π±ΠΎΠ»Π΅Π΅ мощная, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½Π° позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ программиста: Ρ„ΠΎΡ€ΠΌΠ° `` def '', выполняСмая Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ опрСдСляСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π° ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡˆΠ΅Π» Π²ΠΎΠΊΡ€ΡƒΠ³. Из-Π·Π° философии Π΄Π²ΡƒΡ… областСй видимости Python мСстный функция, опрСдСлСнная Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ доступа ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащСй Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅; Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся ΠΊ функциям, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ лямбда-Ρ„ΠΎΡ€ΠΌΠΎΠΉ. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Ρ‚Ρ€ΡŽΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² локально ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

# Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π° 'n'
def make_incrementer (n):
    def ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ (x, n = n):
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x + n
    ΠΏΡ€ΠΈΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

add1 = make_incrementer (1)
print add1 (3) # Π­Ρ‚ΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚ '4'
 

Π‘ΠΌ. Об этом Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅... для получСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ прСдлоТСниях ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python (с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ)

Python Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя мноТСство встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π­Ρ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Π² любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² соотвСтствии с трСбованиями. Однако, Ссли Π²Ρ‹ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ подходящСй встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для вашСй Ρ†Π΅Π»ΠΈ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Python.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция - это ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π±Π»ΠΎΠΊ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.Для опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python прСдоставляСт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def . НиТС приводится синтаксис опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

 def имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹):
    "" "строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ" ""
    заявлСниС1
    заявлСниС2
    ...
    ...
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ [Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅]
 

Π—Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом def слСдуСт подходящий ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.Один ΠΈΠ»ΠΈ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² скобках. Π‘ΠΈΠΌΠ²ΠΎΠ» : послС скобок Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Π±Π»ΠΎΠΊ с отступом.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой, которая называСтся строкой Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ . Он ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ / класса. Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ.

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ дСйствия.Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово pass.

ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, послСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ - это ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°. Он отправляСт ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² срСду. Если Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ добавляСтся ΠΏΠ΅Ρ€Π΅Π΄ return, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ возвращаСтся Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ опрСдСляСтся функция greet () .

  def greet ():
    "" "Π­Ρ‚Π° функция ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚" Hello World! "" ""
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!')
  

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ greet () .ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ - это строка Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ упоминаСтся, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ эта функция. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ - это ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ строку Π½Π° консоль. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΌ Π½Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π΅Π΅ имя ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² любом мСстС ΠΊΠΎΠ΄Π°. НапримСр, указанная Π²Ρ‹ΡˆΠ΅ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ скобок greet () .

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ НСт , Ссли ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π½Π΅ сущСствуСт.

Ѐункция help () ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ строку Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

  >>> ΠΏΠΎΠΌΠΎΡ‰ΡŒ (ΠΏΡ€ΠΈΠ²Π΅Ρ‚)
Π‘ΠΏΡ€Π°Π²ΠΊΠ° ΠΏΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ greet Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ __main__:

    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ()
        Π­Ρ‚Π° функция ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ "Hello World!"  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для получСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² (Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ) ΠΈ использования ΠΈΡ… для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°.ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ / Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°Ρ‚ΡŒ подходящиС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°. Ѐункция greet () Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° для получСния строкового ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ name . Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ print () модифицируСтся для отобраТСния привСтствСнного сообщСния, адрСсованного ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ.

  def greet (имя):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', имя)

greet ('Steve') # Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ (123)
  

ИмСна Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ / ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, фактичСски ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ фактичСскими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ / ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΡŽ для указания Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° с использованиСм синтаксиса ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€: Ρ‚ΠΈΠΏ . НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ строку Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°.

  def привСтствиС (name: str):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', имя)

greet ('Steve') # Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ со строковым Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ
greet (123) # вывСсти ΠΎΡˆΠΈΠ±ΠΊΡƒ для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° int
  

НСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°.

  def greet (имя1, имя2, имя3):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', имя1, ',', имя2, 'ΠΈ', имя3)

greet ('Steve', 'Bill', 'Yash') # Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ со строковым Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ
  
  ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Ρ‚ΠΈΠ², Π‘ΠΈΠ»Π» ΠΈ Яш
  

НСизвСстноС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Ѐункция Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСизвСстноС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ссли ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ * , Ссли Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ собираСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ.

  def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (* ΠΈΠΌΠ΅Π½Π°):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', ΠΈΠΌΠ΅Π½Π° [0], ',', ΠΈΠΌΠ΅Π½Π° [1], ',', ΠΈΠΌΠ΅Π½Π° [3])

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ('Π‘Ρ‚ΠΈΠ²', 'Π‘ΠΈΠ»Π»', 'Яш')
  
  ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Ρ‚ΠΈΠ², Π‘ΠΈΠ»Π» ΠΈ Яш
  

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π»ΡŽΠ±Ρ‹ΠΌ количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

  def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (* ΠΈΠΌΠ΅Π½Π°):
я = 0
print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', ΠΊΠΎΠ½Π΅Ρ† = '')
ΠΏΠΎΠΊΠ° len (ΠΈΠΌΠ΅Π½Π°)> i:
print (ΠΈΠΌΠ΅Π½Π° [i], end = ',')
я + = 1

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ('Π‘Ρ‚ΠΈΠ²', 'Π‘ΠΈΠ»Π»', 'Яш')
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ('Π‘Ρ‚ΠΈΠ²', 'Π‘ΠΈΠ»Π»', 'Яш', 'Капил', 'Π”ΠΆΠΎΠ½', 'Амир')
  
  ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π‘Ρ‚ΠΈΠ², Π‘ΠΈΠ»Π», Яш,
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Ρ‚ΠΈΠ², Π‘ΠΈΠ»Π», Яш, Капил, Π”ΠΆΠΎΠ½, Амир
  

Ѐункция с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΆΠ΅ количСство фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².Однако Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² любом порядкС. НапримСр, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ значСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ с использованиСм ΠΈΠΌΠ΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

  def greet (имя, фамилия):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', имя, фамилия)

greet (lastname = 'Jobs', firstname = 'Steve') # ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² любом порядкС с использованиСм Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова
  

АргумСнт ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ** kwarg

Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с прСфиксом ** .Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° инициализируСтся Π½ΠΎΠ²Ρ‹ΠΌ упорядочСнным ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½ΠΎΠ²ΠΎΠ΅ пустоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°.

  def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (** Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ):
print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['имя'], Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['фамилия'])

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ (firstname = 'Steve', lastname = 'Jobs')
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ (lastname = 'Jobs', firstname = 'Steve')
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (firstname = 'Bill', lastname = 'Gates', возраст = 55)
greet (firstname = 'Bill') # Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ KeyError
  
  ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Ρ‚ΠΈΠ² ДТобс
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, Π‘Ρ‚ΠΈΠ² ДТобс
ΠŸΡ€ΠΈΠ²Π΅Ρ‚ Π‘ΠΈΠ»Π» ГСйтс
  

ΠŸΡ€ΠΈ использовании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ** порядок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния.Однако названия Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ paramter_name ['keyword_argument'] .

Если функция обращаСтся ΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ этот Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова, Ρ‚ΠΎ ΠΎΠ½Π° Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ KeyError , ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

  def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (** Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ):
print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['имя'], Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['фамилия'])

greet (firstname = 'Bill') # Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ KeyError, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ 'lastname'
  
  Traceback (послСдний звонок послСдний):
  Π€Π°ΠΉΠ» "", строка 1, Π² 
    ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ (firstname = 'Bill')
  Π€Π°ΠΉΠ» "", строка 2, Π² привСтствии
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['имя'], Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ['фамилия'])
KeyError: "фамилия"
  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΅Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ присвоСны значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ замСняСтся, Ссли ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ пСрСдаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Однако, Ссли фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½, Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ функция greet () опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ name , ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 'Guest' . Он Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ фактичСский Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

  def greet (name = 'Π“ΠΎΡΡ‚ΡŒ'):
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚', имя)

ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ()
ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽ ('Π‘Ρ‚ΠΈΠ²')
  

Ѐункция с Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для использования Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… процСссах. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° функция возвращаСтся, ΠΎΠ½Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ функция Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ срСду, помСщая Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ return. Π’ этом случаС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ присвоСно ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

  def sum (a, b):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ a + b
  

Π’Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Π°Ρ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ΠΈ Π΅ΠΉ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.

  ΠΈΡ‚ΠΎΠ³ΠΎ = сумма (10, 20)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (всСго)
всСго = сумма (5, сумма (10, 20))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (всСго)
  

ΠžΡΠ½ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python | Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π² граТданской сфСрС Π² Бтэнфордском унивСрситСтС

ΠœΡ‹ использовали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с самого Π½Π°Ρ‡Π°Π»Π°:

  ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Β«ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€Β»)
  

ΠœΠ°Ρ€ΠΊΠ΅Ρ€ print - это , Π° Π½Π΅ - ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Python.Π­Ρ‚ΠΎ имя, присвоСнноС Π±Π»ΠΎΠΊΡƒ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΈΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° - Β«hello worldΒ» - ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран. ЀактичСский ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСт , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ , Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ слоТнСС, Ρ‡Π΅ΠΌ Π²Ρ‹, вСроятно, Π΄ΡƒΠΌΠ°Π»ΠΈ:

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π°Π±ΠΈΡ€Π°Π΅Ρ‚Π΅ всС эти инструкции Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ вывСсти Π½Π° экран. Но ΠΌΡ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ этого Π΄Π΅Π»Π°Ρ‚ΡŒ. ИмСя всС инструкции Python, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Π½Π° экранС, Π·Π°Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Π² этикСтку, print , ΠΌΡ‹ просто Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ эту этикСтку (Ρ‚.Π΅.Π΅. Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°ΠΉΡ‚Π΅ ) ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ:

  print (Β«ΠΏΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€Β», «это», «я»)
  

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ наши собствСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π»Π΅Π½ΠΈΠ²Ρ‹ ΠΈ устали ΠΎΡ‚ нСобходимости ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΊΠΎΠ΄ снова ΠΈ снова, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°ΡˆΠΈΡ… собствСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ позволяСт Π½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ наши скрипты ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΡ… Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΈΡ… использованиС, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ слоТноС, Ρ‡Π΅ΠΌ присвоСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

По сути, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def , Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ имя, Π° Π·Π°Ρ‚Π΅ΠΌ пишСм ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выполнСния, Π² Π²ΠΈΠ΄Π΅ Π±Π»ΠΎΠΊΠ° с отступом.

ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ этого руководства посвящСна простому синтаксису для опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π³Π»Π°Π²ΠΎΠΉ 3 Π­Π»Π° Π‘Π²ΠΈΠ³Π°Ρ€Ρ‚Π°: Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ» Ρ‡Π΅Ρ€Π΅Π· «АвтоматизируйтС ΡΠΊΡƒΡ‡Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚ΡƒΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ пошаговоС руководство, ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· связанных с Π½ΠΈΠΌΠΈ Ρ‚Π΅ΠΌ.

Π’ΠΎΡ‚ самая простая функция:

  def hello_world ():
    print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!")
  

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ Python ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠ΄.НичСго Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выполняСтся , ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ просто опрСдСляСм функция.

Код Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ:

  >>> hello_world ()
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС функция дСйствуСт Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Python:

  >>> hello_world
<функция __main__.hello_world>
>>> Ρ‚ΠΈΠΏ (hello_world)
функция
  

БинтаксичСскиС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Из Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Python:

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def Π²Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π° Π½ΠΈΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² скобках. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строки ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступ.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ содСрТит список Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² скобках.ΠœΡ‹ рассмотрим этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠ·ΠΆΠ΅.

По сути, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° эту ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒ:

  def the_function_name ():
    what_the_function_does
  

ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово

def

Π­Ρ‚ΠΎ лишь ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Π΅Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚Π΅. Π­Ρ‚ΠΎ сокращСниС ΠΎΡ‚ ``

Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ основном это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π΅ ΠΆΠ΅ соглашСния, Ρ‡Ρ‚ΠΎ ΠΈ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ . Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ строчныС Π±ΡƒΠΊΠ²Ρ‹ ΠΈ символы подчСркивания.

Π§Ρ‚ΠΎ касаСтся Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π° с отступом; всС, Ρ‡Ρ‚ΠΎ являСтся допустимым ΠΊΠΎΠ΄ΠΎΠΌ Python. Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠΈ с отступом для условных ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² for.

Одним ΠΈΠ· Ρ‚ΠΎΠ½ΠΊΠΈΡ… аспСктов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ . Π§Ρ‚ΠΎ это ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚? ΠŸΡ€ΠΎΡ‰Π΅ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ : len

  >>> x = len ("ΠΏΡ€ΠΈΠ²Π΅Ρ‚")
  

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ x содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция len ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Ρ†Π΅Π»ΠΎΠ³ΠΎ числа, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π»ΠΈΠ½Ρƒ любого значСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ print () :

  >>> pval = print ("ΠΏΡ€ΠΈΠ²Π΅Ρ‚")
ΠŸΡ€ΠΈΠ²Π΅Ρ‚
  

Ѐункция явно Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π° экран выводится hello . Но Ρ‡Ρ‚ΠΎ присвоСно ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ pval ? Π½ΠΈΡ‡Π΅Π³ΠΎ

  >>> Ρ‚ΠΈΠΏ (pval)
NoneType
  

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°

ΠŸΡ€ΠΎΡΡ‚Π°Ρ функция hello_world Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²Π΅Ρ€Π½ΡƒΠ»Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° просто Π²Ρ‹Π·Π²Π°Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print .Π§Ρ‚ΠΎΠ±Ρ‹ наша функция Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово return - Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Python:

  def hello_world_again ():
    return "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!"
  

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ это Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ консоли:

  >>> txt = hello_world_again ()
>>> Ρ‚ΠΈΠΏ (txt)
ΡƒΠ».
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π° экран Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ выводится. Π­Ρ‚ΠΎ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ hello_world_again Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print .Если ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ hello_world_again , ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сами Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ print :

  >>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (hello_world_again ())
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!
  

ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π²Ρ‹ , вСроятно, Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ саму Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  >>> ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (hello_world_again)
<функция hello_world_again at 0x10c289bf8>
  

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return эффСктивно Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ; Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python выполняСт инструкции Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ достигаСт return , ΠΎΠ½ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅.

Ѐункция Π½ΠΈΠΆΠ΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ просто Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ "ΠΏΡ€ΠΈΠ²Π΅Ρ‚" :

  def foo_a ():
    ΠΎΡ‚Π²Π΅Ρ‚ΡŒ "ΠΏΡ€ΠΈΠ²Π΅Ρ‚"
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "ΠΌΠΈΡ€"
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎΠΊΠ° Π±Ρ‹Π»ΠΈ ΠΎΡ‡Π΅Π½ΡŒ скучными. ИспользованиС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² позволяСт Π½Π°ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ситуаций, дСлая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

  def hello_there (ΠΊΡ‚ΠΎ-Ρ‚ΠΎ):
    print ("ΠŸΡ€ΠΈΠ²Π΅Ρ‚,% s!"% str (ΠΊΡ‚ΠΎ-Ρ‚ΠΎ) .upper ())
  
  >>> hello_there ('Π΄Π°Π½')
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ДАН!
>>> hello_there (42 * 42)
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, 1764 Π³ΠΎΠ΄!
  

Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² скобках послС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.Π”ΡƒΠΌΠ°ΠΉΡ‚Π΅ ΠΎ Π½ΠΈΡ… ΠΊΠ°ΠΊ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ Ρ‚ΠΎ врСмя, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΌΡ‹ Π½Π΅ Π·Π½Π°Π΅ΠΌ Ρ‚ΠΎΡ‡Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ значСния Π΅ΠΉ пСрСдаст ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π·Π°ΠΏΡΡ‚ΡƒΡŽ для раздСлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

  def sup (first_name, last_name):
    print ("Sup,% s% s?"% (last_name, first_name))
  
  >>> sup ('Π΄Π°Π½', 'Π½Π³ΡƒΠ΅Π½')
Sup, nguyen dan?
  

АргумСнты ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, присвоив ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² спискС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:

  def sup_2 (first_name, last_name = 'Doe'):
    print ("Sup,% s% s?"% (last_name, first_name))
  
  >>> sup_2 ('Π”ΠΆΠΎΠ½', "ДТонсон")
Π‘ΡƒΠΏ, Π”ΠΆΠΎΠ½ ДТонсон?
>>> sup_2 ('Π”ΠΆΠΎΠ½')
Π‘ΡƒΠΏ, Π”ΠΆΠΎΠ½ Π”ΠΎΡƒ?
  

Когда слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ? Когда ΡƒΠ³ΠΎΠ΄Π½ΠΎ.Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ опрСдСляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π²Π΅Ρ‰Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°Π΅ΠΌ, снова ΠΈ снова.

НапримСр, ΠΌΡ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π° ΠΈ, Π² случаС Ρ„Π°ΠΉΠ»ΠΎΠ² JSON, дСсСриализуСм ΠΈΡ… Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Python:

  запросов Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚
ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ json
resp = requests.get ("http://stash.compciv.org/congress-twitter/2016-01/sentcruz.json")
mydata = json.loads (соотвСтствСнно тСкст)
  

Если Π±Ρ‹ Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это для ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² JSON (Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°), Π½Π°ΠΌ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° снова ΠΈ снова.Π­Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ. И это ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½ΠΎ ошибкам.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΠΌ Π΅Π³ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Основная стратСгия ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ - Π·Π½Π°Ρ‚ΡŒ:

  • Π§Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?
  • Π§Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ функция ?
  • Π§Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ аннотация ?

Π§Ρ‚ΠΎ ΠΌΠ½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Π˜Ρ‚Π°ΠΊ, учитывая URL-адрСс Ρ„Π°ΠΉΠ»Π° JSON, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…. ΠœΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сдСлали это Π²Ρ‹ΡˆΠ΅, поэтому Π΄Π°Π²Π°ΠΉΡ‚Π΅ просто скопируСм этот ΠΊΠΎΠ΄ ΠΈ вставим Π΅Π³ΠΎ Π² Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΈΠΌΠ΅Π½Π΅ΠΌ fetch_json :

  def fetch_json ():
    запросы Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ json
    resp = запросы.ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ("http://stash.compciv.org/congress-twitter/2016-01/sentcruz.json")
    mydata = json.loads (соотвСтствСнно тСкст)
  

Π§Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ функция?

Если Π²Ρ‹ скопируСтС ΠΈ вставитС этот ΠΊΠΎΠ΄ Π²Ρ‹ΡˆΠ΅, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

  >>> fetch_json ()
  

Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Но Π½Π° самом Π΄Π΅Π»Π΅ ΠΎΠ½ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚, поэтому для всСх практичСских Ρ†Π΅Π»Π΅ΠΉ бСсполСзСн.

Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ просто Π²Π΅Ρ€Π½Π΅ΠΌ дСсСриализованный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚:

  def fetch_json ():
    запросы Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ json
    resp = запросы.ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ("http://stash.compciv.org/congress-twitter/2016-01/sentcruz.json")
    mydata = json.loads (соотвСтствСнно тСкст)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΎΠΈ Π΄Π°Π½Π½Ρ‹Π΅
  

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ mydata ΠΈ всС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ значСния Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅ ΠΈΠ»ΠΈ ΠΈ mydata с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ мСстами, Π³Π΄Π΅ Π²Ρ‹ использовали Ρ‚Π΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

  >>> Π²Π΅Ρ‰ΡŒ = fetch_json ()
>>> Ρ‚ΠΈΠΏ (Π²Π΅Ρ‰ΡŒ)
Π΄ΠΈΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ
>>> Π²Π΅Ρ‰ΡŒ ['имя']
'Π‘Π΅Π½Π°Ρ‚ΠΎΡ€ Π’Π΅Π΄ ΠšΡ€ΡƒΠ·'
  

Π§Ρ‚ΠΎ я ΠΌΠΎΠ³Ρƒ Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ?

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π΅ΠΌ ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ .Ѐункция fetch_json работаСт… Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΡΠΏΡ€ΡΡ‚Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ профиля Π’Π΅Π΄Π° ΠšΡ€ΡƒΠ·Π° Π² Twitter.

Π˜Ρ‚Π°ΠΊ, какая Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся повторяСмой . А какая Ρ‡Π°ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ мСняСт ?

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС url - это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·. Π˜Ρ‚Π°ΠΊ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм это Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ:

  def fetch_json (url):
    запросы Π½Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚
    ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ json
    resp = запросы.ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ (URL)
    mydata = json.loads (соотвСтствСнно тСкст)
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΎΠΈ Π΄Π°Π½Π½Ρ‹Π΅
  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π° любой URL-адрСс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ якобы содСрТит тСкст Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ для сСбя ΠΏΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒ fetch_json ΠΏΠΎ этим URL-адрСсам:

  • http://stash.compciv.org/congress-twitter/2016-01/sensanders.json
  • http://stash.compciv.org/congress-twitter/2016-01/congress-twitter-profiles.json
  • https://status.github.com/api.json
  • https: // status.github.com/api/status.json
  • https://data.usajobs.gov/api/jobs?series=2210

ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π³Π»Π°Π²ΠΎΠΉ 3 Π­Π»Π° Π‘Π²ΠΈΠ³Π°Ρ€Ρ‚Π°: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· Automate the Boring Stuff, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π΅ пошаговоС руководство ΠΏΠΎ функциям ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΈΠ· связанных с Π½ΠΈΠΌΠΈ Ρ‚Π΅ΠΌ.

Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python - AskPython

  • Ѐункция - это Π±Π»ΠΎΠΊ ΠΊΠΎΠ΄Π° с ΠΈΠΌΠ΅Π½Π΅ΠΌ.
  • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ.
  • Код Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выполняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π΅.
  • Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ½Π° вызываСтся ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.
  • ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ запятой. Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ любоС количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².
  • Ѐункция ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… популярных языков программирования, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния.
  • ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π² качСствС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ опрСдСлСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Python .

Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python?

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def . Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° ΠΏΠ°Ρ€Ρƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python.

def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ ():
    print ('ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€')


def add (x, y):
    print (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ f: {x} ΠΈ {y} ')
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ x + y
 

На основС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ структуру Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ это.

def имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹):
    # ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΊΠΎΠ΄Π°
 
Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Как Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python?

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠΎ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ.Если функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠ²Π΅Ρ‚()
сумма = Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ (10, 5)
print (f'sum Ρ€Π°Π²Π½ΠΎ {sum} ')
 

ΠœΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ hello () ΠΈ add (). ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print (), которая являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python.


Π’ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python

Π’ Python Π΅ΡΡ‚ΡŒ Π΄Π²Π° Ρ‚ΠΈΠΏΠ° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

  1. встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдоставляСмыС языком Python, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ print (), len (), str () ΠΈ Ρ‚. Π”.
  2. ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π½Π°ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Python.

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ функция ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ?

Python допускаСт значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

def ΠΏΡ€ΠΈΠ²Π΅Ρ‚ (Π³ΠΎΠ΄ = 2019):
    print (f'Hello World {Π³ΠΎΠ΄} ')


hello (2020) # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½
hello () # ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½, поэтому Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
 

Π’Ρ‹Ρ…ΠΎΠ΄:

ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€ 2020
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€ 2019
 

МоТно Π»ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ?

Π”Π°, функция ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°.Однако ΠΏΡ€ΠΈ достиТСнии ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСкращаСтся, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возвращаСтся Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ сторонС.

def odd_even_checker (я):
    Ссли я% 2 == 0:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ 'Π΄Π°ΠΆΠ΅'
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ "Π½Π΅Ρ‡Π΅Ρ‚Π½ΠΎΠ΅"


ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (odd_even_checker (20))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (odd_even_checker (15))
 

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ функция Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ?

Ѐункция Python ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ΄Π½ΠΎ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ. Он Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова yield. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»Π° большоС количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° ΠΈΡ….ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ значСния Π½Π° нСсколько частСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ yield. Π­Ρ‚ΠΎΡ‚ Ρ‚ΠΈΠΏ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ называСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

def return_odd_ints (i):
    Ρ… = 1
    Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ x <= i:
        Π΄ΠΎΡ…ΠΎΠ΄ Ρ…
        Ρ… + = 2


output = return_odd_ints (10)
для Π²Ρ‹Π²ΠΎΠ΄Π°:
    Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ)
 

Π’Ρ‹Ρ…ΠΎΠ΄:

1
3
5
7
9
 

АргумСнты ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python

Python позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

  1. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹: Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….
  2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, def add (* args)
  3. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ Число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΈΠ»ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, def add (** kwargs)

НСкоторыС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² Python:

  • ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, * args ΠΈ ** kwargs.
  • НС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ args ΠΈ kwargs.Однако Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… для Π»ΡƒΡ‡ΡˆΠ΅ΠΉ читаСмости ΠΊΠΎΠ΄Π°.
  • Π’ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° - ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ для отобраТСния с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ * args.
  • Π’ΠΈΠΏ ΠΊΠ²Π°Ρ€Π³ΠΎΠ² - Π΄ΠΈΠΊΡ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ для сопоставлСния с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ** kwargs.

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

def add (x, y, * args, ** kwargs):
    сумма = Ρ… + Ρƒ
    для Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²:
        сумма + = Π°

    для k, v в kwargs.items ():
        сумма + = v
    сумма Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°


total = add (1, 2, * (3, 4), ** {"k1": 5, "k2": 6})
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (всСго) # 21
 

РСкурсивная функция Python

Когда функция Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ саму сСбя, ΠΎΠ½Π° называСтся рСкурсивной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.Π­Ρ‚ΠΎΡ‚ сцСнарий Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ называСтся рСкурсиСй.

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ остороТны ΠΏΡ€ΠΈ использовании рСкурсии, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² бСсконСчный Ρ†ΠΈΠΊΠ». Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ряда Π€ΠΈΠ±ΠΎΠ½Π°Ρ‡Ρ‡ΠΈ с использованиСм рСкурсии.

def fibonacci_numbers_at_index (количСство):
    Ссли count <= 1:
        счСтчик Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°
    Π΅Ρ‰Π΅:
        Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ fibonacci_numbers_at_index (count - 1) + fibonacci_numbers_at_index (count - 2)


count = 5
я = 1
пока я <= count:
    ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (fibonacci_numbers_at_index (i))
    я + = 1
 

ПолСзно Π·Π½Π°Ρ‚ΡŒ ΠΎ рСкурсии, Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ это Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ†ΠΈΠΊΠ» for ΠΈΠ»ΠΈ while.


Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ экзСмплярами класса «функция». ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ type ().

def foo ():
    ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ


ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ‚ΠΈΠΏ (foo))
 

Π’Ρ‹Ρ…ΠΎΠ΄ : <класс «функция»>


Ѐункция Python ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°

  • Ѐункция Python являСтся Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ„Π°ΠΉΠ»Π° сцСнария Python, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния класса.
  • ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ, Ссли ΠΎΠ½Π° находится Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅. Если функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Нам Π½ΡƒΠΆΠ΅Π½ класс ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса для Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².
  • Ѐункция Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠΎ всСм Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Python ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΈ функциям класса.
  • Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python - «функция», Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Python - Β«ΠΌΠ΅Ρ‚ΠΎΠ΄Β».

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π² Python.

Π”Π°Π½Π½Ρ‹Π΅ класса:
    def foo (сам):
        print ('ΠΌΠ΅Ρ‚ΠΎΠ΄ foo')


def foo ():
    print ('функция foo')


# Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
foo ()

# Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°
d = Π”Π°Π½Π½Ρ‹Π΅ ()
d.foo ()

# ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Ρ‚ΠΈΠΏ (foo))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π²Π²Π΅Π΄ΠΈΡ‚Π΅ (d.foo))
 

Π’Ρ‹Ρ…ΠΎΠ΄:

функция foo
foo ΠΌΠ΅Ρ‚ΠΎΠ΄
<класс 'функция'>
<класс 'ΠΌΠ΅Ρ‚ΠΎΠ΄'>
 

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Python

  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования ΠΊΠΎΠ΄Π°, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ нСсколько Ρ€Π°Π·
  • ΠœΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡
  • Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ€Π΅ΠΌΠΎΠ½Ρ‚ΠΎΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°
  • Абстракция, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Анонимная функция Python

АнонимныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΈΠΌΠ΅Π½ΠΈ.ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово lambda.