ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² си: Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² языкС Π‘ΠΈ : Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

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

2.15.Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² языкС Π‘ΠΈ. ΠŸΠΎΠ½ΡΡ‚ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ѐункция — Π‘ΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ объявлСний ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Π›ΡŽΠ±Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π° Π‘ΠΈ содСрТит ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ main. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ спСцифицируСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΅Π΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, содСрТащСС объявлСниС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ класс памяти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. ОбъявлСниС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Π΅Ρ‚ имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Π’ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ класс памяти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Π’ объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ класс памяти, число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏ. Π’ объявлСнии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ допустимо Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΈ класс памяти Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Если Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Π½Π΅ указываСтся, Ρ‚ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΈΠΏ Β«Ρ†Π΅Π»Ρ‹ΠΉΒ». К ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ извСстСн Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния. Π§Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ объявлСния, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ значСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Π² соотвСтствии с порядком слСдования ΠΈΡ… ΠΈΠΌΠ΅Π½ Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². Бписок ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² содСрТит Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятыми, ΠΏΡ€ΠΈ этом, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ. Бписок ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. ПослС послСднСго ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² спискС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ, Π½ΠΎ Π½Π΅ мСньшС, Ρ‡Π΅ΠΌ список ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π΄ΠΎ троСточия. Для доступа ΠΊ значСниям ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΠΌΠ΅Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ Π² спискС Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. ДопускаСтся список ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², состоящий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· троСточия. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ.

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Ρ‚ΠΈΠΏ «структура», «объСдинСниС», Π»ΠΈΠ±ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠ»ΠΈ массивом. Массив воспринимаСтся ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ элСмСнтов массива.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ класс памяти auto ΠΈΠ»ΠΈ register (auto – ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ прСдставлСн, Π½ΠΎ Π½Π΅ объявлСн, считаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int. Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ локальноС ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π²Π½ΡƒΡ‚Ρ€ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ случаС, Ссли имССтся ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‚ΠΎ программист ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΈΡ… ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π’ΠΈΠΏ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡƒ фактичСского Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΡƒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π² ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌ объявлСнии со списком Ρ‚ΠΈΠΏΠΎΠ².

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

ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Ρ‚ΠΈΠΏΠ° адрСсации компилятор Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ нСявно ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ памяти. НСсоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈ фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌΡ‹Ρ… ΠΈΠ· стСка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π’ случаС, Ссли функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€ΠΈ Π΅Π΅ объявлСнии рСкомСндуСтся явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ void.

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ составной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠ΅ дСйствия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВсС элСмСнты, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класс auto, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ. ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ выдСляСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΈ, Ссли ΡƒΠΊΠ°Π·Π°Π½ΠΎ, проводится ΠΈΡ… инициализация. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ составного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ встрСтится return, Π»ΠΈΠ±ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ достигнут ΠΊΠΎΠ½Π΅Ρ† составного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ выполняСтся Π² Ρ‚ΠΎΡ‡ΠΊΡƒ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΈ этом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ВсС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ массивы ΠΏΠΎ ссылкС. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ значСния фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ, Π½Π°Π΄ Π½ΠΈΠΌΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ прСобразования, Π·Π°Ρ‚Π΅ΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² стСк, ΠΎΡ‚ΠΊΡƒΠ΄Π° эти значСния ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ.

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

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

Π›ΡŽΠ±Π°Ρ функция Π² Π‘ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° рСкурсивно. РСкурсивным называСтся Π²Ρ‹Π·ΠΎΠ², ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ функция содСрТит Π²Ρ‹Π·ΠΎΠ² самой сСбя, Π»ΠΈΠ±ΠΎ Π²Ρ‹Π·ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ число рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Π‘ΠΈ. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½ΠΎΠ²Ρ‹Π΅ области памяти, Ссли ΠΈΡ… класс Π½Π΅ stack ΠΈ Π½Π΅ extern. Число рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² фактичСски ограничиваСтся объСмом памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для хранСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с классом памяти auto.

ΠŸΡ€Π°Π²ΠΈΠ»Π° построСния рСкурсии:

Β· НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ условиС прСкращСния рСкурсивных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈ порядок Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Β· Для рСкурсивного Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΡŽ истинного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° ΠΈ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅

Β· НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ собствСнно дСйствиС, выполняСмоС ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ рСкурсивном Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ Π²Ρ‹Π·ΠΎΠ² простых Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

ИспользованиС def утвСрТдСния являСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнным способом ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python.

Π­Ρ‚ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ соСдинСниС заявлСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π° со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ синтаксисом:

def function_name(parameters):
    statement(s)

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

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

statement(s) — Ρ‚Π°ΠΊΠΆΠ΅ извСстноС ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — это нСпустоС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² , выполняСмых ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ , Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ любой отступом Π±Π»ΠΎΠΊ .

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ простого опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ†Π΅Π»ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ являСтся для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ

Hello ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· , ΠΊΠΎΠ³Π΄Π° это называСтся:

def greet():
    print("Hello")

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ greet() Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

greet()
# Hello

Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся функция:

def greet_two(greeting):
    print(greeting)
 

ПослС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ greet_two() функция Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ:

greet_two("Howdy")
# Howdy

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для этого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def greet_two(greeting="Howdy"):
  print(greeting)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· указания значСния:

greet_two()
# Howdy 

Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ явно ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Python ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ значСния любого Ρ‚ΠΈΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ return ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова. Одна функция ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любоС количСство Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²!

def many_types(x):
  if x < 0:
    return "Hello!"
  else:
    return 0
print(many_types(1))
print(many_types(-1))
# 0
# Hello!

Пока это ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ обрабатываСтся Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ стороной, это ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ Python.

Ѐункция , которая достигаСт ΠΊΠΎΠ½Ρ†Π° исполнСния Π±Π΅Π· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° всСгда Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ None :

def do_nothing():
  pass
print(do_nothing())
# None

Как ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ Ρ€Π°Π½Π΅Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ pass ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая являСтся Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ — ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ выполняСтся, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит. Он Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ½ пропускаСт. Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π² качСствС заполнитСля, ΠΊΠΎΠ³Π΄Π° синтаксичСски трСбуСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠ΄.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ return Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ , ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСпосрСдствСнно:

def give_me_five():
  return 5
print(give_me_five())  # Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
# 5
 

ΠΈΠ»ΠΈ сохранитС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ использования:

num = give_me_five()
print(num)             # Π Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ сохранСнноС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅
# 5
 

ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ:

print(give_me_five() + 10)
# 15

Если return встрСчаСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ функция Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π²Ρ‹ΡˆΠ»Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒΡΡ:

def give_me_another_five():
    return 5
    print('Π­Ρ‚ΠΎ заявлСниС Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ.  Когда-Π»ΠΈΠ±ΠΎ.')
print(give_me_another_five())
# 5

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ return нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°):

def give_me_two_fives():
    return 5, 5  # Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΄Π²Π΅ 5
first, second = give_me_two_fives()
print(first)
# 5
print(second)
# 5
 

Ѐункция, Π±Π΅Π· return заявлСния нСявно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None.Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ функция с return ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, Π½ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ пСрСмСнная Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ None .

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

АргумСнты ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² скобках послС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

def divide(dividend, divisor):  #ИмСна Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
  # АргумСнты доступны ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
  print(dividend / divisor)

Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ список Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ сигнатура Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ фактичСски являСтся локальной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², пСрСчислив ΠΈΡ… Π² порядкС

divide(10, 2)
# 5

ΠΈΠ»ΠΈ ΡƒΠΊΠ°ΠΆΠΈΡ‚Π΅ ΠΈΡ… Π² любом порядкС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠΌΠ΅Π½Π° ΠΈΠ· опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

divide(divisor=2, dividend=10)
# 5 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡƒΡ‚Π΅ΠΌ назначСния ( с использованиСм = ) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ имя-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°:

def make(action='nothing'):
  return action

Π’Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ трСмя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ способами:

make("fun")
# fun
make(action="sleep")
# sleep
# АргумСнт являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, поэтому функция 
# Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, 
# Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½. 
make()   
# Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ происходит

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

Π˜Π·ΠΌΠ΅Π½ΡΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ( list , dict , set ΠΈ Ρ‚.Π΄.) , слСдуСт ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ , ΠΊΠΎΠ³Π΄Π° даСтся ΠΊΠ°ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Π›ΡŽΠ±Π°Ρ мутация Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ Π΅Π³ΠΎ навсСгда. Π‘ΠΌ ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСняСмыми Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ .

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с нСсколькими Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

МоТно Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², сколько Π½ΡƒΠΆΠ½ΠΎ, СдинствСнныС фиксированныС ΠΏΡ€Π°Π²ΠΈΠ»Π° — это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ имя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ послС Π½Π΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ…:

def func(value1, value2, optionalvalue=10):
  return '{0} {1} {2}'.format(value1, value2, optionalvalue)

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

print(func(1, 'a', 100))
# 1 a 100
print(func('abc', 14))
# abc 14 10
 

Или ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π±Π΅Π·. Π’ΠΎΠ³Π΄Π° Ρ‚Π΅, Ρƒ ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ имя, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π·Π° Ρ‚Π΅ΠΌΠΈ, Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚, Π½ΠΎ порядок Ρ‚Π΅Ρ…, Ρƒ ΠΊΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ имя, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния:

print(func('This', optionalvalue='StackOverflow Documentation', value2='is'))
# This is StackOverflow Documentation 

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ , ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сдСлано с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прСфиксов ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с *

def func(*args):
    # args Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΌ, содСрТащим всС ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ значСния
    for i in args:
        print(i)
# Π’Ρ‹Π·ΠΎΠ² с 3 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ
func(1, 2, 3)  
# 1
# 2
# 3
list_of_arg_values = [1, 2, 3]
# Π’Ρ‹Π·ΠΎΠ² со списком Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, * Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ список
func(*list_of_arg_values)
# 1
# 2
# 3 
# Π’Ρ‹Π·ΠΎΠ² Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
func()
# НСт Π²Ρ‹Π²ΠΎΠ΄Π° 

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для args , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ func(*args=[1, 2, 3]) ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ (Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ).

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ func(*args=[1, 2, 3]) ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅Ρ‚ TypeError .

Но Ссли Ρƒ вас ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² массивС (ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Iterable ), Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: func(*my_stuff) .

Π­Ρ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ( *args ) ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΏΠΎ индСксу, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ , args[0] Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚

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

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΈΠΌΠ΅Π½Π΅ΠΌ, опрСдСляя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ с двумя * ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ:

def func(**kwargs):
    # kwargs Π±ΡƒΠ΄Π΅Ρ‚ словарСм, содСрТащим ΠΈΠΌΠ΅Π½Π° 
    # Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΈ значСния Π² качСствС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.
    for name, value in kwargs.items():
        print(name, value)
# Π’Ρ‹Π·ΠΎΠ² с 3-мя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ
func(value1=1, value2=2, value3=3)
# value1 1
# value2 2
# value3 3
# Π’Ρ‹Π·ΠΎΠ² Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
func()                               
# НСт Π²Ρ‹Π²ΠΎΠ΄Π°
# Π’Ρ‹Π·ΠΎΠ² ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ
my_dict = {'foo': 1, 'bar': 2}
func(**my_dict)                     
# foo 1
# bar 2
 

Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это Π±Π΅Π· ΠΈΠΌΠ΅Π½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ func(1, 2, 3) ΠΏΠΎΠ΄Π½ΠΈΠΌΠ΅Ρ‚ TypeError .

kwargs это простой Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΏΠΈΡ‚ΠΎΠ½Π°. НапримСр, args['value1'] даст Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° value1.ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅ , Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΠ»ΠΈ KeyError Π±ΡƒΠ΄Π΅Ρ‚ поднят.

ΠŸΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½ΠΎ порядок Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

  • ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ / ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ приходят Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ. (ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹). Β 
  • ΠŸΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ *arg Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. (ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ). Β 
  • ΠŸΠΎΡ‚ΠΎΠΌ приходят Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. (НСобходимыС). Β 
  • ПослСднСС ΠΏΡ€ΠΈΠ²Π΅Ρ‚ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Β ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово **kwargs Β (ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ).
# |-positional-|-optional-|---keyword-only--|-optional-|
def func(arg1, arg2=10 , *args, kwarg1, kwarg2=2, **kwargs):
     pass
  • arg1 Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС TypeError поднимаСтся. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ( func(10) ) ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ( func(arg1=10) ).
  • kwarg1 Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдоставлСн, Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ обСспСчСна Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова-Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: func(kwarg1=10) .
  • arg2 ΠΈ kwarg2 Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ , ΠΊΠ°ΠΊ ΠΈ для arg1 (Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово) ΠΈ kwarg1 (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово) ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ.
  • *args ΡƒΠ»ΠΎΠ²Ρ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Но ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ arg1 ΠΈ arg2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны Π² качСствС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ *args : func(1, 1, 1, 1) .
  • **kwargs ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Π’ этом случаС любой ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ arg1 , arg2 , kwarg1 ΠΈΠ»ΠΈ kwarg2. НапримСр: func(kwarg3=10) .
  • Π’ Python 3, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ * Π² ΠΏΠΎΠΊΠΎΠ΅ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ , Ρ‡Ρ‚ΠΎ всС ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Π² качСствС ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Для экзСмпляра math.isclose Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python 3.5 ΠΈ Π²Ρ‹ΡˆΠ΅ , опрСдСляСтся с использованиСм def math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0) , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ , Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ поставлСны ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ , Π½ΠΎ ΠΏΠΎ ТСланию Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΈ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹.

Python 2.x Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с kwargs :

def func(arg1, arg2=10, **kwargs):
  try:
    kwarg1 = kwargs.pop("kwarg1")
  except KeyError:
    raise TypeError("missing required keyword-only argument: 'kwarg1'")
  kwarg2 = kwargs.pop("kwarg2", 2)
  # function body ...

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΏΠΎ имСнованию

Π£ΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ наимСнования Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² args ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов kwargs просто ΡƒΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π²Π°ΠΌ нравится , Π½ΠΎ это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ соглашСнию , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π·Π½Π°Π»ΠΈ , Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сам ΠΏΠΎΡ‚ΠΎΠΌ Ρ‚Π°ΠΊ поТалуйста.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π›ΡŽΠ±Π°Ρ функция ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π½ΠΈ с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ *args ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ **kwargs , Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΊΠ°ΠΆΠ΄Ρ‹Ρ…. Π’Π°ΠΊΠΆΠ΅ *args Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ послСдним Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΈ **kwargs Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ послСдним ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ошибок синтаксиса.

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ΠΎ функциях влоТСния с Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

МоТно Π³Π½Π΅Π·Π΄ΠΎΠ²Ρ‹Π΅ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ обычная ΡƒΡΠ»ΠΎΠ²Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты , Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΡƒΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ , Π½ΠΎ Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ Π²Π½ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с * прСфиксом ΠΈ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами Π°Ρ€Π³ с ** приставкой , ΠΈΠ½Π°Ρ‡Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ список ΠΈΠ»ΠΈ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ, Π° kwargs — ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

def fn(**kwargs):
  print(kwargs)
  f1(**kwargs)
def f1(**kwargs):
  print(len(kwargs))
fn(a=1, b=2)
# {'a': 1, 'b': 2}
# 2 

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ измСняСмыми Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

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

ОбъяснСниС

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΠ· — Π·Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚ , ΠΊΠΎΠ³Π΄Π° функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°, Π° Π½Π΅ (ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки) , ΠΊΠΎΠ³Π΄Π° функция вызываСтся. ЗначСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ сохраняСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ __defaults__ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‡Π»Π΅Π½Π°.

def f(a, b=42, c=[]):
    pass
print(f.__defaults__)
# (42, [])

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

def append(elem, to=[]):
  # Π­Ρ‚ΠΎΡ‚ Π²Ρ‹Π·ΠΎΠ² append() измСняСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ "to"
  to.append(elem)
  return to
append(1)
# [1]
# ДобавляСт Π΅Π³ΠΎ Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ список
append(2)  
# [1, 2]
# ИспользованиС вновь созданного списка Π΄Π°Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
append(3, [])  
# [3]
# ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² снова Π΄ΠΎΠ±Π°Π²ΠΈΡ‚
# список ΠΊ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌΡƒ списку
append(4)   
# [1, 2, 4]

РСшСниС

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ , Ρ‡Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ всСгда ΠΎΠ΄ΠΈΠ½ указываСтся Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ ваш Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠžΠ±Ρ‰Π°Ρ ΠΈΠ΄ΠΈΠΎΠΌΠ° , Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ этого , ΠΊΠΎΠ³Π΄Π° измСняСмый Ρ‚ΠΈΠΏΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, являСтся Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ None (Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΉ) Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ , Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ фактичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° , Ссли ΠΎΠ½ΠΎ Ρ€Π°Π²Π½ΠΎ None .

def append(elem, to=None):
  if to is None:
    to = []
    
  to.append(elem)
  return to

Лямбда Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

lambda ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово создаСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ½Π»Π°ΠΉΠ½, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого выраТСния — это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅.

Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

def greeting():
  return "Hello"

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠΎΠ³Π΄Π° называСтся ΠΊΠ°ΠΊ:

print(greeting())
 

ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

# Hello

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

greet_me = lambda: "Hello"
 

Π­Ρ‚ΠΎ создаСт Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ greet_me , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Hello.ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ , Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ return ΠΏΡ€ΠΈ создании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с лямбда. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС : автоматичСски возвращаСтся.

ПослС присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ обычная функция:

print(greet_me())
 

ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

# Hello

lambda — s ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚ΠΎΠΆΠ΅:

strip_and_upper_case = lambda s: s.strip().upper()
strip_and_upper_case("  Hello   ")

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку:

# HELLO

Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² / ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов, ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

greeting = lambda x, *args, **kwargs: print(x, args, kwargs)
greeting('hello', 'world', world='world')
 

ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

# hello('world',) {'world': 'world'}

lambda — Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ , Π³Π΄Π΅ ΠΎΠ½ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ( ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ , с sorted , filter ΠΈ map ).

НапримСр, эта строка сортируСт список строк, игнорируя ΠΈΡ… рСгистр ΠΈ игнорируя ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΈ Π² ΠΊΠΎΠ½Ρ†Π΅:

sorted( [" foo", "    bAR", "BaZ    "], key=lambda s: s.strip().upper())
 
# ['   bAR', 'BaZ   ', 'foo']

Бписок сортировки просто игнорируя ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹:

sorted( [" foo", "    bAR", "BaZ    "], key=lambda s: s.strip())
# ['BaZ   ', '  bAR', 'foo']

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с map :

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с числовыми списками:

my_list = [3, -4, -2, 5, 1, 7]
sorted( my_list, key=lambda x: abs(x))
# [1, -2, 3, -4, 5, 7]
list( filter( lambda x: x>0, my_list))
# [3, 5, 1, 7]
list( map( lambda x: abs(x), my_list))
[3, 4, 2, 5, 1, 7]

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (с / Π±Π΅Π· Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

def foo(msg):
    print(msg)
greet = lambda x = "hello world": foo(x)
greet()
 

ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅Ρ‚:

hello world
 

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

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΈΠ·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ

Π‘Π½Π°Ρ‡Π°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ:

  • Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€): фактичСская пСрСмСнная пСрСдаСтся Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ;
  • ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€): ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ пСрСмСнная, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π’ Python, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎ заданию (Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков, Π³Π΄Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ / задания / указатСля).

ΠœΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ измСнСнию Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° (Ссли Ρ‚ΠΈΠΏ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° являСтся измСняСмым).

def foo(x):   # здСсь Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€
    x[0] = 9  # Π­Ρ‚ΠΎ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ 1Ρ‹ΠΉ элСмСнт x, 
    		  # Ρ‚Π°ΠΊ ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт y Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ Π½ΠΈΠΆΠ΅
    print(x)
y = [4, 5, 6]
foo(y)        # Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ foo с y Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°
# [9, 5, 6]   # список, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ x, Π±Ρ‹Π» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½
print(y)           
# [9, 5, 6]   # список, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ y, Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π» Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½

ΠŸΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚.

def foo(x):        # здСсь x - ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ
				   # foo(y), ΠΌΡ‹ присваиваСм y Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ x
    x[0] = 9       # Π­Ρ‚ΠΎ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ список, ΠΊΠ°ΠΊ x, Ρ‚Π°ΠΊ ΠΈ y
    x = [1, 2, 3]  # x Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ список 
				   # (y Π½Π΅ затрагиваСтся)
    x[2] = 8       # Π­Ρ‚ΠΎ ΠΌΡƒΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ список x, Π° Π½Π΅ список y
y = [4, 5, 6]      # y is the argument, x is the parameter
foo(y)             # ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали Β«x = yΒ», 
			 	   # Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ ΠΊ строкС 1.
y
# [9, 5, 6] 

Π’ Python, ΠΌΡ‹ Π½Π° самом Π΄Π΅Π»Π΅ Π½Π΅ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ связываСм (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΡƒΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ, ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ (рассматриваСмыС ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π°) ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

  • НСизмСнныС: Π¦Π΅Π»Ρ‹Π΅, строки, ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ВсС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΊΠΎΠΏΠΈΠΈ.
  • Mutable: списки, словари, Π½Π°Π±ΠΎΡ€Ρ‹, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΌΡƒΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.
x = [3, 1, 9]
y = x
x.append(5)    # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ список, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ x ΠΈ y,
			   # ΠΎΠ±Π° x ΠΈ y привязаны ΠΊ [3, 1, 9]
x. sort()       # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ список, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ x ΠΈ y
			   # (сортировка Π½Π° мСстС)
               
x = x + [4]    # НС измСняСт список (создаСт копию 
			   # Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для x, Π° Π½Π΅ для y)
z = x          # z Ρ€Π°Π²Π½ΠΎ x([1, 3, 9, 4])
x += [6]       # Π˜Π·ΠΌΠ΅Π½ΡΠ΅Ρ‚ список, ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Π½Ρ‹ΠΉ ΠΊΠ°ΠΊ x,
			   # Ρ‚Π°ΠΊ ΠΈ z (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ).
               
x = sorted(x)  # НС измСняСт список (создаСт копию для x)
x
# [1, 3, 4, 5, 6, 9]
y
# [1, 3, 5, 9]
z
# [1, 3, 5, 9, 4, 6] 

Return

Замыкания Π² Python ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ Π²Ρ‹Π·ΠΎΠ² makeInc создаСт привязку для x , ссылка Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inc.ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² makeInc создаСт Π½ΠΎΠ²Ρ‹ΠΉ экзСмпляр этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ экзСмпляр ΠΈΠΌΠ΅Π΅Ρ‚ ссылку Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΡΠ²ΡΠ·Ρ‹Π²Π°Π½ΠΈΡŽ x .

def makeInc(x):
  def inc(y):
    # x "присоСдинСн" ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ inc
    return y + x
  return inc
incOne = makeInc(1)
incFive = makeInc(5)
incOne(5) 
# 6
incFive(5)
# 10

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΈ влоТСнная функция ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ наслСдуСт всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ Π΅Π΅ срСды, Π² этой конструкции влоТСнная функция ΠΈΠΌΠ΅Π΅Ρ‚ доступ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊ унаслСдованным ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡ…

def makeInc(x):
  def inc(y):
    # ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ x Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ
    x += y
    return x
  return inc
incOne = makeInc(1)
incOne(5) 
# UnboundLocalError: local variable 'x' referenced before assignment

Python 3 ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ nonlocal заявлСниС  для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ закрытия с Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ функциями.

def makeInc(x):
  def inc(y):
    nonlocal x # Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x
    x += y
    return x
  return inc
incOne = makeInc(1)
incOne(5) 
# 6

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

РСкурсивная функция — это функция, которая Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Π² своСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ. НапримСр, матСматичСская функция, Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, опрСдСляСтся factorial(n) = n*(n-1)*(n-2)*...*3*2*1.ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ

def factorial(n):
  #n здСсь Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ†Π΅Π»Ρ‹ΠΌ числом
  if n == 0:
    return 1
  else:
    return n*factorial(n-1)

Π²Ρ‹Ρ…ΠΎΠ΄Ρ‹ здСсь:

factorial(0)
#1
factorial(1)
#1
factorial(2)
#2
factorial(3)
# 6

ΠΊΠ°ΠΊ ΠΈ оТидалось. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ , Ρ‡Ρ‚ΠΎ эта функция являСтся рСкурсивной , ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ return factorial(n-1) , Π³Π΄Π΅ функция Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ сСбя Π² своСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ.

НСкоторыС рСкурсивныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда , Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ лямбда — Π±Ρ‹ Ρ‡Ρ‚ΠΎ — Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅ этого:

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

Ѐункция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹ΡˆΠ΅.

ΠŸΡ€Π΅Π΄Π΅Π» рСкурсии

БущСствуСт ΠΏΡ€Π΅Π΄Π΅Π» Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ рСкурсии, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python. Когда ΠΏΡ€Π΅Π΄Π΅Π» достигнут, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ RuntimeError:

def cursing(depth):
  try:
    cursing(depth + 1) # actually, re-cursing
  except RuntimeError as RE:
    print('I recursed {} times!'.format(depth))
cursing(0)
# I recursed 998 times! 

МоТно ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ рСкурсии ΠΏΡ€Π΅Π΄Π΅Π» Π³Π»ΡƒΠ±ΠΈΠ½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ sys.setrecursionlimit(limit) ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ этот ΠΏΡ€Π΅Π΄Π΅Π» sys.getrecursionlimit() .

import sys 
sys.setrecursionlimit(2000)
cursing(0)
# I recursed 1998 times! 

Из Python 3.5, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ составляСт RecursionError , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹ΠΌ ΠΎΡ‚ RuntimeError .

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python ΡΠ²Π»ΡΡŽΡ‚ΡΡ пСрвоклассными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ. Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² любой области

def fibonacci(n):
  def step(a,b):
    return b, a+b
  a, b = 0, 1
  for i in range(n):
    a, b = step(a, b)
  return a

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Ρ…Π²Π°Ρ‚Π° ΠΈΡ… ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ области видимости ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΈΠ΄ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°

def make_adder(n):
  def adder(x):
    return n + x
  return adder
  
add5 = make_adder(5)
add6 = make_adder(6)
add5(10)
#15
add6(10)
#16
def repeatedly_apply(func, n, x):
  for i in range(n):
    x = func(x)
  return x
repeatedly_apply(add5, 5, 1)
# 26 

Π˜Ρ‚Π΅Ρ€Π°Ρ†ΠΈΡ ΠΈ распаковка словаря

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅, ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов (kwargs). Π’ΠΎΡ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ ΠΈ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ использованиС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

def unpacking(a, b, c=45, d=60, *args, **kwargs):
    print(a, b, c, d, args, kwargs)
unpacking(1, 2)
# 1 2 45 60 () {}
unpacking(1, 2, 3, 4)
# 1 2 3 4 () {}
unpacking(1, 2, c=3, d=4)
# 1 2 3 4 () {}
unpacking(1, 2, d=4, c=3)
# 1 2 3 4 () {}
pair = (3,)
unpacking(1, 2, *pair, d=4)
# 1 2 3 4 () {}
unpacking(1, 2, d=4, *pair)
# 1 2 3 4 () {}
unpacking(1, 2, *pair, c=3)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'c'
unpacking(1, 2, c=3, *pair)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'c'
args_list = [3]
unpacking(1, 2, *args_list, d=4)
# 1 2 3 4 () {}
unpacking(1, 2, d=4, *args_list)
#1 2 3 4 () {}
unpacking(1, 2, c=3, *args_list)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'c'
unpacking(1, 2, *args_list, c=3)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'c'
pair = (3, 4)
unpacking(1, 2, *pair)
# 1 2 3 4 () {}
unpacking(1, 2, 3, 4, *pair)
# 1 2 3 4 (3, 4) {}
unpacking(1, 2, d=4, *pair)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
unpacking(1, 2, *pair, d=4)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
args_list = [3, 4]
unpacking(1, 2, *args_list)
# 1 2 3 4 () {}
unpacking(1, 2, 3, 4, *args_list)
# 1 2 3 4 (3, 4) {}
unpacking(1, 2, d=4, *args_list)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
unpacking(1, 2, *args_list, d=4)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
arg_dict = {'c':3, 'd':4}
unpacking(1, 2, **arg_dict)
# 1 2 3 4 () {}
arg_dict = {'d':4, 'c':3}
unpacking(1, 2, **arg_dict)
# 1 2 3 4 () {}
arg_dict = {'c':3, 'd':4, 'not_a_parameter': 75}
unpacking(1, 2, **arg_dict)
# 1 2 3 4 () {'not_a_parameter': 75
unpacking(1, 2, *pair, **arg_dict)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
unpacking(1, 2, 3, 4, **arg_dict)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'd'
# ΠŸΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ 
# Π½Π°Π΄ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²
unpacking(1, 2, **arg_dict, c=3)
# 1 2 3 4 () {'not_a_parameter': 75}
unpacking(1, 2, 3, **arg_dict, c=3)
# Traceback (most recent call last):
#  File "<stdin>", line 1, in <module>
# TypeError: unpacking() got multiple values for argument 'c' 

ΠŸΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ использованиС ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²

ВсС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ послС ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠΈ Π² сигнатурС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов.

def f(*a, b):
    pass
f(1, 2, 3)
# TypeError: f() missing 1 required keyword-only argument: 'b'
 

Π’ Python 3 ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΡƒ Π² сигнатурС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡΡ‚Π°Π²ΡˆΠΈΠ΅ΡΡ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова.

def f(a, b, *, c):
    pass
f(1, 2, 3)
# TypeError: f() takes 2 positional arguments but 3 were given
f(1, 2, c=3)
# No error 
2$ Π΄ΠΎ $\R$. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ с функциями Π² Π±ΠΎΠ»Π΅Π΅ абстрактных условиях, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ; это наша Ρ†Π΅Π»ΡŒ. Π’ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… послСдних Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π³Π»Π°Π²Ρ‹ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для изучСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… интСрСсных Ρ‚Π΅ΠΌ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ мноТСств.

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· мноТСства $A$ Π² мноТСство $B$ ΠΌΡ‹ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ $f$ Ρ‚Π°ΠΊΠΎΠ΅, Ρ‡Ρ‚ΠΎ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ $a\in A$ сущСствуСт СдинствСнный $b\in B$ Ρ‚Π°ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ $f(a)=b$. ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ $A$ называСтся ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ $f$, Π° мноТСство $B$ называСтся ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½ . ΠœΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ $f$ ΠΈ $g$ Ρ€Π°Π²Π½Ρ‹ , Ссли ΠΎΠ½ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Π΄ΠΎΠΌΠ΅Π½ ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ codomain, ΠΈ Ссли для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ $a$ Π² Π΄ΠΎΠΌΠ΅Π½Π΅ $f(a)=g(a)$.

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

ΠœΡ‹ часто пишСм $f\colon A\to B$, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ $f$ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΎΡ‚ $A$ Π΄ΠΎ $B$. Иногда слово Β«ΠΊΠ°Ρ€Ρ‚Π°Β» ΠΈΠ»ΠΈ Β«ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Β» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вмСсто Β«Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΒ». Если $f\colon A\to B$ ΠΈ $f(a)=b$, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ $b$ β€” это -ΠΎΠ±Ρ€Π°Π· $a$ ΠΏΡ€ΠΈ $f$ , Π° $a$ β€” это -ΠΎΠ±Ρ€Π°Π· ΠΏΡ€ΠΎΠΎΠ±Ρ€Π°Π·Π° $b$. Π΄ΠΎ $f$ . Когда функция ясна исходя ΠΈΠ· контСкста, Ρ„Ρ€Π°Π·Ρƒ Β«ΠΌΠ΅Π½Π΅Π΅ $f$Β» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.1. Π’Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ со ΠΌΠ½ΠΎΠ³ΠΈΠΌΠΈ функциями $f\colon \R\to \R$: ΠŸΠΎΠ»ΠΈΠ½ΠΎΠΌΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, тригономСтричСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Часто Π²Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ с функциями с ΠΊΠΎΠ΄ΠΎΠΌΠ΅Π½ΠΎΠΌ $\R$ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ подмноТСство $\R$. НапримСр, $f(x)=\sqrt x$ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΌΠ΅Π½ $[0,\infty)$ ΠΈ $f(x)=1/x$ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄ΠΎΠΌΠ΅Π½ $\{x\in \R : x\ne 0\}$. Π›Π΅Π³ΠΊΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ подмноТСство плоскости Π΅ΡΡ‚ΡŒ Π³Ρ€Π°Ρ„ функция $f\colon \R\to \R$ Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° каТдая Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ линия пСрСсСкаСт Π΅Π³ΠΎ Ρ€ΠΎΠ²Π½ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅. Если эта Ρ‚ΠΎΡ‡ΠΊΠ° $(a,b)$, Ρ‚ΠΎ $f(a)=b$. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.2. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… мноТСствах ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, пСрСчислив всС задания. Если $A=\{1,2,3,4\}$ ΠΈ $B=\{r,s,t,u,v\}$, Ρ‚ΠΎ «$f(1)= t,f(2)= s,f(3)= u,f(4)= t$» опрСдСляСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ $A$ Π΄ΠΎ $B$. Π—Π°Π΄Π°Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ, Π±Π΅Π· обращСния ΠΊ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.3 Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями ΠΈΠ· $A=\{1,2,3,4,5\}$ Π² $B=\{r,s,t,u\}$: $$ \matrix{f(1)= t & \quad & g(1)=u\cr f(2)= s & \quad & g(2)=r\cr f(3)= r & \quad & g(4)=s\cr f(3)= u & \quad & g(5)=t\cr f(4)= u & \quad & \cr f(5)= r & \quad & \cr} $$ ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ $f$ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ $3$ Π² Π΄Π²Π° значСния, Π° $g$ Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ $3$. ΠΊ Π»ΡŽΠ±Ρ‹ΠΌ значСниям. ΠŸΡ€ΠΈ пСрСчислСнии Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ элСмСнты Π΄ΠΎΠΌΠ΅Π½Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Ρ€ΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. (Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ codomain ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Π° ΠΈΠ»ΠΈ Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ вовсС. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4.1.2, элСмСнт $t$ Π΄ΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΏΡ€ΠΎΠΎΠ±Ρ€Π°Π·Π°, Π° $r$ ΠΈ $v$ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΌΡ‹ обсудим это ситуация ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ описана Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ….) $\square$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.4. Если $A$ ΠΈ $B$ нСпустыС мноТСства ΠΈ $b_0$ β€” фиксированный элСмСнт $B$, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ константу Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ $f\colon A\to B$ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ $f(a)=b_0$ для всСх $a\in $. ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ $A$ Π΄ΠΎ $B$ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, сколько элСмСнты $B$. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.5. Для мноТСства $A$ ΠΌΡ‹ опрСдСляСм тоТдСствСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ $i_A\colon A\to A$ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ $i_A(a)=a$ для всС $a\in A$. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, функция тоТдСства ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ всС элСмСнт Π½Π° сСбя. Π₯отя это каТСтся довольно Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠ΅ΠΉ, это ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈ Π²Π°ΠΆΠ½ΠΎ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ тоТдСства Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ 0 Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ слоТСнию ΠΈΠ»ΠΈ 1 ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.6. Если $A\subseteq B$, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ $f\colon A\to B$ Π½Π° $f(a)=a$ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ $a\in A$. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° $i_A$; СдинствСнный Ρ€Π°Π·Π½ΠΈΡ†Π° Π² ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 4.1.7. Если $f\colon A\to B$ ΠΈ $g\colon B\to C$ β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ $g\circ f\colon A\to C$ ΠΏΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ $(g\circ f)(a)=g(f(a))$ для всСх $Π°\Π² А$. Π­Ρ‚ΠΎ называСтся состав ΠΈΠ· Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ $f$ β€” это пСрвая функция, которая примСняСтся ΠΊ элСмСнту $a$, хотя ΠΎΠ½ ΡƒΠΊΠ°Π·Π°Π½ справа. Π­Ρ‚ΠΎΡ‚ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»Π° слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΏΡƒΡ‚Π°Π½Π½ΠΎΡΡ‚ΡŒ сознания. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$ 9+\cup\{0\}\to \R$ опрСдСляСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ $(g\circ f)(x)=\sin\sqrt x$. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ $(f\circ g)(x)=\sqrt{\sin x}$ ΠΈΠΌΠ΅Π΅Ρ‚ смысл Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚Π°ΠΊΠΈΡ… $x$, Ρ‡Ρ‚ΠΎ $\sin x\ge 0$. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, $f\circ g$ ΠΈ $g\circ f$ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π²Π½Ρ‹, ΠΈ (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС) ΠΈΡ… Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.9 Если $A=\{1,2,3,4\}$, $B=\{r,s,t,u\}$, $C=\{\$,\%,\#,\&\ }$ ΠΈ $$ \matrix{ f(1) & = u &\quad g(r)&= \%\cr f(2) & = r &\quad g(s)&= \#\cr f(3) & = s &\quad g(t)&= \$\cr f(4) & = u &\quad g(u)&= \$\cr } $$ Ρ‚ΠΎΠ³Π΄Π° $$ \eqalign{ (g\circ f)(1) & = \$ \cr (g\circ f)(2) & = \% \cr (g\circ f)(3) & = \# \cr (g\circ f)(4) & = \$ \cr} $$ $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. 1.10. Если $A\subseteq B$, $f\colon A\to B$ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 4.1.6) ΠΈ $g\colon B\to C$ β€” функция, Ρ‚ΠΎ $g\circ f\colon A\to C$ называСтся ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‚ $g$ Π΄ΠΎ $A$ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ записываСтся $Π³\Π²Π΅Ρ€Ρ‚_А$. Для всСх $a\in A$ $$ Π³\Π²Π΅Ρ€Ρ‚_А(Π°)=Π³(Ρ„(Π°))=Π³(Π°), $$ поэтому $g\vert_A$ β€” это Ρ‚Π° ΠΆΠ΅ самая функция, Ρ‡Ρ‚ΠΎ ΠΈ $g$, Π½ΠΎ с мСньшим Π΄ΠΎΠΌΠ΅Π½. $\ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚$

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ простоС, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ наблюдСниС:

Π’Π΅ΠΎΡ€Π΅ΠΌΠ° 4.1.11 Если $f\colon A\to B$, Ρ‚ΠΎ $f\circ i_A=f=i_B\circ f$.

Π”ΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ. ВсС Ρ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Π΄ΠΎΠΌΠ΅Π½ $A$ ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Ρ‹ΠΉ Π΄ΠΎΠΌΠ΅Π½ $B$. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ $a\in A$ $$ (f\circ i_A)(a)=f(i_A(a))=f(a)=i_B(f(a))=(i_B\circ f)(a). $$$\qed$

Аналогичный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, композиция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ассоциативна, Ρ‚. Π΅. $(f\circ g)\circ h=f\circ (g\circ h)$ (см. ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.1 Π Π΅ΡˆΠΈΡ‚Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ назначСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· $A=\{1,2,3,4\}$ Π² $B=\{r,s,t,u,v\}$. $$ \matrix{f(1)=s &\quad & g(1)= t &\quad & h(1)=v \cr f(2)=t &\quad & g(2)= r &\quad & h(2)=u \cr f(4)=u &\quad & g(3)= s &\quad & h(3)=t \cr &\quad & g(4)= r &\quad & h(2)=s \cr &\quad & &\quad & h(4)=r \cr } $$

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4. 1.2 ΠŸΡƒΡΡ‚ΡŒ $f\Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ \{s,t,u,v,w,x\}\to \{1,2,3,4,5\}$ ΠΈ $g\Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ \{1,2,3,4,5\}\to \{m,n,o,p\}$ опрСдСляСтся ΠΊΠ°ΠΊ: $$ \matrix{f(s) = 2 &\quad& g(1) = m \cr f(t) = 1 &\quad& g(2) = n \cr f(u) = 4 &\quad& g(3) = p \cr f(v) = 2 &\quad& g(4) = o \cr f(w) = 1 &\quad& g(5) = m \cr f(x) = 2 &&&\cr} $$ НайдитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: 92$. НайдитС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.4 ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ $f$ ΠΈ $g$ ΡΠ²Π»ΡΡŽΡ‚ΡΡ функциями ΠΈΠ· $A$ Π² $A$. Если $f\circ f=g\circ g$, слСдуСт Π»ΠΈ ΠΎΡ‚ΡΡŽΠ΄Π°, Ρ‡Ρ‚ΠΎ $f=g$?

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.5 ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ $A$ ΠΈ $B$ β€” ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ нСпустыС мноТСства с $m$ ΠΈ $n$ элСмСнтами. соотвСтствСнно. Бколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ $A$ Π΄ΠΎ $B$?

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.6 ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ $f$ ΠΈ $g$ β€” Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· $A$ Π² $B$. Если $A=X\Ρ‡Π°ΡˆΠΊΠ° Y$, Π΄ΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ $f=g$ Ρ‚ΠΎΠ³Π΄Π° ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° $f\vert_X=g\vert_X$ ΠΈ $f\vert_Y=g\vert_Y$.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 4.1.7 ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ $f\colon C\to D$, $g\colon B\to C$ ΠΈ $h\colon A\to B$ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π”ΠΎΠΊΠ°ΠΆΠΈΡ‚Π΅ $(f\circ g)\circ h=f\circ (g\circ h)$.

Базовая структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ C с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ ДокумСнтация ΠΏΠΎ языку программирования C Π˜Π›Π˜ Базовая структура языка C с ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ Β  ПослС прочтСния этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ смоТСтС ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΊΠΎΠ»ΠΎ Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Π’ C , Π Π°Π·Π΄Π΅Π» ссылок Π½Π° C , Π Π°Π·Π΄Π΅Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π½Π° C , Π Π°Π·Π΄Π΅Π» основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π° C ΠΈ Π Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° C, Ρ€Π°Π·Π΄Π΅Π» Β«Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ докумСнтация» Π½Π° C.



    БыстрыС ссылки

  • Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
  • БСкция связи
  • Π Π°Π·Π΄Π΅Π» опрСдСлСния
  • Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Π°Ρ дСкларация Π Π°Π·Π΄Π΅Π»
  • БСкция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Main()
  • Π Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Базовая структура языка C:

КаТдая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° C состоит ΠΈΠ· 6 основных Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ², эти Ρ€Π°Π·Π΄Π΅Π»Ρ‹ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π Π°Π·Π΄Π΅Π» ссылок, Π Π°Π·Π΄Π΅Π» ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ, Π Π°Π·Π΄Π΅Π» Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… объявлСний, Π Π°Π·Π΄Π΅Π» основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ объяснСниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Π½ΠΈΠΆΠ΅.

Базовая структура языка программирования C

Β — Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ состоит ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° строк ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… указываСтся имя программиста, Π΄Π°Ρ‚Π° ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свСдСния ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π Π°Π·Π΄Π΅Π» Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ прСдставлСниС ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² любом мСстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ВСкст ΠΌΠ΅ΠΆΠ΄Ρƒ /* И */ появляСтся ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ Π² C.

Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: /* Π­Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ */

— Π Π°Π·Π΄Π΅Π» ссылок: Π Π°Π·Π΄Π΅Π» ссылок прСдоставляСт компилятору инструкции для связывания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ #include .

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

— Π Π°Π·Π΄Π΅Π» глобального объявлСния: Π Π°Π·Π΄Π΅Π» глобального объявлСния содСрТит глобальноС объявлСниС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. НСкоторыС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Global Variables ΠΈ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… объявлСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ всСх Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

— БСкция Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Main(): Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΡΠ΅ΠΊΡ†ΠΈΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ main() Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ c. Π­Ρ‚ΠΎΡ‚ Ρ€Π°Π·Π΄Π΅Π» состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй:Β  ДСкларация Π§Π°ΡΡ‚ΡŒ И ИсполняСмая Ρ‡Π°ΡΡ‚ΡŒ .

Β Β  Π’ части объявлСния ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ всС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² исполняСмой части.

— Π Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Π Π°Π·Π΄Π΅Π» ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ содСрТит всС опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для выполнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π­Ρ‚ΠΈ опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² основной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ сразу послС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ main(), хотя ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π² любом порядкС.

ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *