Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

Lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python с ΠΈΡ… синтаксисом ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ

1. Lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

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

Когда ΠΌΡ‹ создаСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python, ΠΌΡ‹ всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def. ΠŸΡ€ΠΈ этом, дСлая Ρ‚Π°ΠΊ, ΠΌΡ‹ Π½Π°Π·Π½Π°Ρ‡Π°Π΅ΠΌ ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ имя. Но ΠΈΠ½ΠΎΠ³Π΄Π° Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ ΠΈΠ»ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Ρ…ΠΎΡ‚Π΅Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ лишним, ΠΈ ΠΊΠ°ΠΊ Ρ€Π°Π· здСсь Π½Π°ΠΌ ΠΏΡ€ΠΈΠ΄ΡƒΡ‚ Π½Π° ΠΏΠΎΠΌΠΎΡ‰ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

2. Π§Ρ‚ΠΎ собой прСдставляСт lambda-функция Π² Python?

Lambda-функция позволяСт Π½Π°ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎ. Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° являСтся ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, Π° Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Π’ΠΎ Π΅ΡΡ‚ΡŒ лямбда-функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ Ρƒ Π½Π΅Π΅ Π΅ΡΡ‚ΡŒ нСявный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ синтаксис lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Python.

Lambda-функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚ΠΎΠΌ мСстС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ Π΅Π³ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅.

Как ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ?

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово lambda.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π² дальнСйшСм.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ e являСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π° e-2 Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

ПослС назначСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΡƒΡŽ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΊΠ°ΠΊ ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, взяв Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ†Π΅Π»ΠΎΠ΅ число 1.

4. Π§Π΅ΠΌ Π½Π° самом Π΄Π΅Π»Π΅ являСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python

Как ΠΌΡ‹ смогли ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, lambda Π² Python Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Но Ρƒ нас ΠΌΠΎΠΆΠ΅Ρ‚ появится вопрос, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ собой прСдставляСт Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅? Π’ ΠΎΠ±Ρ‰Π΅ΠΌ смыслС, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” это ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±ΡƒΠΊΠ² символов ΠΈ чисСл, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, ΠΊ выраТСниям ΠΌΠΎΠΆΠ½ΠΎ отнСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ записи.

Но ΠΏΡ€ΠΈ этом, Ρ‚Π°ΠΊΠΈΠ΅ записи ΠΊΠ°ΠΊ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π΄Π°ΠΆΠ΅ None.

5. Когда Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² Python?

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ€Π°Π½Π΅Π΅, lambda-функция Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ нСсколько Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого выраТСния ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ возвращаСтся ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ИспользованиС lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ситуациях. Π’Π°ΠΊΠΈΡ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ:

1. Когда Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для исполнСния Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Допустим, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printhello() Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° экран слова Β«ΠŸΡ€ΠΈΠ²Π΅Ρ‚Β». Π’ΠΎΠ³Π΄Π° Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ всСго ΠΎΠ΄Π½Π° строчка:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ сдСлаСм Ρ‚ΠΎ ΠΆΠ΅ самоС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ здСсь ΠΌΡ‹ Π½Π΅ использовали Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Но вСрнСмся ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим ΠΌΡ‹ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² дальнСйшСм, Π° ΠΏΠΎΠΊΠ° Π΄Π°Π²Π°ΠΉΡ‚Π΅ обратимся ΠΊ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ.

ΠžΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Pythonist. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒΡŽ Β«Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Python 3Β».

2. Когда Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·

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

6. ЗначСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python

Π’ Python, ΠΊΠ°ΠΊ Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, C++, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. Но ΠΊΠ°ΠΊ Π½Π°ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ? Допустим функция func1() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 2 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° a ΠΈ b. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ пСрСдаст лишь ΠΎΠ΄ΠΈΠ½ ΠΈΠ· этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ? Как Ρ€Π°Π· для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ошибки, ΠΈΠ»ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ вашим ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Π—Π΄Π΅ΡΡŒ значСниями ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для a ΠΈ b ΡΠ²Π»ΡΡŽΡ‚ΡΡ соотвСтствСнно 2 ΠΈ 3. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, запись Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ:

7. Бинтаксис lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python

ΠœΡ‹ ΡƒΠΆΠ΅ посмотрСли, ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚cя lambda-функция Π² Python, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΈ всС, Ρ‡Ρ‚ΠΎ состоит ΠΈΠ· частСй, Π΅Π΅ объявлСниС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹. Π’Π°ΠΊ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ посмотрим, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ, Π° Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ с lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.

a. АргумСнты Π² Python

Одна ΠΈΠ»ΠΈ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π·Π°Ρ€Π°Π½Π΅Π΅. Но Ссли Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ…, Ρ‚ΠΎ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π·Π°Π΄Π°Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Π»ΠΈΠ±ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π—Π΄Π΅ΡΡŒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ значСния ΠΈ a ΠΈ b

Π£ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a всС Π΅Ρ‰Π΅ отсутствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

НаконСц здСсь, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, всС ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚.

ΠžΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Pythonist. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒΡŽ Β«ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Python: try ΠΈ exceptΒ».

b. ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π£ΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Она ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ Π±Π΅Π· Π½ΠΈΡ….

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π² качСствС выраТСния ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ print()

Π’Ρ‹Π²ΠΎΠ΄ Π½Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ сам собой, β€” пропуск Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся Π²ΠΏΠΎΠ»Π½Π΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ.

c. ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Π΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π°ΡˆΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· выраТСния.

ЯсноС Π΄Π΅Π»ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ сработало, Π΄Π° ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ это ΠΊΠ°ΠΊ Ρ€Π°Π· ΠΈ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚? Π‘Π΅Π· выраТСния функция Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ смысла.

8. БовмСстноС использованиС Lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ со встроСнными функциями Python

Π‘ΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python, Ρ‚Π°ΠΊΠΈΠ΅ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΊ filter() ΠΈΠ»ΠΈ map(), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΆΠ΅ рассмотрим ΠΈΡ… ΠΏΠΎΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅.

Для Π½Π°Ρ‡Π°Π»Π° возьмСм список ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ numbers

Π·Π°Ρ‚Π΅ΠΌ возьмСм lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ содСрТания.

a. filter()

Ѐункция filter() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ список для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ list(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ filter Π² список.

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

ΠžΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ Pythonist. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΡΡ‚Π°Ρ‚ΡŒΡŽ «Бписки Π² Python: ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ, доступ ΠΊ элСмСнтам».

b. map()

Ѐункция map() Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ filter() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ выраТСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² спискС. Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΊΠ°ΠΊ это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΡƒΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΠΎΠΌ Π½Π°ΠΌ спискС numbers.

c. reduce()

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

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим ΠΊΠ°ΠΊ получился Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρƒ нас получаСтся 5.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ возьмСм Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

Если ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС для x+y, Ρ‚ΠΎ Ρƒ вас получится 55.

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

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

Если Ρƒ вас появились ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ вопросы, поТалуйста, оставляйтС ΠΈΡ… Π² коммСнтариях.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python: ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ – это Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ слоТноС, доступноС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌ программистам. Но ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Π»Π΅Π³ΠΊΠΎ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² своём ΠΊΠΎΠ΄Π΅.

Π’ Python ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ создаём Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊ:

НапримСр, функция, ΡƒΠ΄Π²Π°ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚:

ИмСнно здСсь цСлСсообразно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚.ΠΊ. Π΅Ρ‘ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ прямо Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ мСстС, Π³Π΄Π΅ ΠΎΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ. А это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ мСньшС строк ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π°ΠΌ Π½Π΅ придётся ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΈΠΌΠ΅Π½Π΅ΠΌ, которая Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ мСсто Π² памяти ΠΈ пригодится лишь ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹.

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

Бинтаксис лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ лямбда-функциям нСльзя Π΄Π°Ρ‚ΡŒ имя, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Π΅ (Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ) ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ.

АргумСнтов Π² Π½ΠΈΡ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сколько ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Π»Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ΄Π½ΠΎ.

ΠœΠ°Ρ€ΠΊ Π›ΡƒΡ‚Ρ† Β«Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ PythonΒ»

Π‘ΠΊΠ°Ρ‡ΠΈΠ²Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³Ρƒ Ρƒ нас Π² Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

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

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3

Лямбда Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

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

Π‘Π΅Π· лямбды Π²Π°ΠΌ Π±Ρ‹ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ multiplyBy Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Лямбда-функция Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ всСго полстроки ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

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

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python для самых ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… β€” Π§Π°ΡΡ‚ΡŒ 1 β€” Lambda Ѐункция

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

Π― Ρ€Π΅ΡˆΠΈΠ» Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ эту ΡΠ΅Ρ€ΠΈΡŽ статСй, ΠΈΠ±ΠΎ ΡΡ‡ΠΈΡ‚Π°ΡŽ, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с Ρ‚ΠΎΠΉ стСной нСпонимания, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ столкнулся ΠΊΠΎΠ³Π΄Π°-Ρ‚ΠΎ я.

Π’Π΅Π΄ΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ статСй написаны Ρ‚Π°ΠΊΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Ρ‡Ρ‚ΠΎ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π² Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ (Π΄Π°Π»Π΅Π΅ ЀП), Ρ‚Π΅Π±Π΅ Π½Π°Π΄ΠΎ ΡƒΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π² ЀП. Π­Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я старался Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ максимально просто β€” Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ понятно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Ρ‘ ΡΡƒΡ‚ΡŒ ΠΌΠΎΠ³ ΡƒΠ»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ плСмянник, школьник, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСйчас Π΄Π΅Π»Π°Π΅Ρ‚ свои ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги Π² Python.

НСбольшоС ввСдСниС

Для Π½Π°Ρ‡Π°Π»Π°, Π΄Π°Π²Π°ΠΉΡ‚Π΅ разбСрСмся, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π² Ρ‡Π΅ΠΌ Π΅Π³ΠΎ особСнности, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ΠΎ, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Бтоп… А Π·Π°Ρ‡Π΅ΠΌ? Об этом написаны Ρ‚ΠΎΠ½Π½Ρ‹ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², Π΄Π° ΠΈ Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ судя ΠΏΠΎ всСму эта информация Π½Π΅ особо Π½ΡƒΠΆΠ½Π°. Π­Ρ‚Π° ΡΡ‚Π°Ρ‚ΡŒΡ написана для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π² ΠΊΠΎΠ΄Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ написан Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС. Но Ссли Π²Ρ‹ всС-Ρ‚Π°ΠΊΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² истории Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ‚ΡƒΡŽ Π²Π°ΠΌ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎ Ρ‚Π°ΠΊΠΈΡ… Π²Π΅Ρ‰Π°Ρ…, ΠΊΠ°ΠΊ

Чистая Ѐункция β€” Ѐункция которая являСтся Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΈ Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌΠΈ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹ΠΌΠΈ эффСктами.

Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция являлась чистой ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ β€” Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ Π½Π°Π±ΠΎΡ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

И ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ смСнС дня Π½Π΅Π΄Π΅Π»ΠΈ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ являСтся Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ) функция Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

Π‘Π°ΠΌΡ‹ΠΉ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π΅ Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это random:

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Π°ΠΆΠ½ΠΎΠ΅ качСство чистой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ это отсутствиС ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… эффСктов.

Ѐункция sort_by_sort ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ±ΠΎΡ‡Π½Ρ‹Π΅ эффСкты ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ измСняСт исходный список элСмСнтов ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚ΠΎ Ρ‚ΠΎ Π² консоль.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° функция sort_by_sorted Π½Π΅ мСняСт исходного массива ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ выводя Π΅Π³ΠΎ Π² консоль ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ.

ЧистыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈ Ρ‚Π΅ΠΌ Ρ‡Ρ‚ΠΎ:

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ΡΡˆΠ΅Π³ΠΎ порядка β€” Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ функция, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π‘ основами Ρ‡ΡƒΡ‚ΡŒ Ρ‡ΡƒΡ‚ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΡˆΠ°Π³Ρƒ.

Π˜Ρ‚Π°ΠΊ, Π½Π°Ρ‡Π½Π΅ΠΌ

Для Π½Π°Ρ‡Π°Π»Π° Π½Π°Π΄ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ β€” Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅. Π›ΠΈΡ‡Π½ΠΎ я знаю Π΄Π²Π΅ самыС часто ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ Π² повсСднСвном ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ β€” это ООП ΠΈ ЀП.

Если ΡƒΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒ совсСм ΠΈ ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ…, Ρ‚ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ эти Π΄Π²Π΅ ΠΏΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π­Ρ‚ΠΎ относится ΠΈ ΠΊ ЀП β€” взял ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, взял ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, поигрался с Π½ΠΈΠΌΠΈ ΠΈ Π²Ρ‹Π΄Π°Π» Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

НС стану Ρ€Π°ΡΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ всё, ΠΈΠ½Π°Ρ‡Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΎΠΎΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΠ»Π³ΠΎ. ЦСль Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ β€” ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ, Π° Π½Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈ Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, поэтому Ρ‚ΡƒΡ‚ ΠΌΡ‹ рассмотрим основныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· ЀП.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ своСм ЀП (ΠΊΠ°ΠΊ я Π΅Π³ΠΎ Π²ΠΎΡΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽ) β€” это просто ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½ΠΎΠ΅ написаниС ΠΊΠΎΠ΄Π°. Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ΄, написанный Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ стилС, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ довольно Π»Π΅Π³ΠΊΠΎ пСрСписан Π² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌ стилС Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства, Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΎ. ЦСль ЀП Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ простой, понятный ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π»Π΅Π³Ρ‡Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ мСньшС памяти, Π½Ρƒ ΠΈ ΠΊΡƒΠ΄Π° ΠΆΠ΅ Π±Π΅Π· этого β€” разумССтся, главная вСчная ΠΌΠΎΡ€Π°Π»ΡŒ программирования β€” DRY (Don’t Repeat Yourself β€” НС повторяйся).

БСйчас ΠΌΡ‹ с Π²Π°ΠΌΠΈ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΎΠ΄Π½Ρƒ ΠΈΠ· основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, которая примСняСтся Π² ЀП β€” Lambda Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΊΠ°ΠΊ Map, Zip, Filter ΠΈ Reduce.

Lambda функция

Lambda β€” это инструмСнт Π² python ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования для Π²Ρ‹Π·ΠΎΠ²Π° Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Многим это скорСС всСго Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ скаТСт ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ прояснит Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, поэтому я расскаТу Π²Π°ΠΌ просто ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ lambda Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€. НапримСр, Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ которая Π±Ρ‹ считала ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π° ΠΏΡ€ΠΈ извСстном радиусС.

Π€ΠΎΡ€ΠΌΡƒΠ»Π° ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ ΠΊΡ€ΡƒΠ³Π° это

Π³Π΄Π΅
S β€” это ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡ€ΡƒΠ³Π°
pi β€” матСматичСская константа равная 3.14 ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΈΠ· стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Math
r β€” радиус ΠΊΡ€ΡƒΠ³Π° β€” СдинствСнная пСрСмСнная ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ„ΠΎΡ€ΠΌΠΈΠΌ это всС Π² python:

Π’Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Π½ΠΎ это всё ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΊΡ€ΡƒΡ‡Π΅, Ссли Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ это Ρ‡Π΅Ρ€Π΅Π· lambda:

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятнСС, Π°Π½ΠΎΠ½ΠΈΠΌΠ½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π΅Ρ‘, Π½ΠΈΠ³Π΄Π΅ Π½Π΅ объявляя, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ΡˆΠ΅.

Лямбда функция Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ

Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ с двумя Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ. НапримСр, Π½Π°ΠΌ Π½Π°Π΄ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ объСм конуса ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ это всС Π² python:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² lambda Ρ„ΠΎΡ€ΠΌΠ΅:

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… здСсь Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ. Для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° посчитаСм объСм усСчСнного конуса, Π³Π΄Π΅ Ρƒ нас ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ 3 Ρ€Π°Π·Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.

ОбъСм усСчСнного конуса считаСтся ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

И Π²ΠΎΡ‚, ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² python классичСски:

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ с lambda:

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

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ списки Π² python с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ lambda довольно Π³Π»ΡƒΠΏΠΎ β€” это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ, ΠΊΠ°ΠΊ бряцаниС мускулами Ρ‚Π°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΎ совсСм Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Ну ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎ допустим, Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ список (Π½Π΅ Π²Π°ΠΆΠ½ΠΎ состоящий ΠΈΠ· строк ΠΈΠ»ΠΈ чисСл) ΠΈ Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π΅Π³ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ β€” Ρ‚ΡƒΡ‚ ΠΆΠ΅ ΠΏΡ€ΠΎΡ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sorted(). И Π² ΠΏΡ€Π°Π²Π΄Ρƒ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° это.

Π’ Ρ‚Π°ΠΊΠΈΡ… ситуациях, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ sorted() (Π½Ρƒ ΠΈΠ»ΠΈ sort(), Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ список Π½Π° мСстС Π±Π΅Π· создания Π½ΠΎΠ²ΠΎΠ³ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² исходный).

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

Как всСгда, Π½Π°Ρ‡Π½Π΅ΠΌ с классичСской записи.

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ это всС Ρ‡Π΅Ρ€Π΅Π· lambda Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, lambda функция Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для сортировки ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… списков ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ.

Если Π²Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ вСсь этот ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ, написав Π΅Π³ΠΎ сами, Ρ‚ΠΎ я ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ с этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ смоТСтС ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΡ‚Π½Ρ‹Π½Π΅ Π²Ρ‹ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ lambda выраТСния, ΠΈ смоТСтС ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… Π² Ρ€Π°Π±ΠΎΡ‚Π΅.

Но Π³Π΄Π΅ ΠΆΠ΅ Ρ‚ΡƒΡ‚ Ρ‚Π° самая экономия мСста, Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ памяти? Экономится максимум ΠΏΠ°Ρ€Π° строк.

И Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ интСрСсным Π²Π΅Ρ‰Π°ΠΌ.

ΠšΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅, Π³Π΄Π΅ ΠΌΡ‹ обсудим map Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

UPD: По многочислСнным ΠΏΡ€ΠΎΡΡŒΠ±Π°ΠΌ, расставил Π·Π½Π°ΠΊΠΈ прСпинания.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ лямбда-функциях, ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² Python, ΠΈΡ… достоинствах ΠΈ особСнностях использования.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ Lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

НСбольшиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΠ°Ρ€Ρƒ строк ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ β€” lambda [1], Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. Python ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ обсуТдали Ρ‚ΡƒΡ‚. И lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² этом.

НапримСр, трСбуСтся функция, которая считаСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅. МоТно Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· def :

А ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ:

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² осущСствляСтся Π±Π΅Π· скобок.

Π’ Python всС являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ…. Рассмотрим ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π—Π΄Π΅ΡΡŒ функция calculate ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ n ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° z ΠΈ y Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ lambda Π² sort, filter, map, reduce

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ сортировка – ΠΎΠ΄Π½Π° ΠΈΠ· самых популярных манипуляций с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ. НапримСр, имССтся список слов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ послСднСй Π±ΡƒΠΊΠ²Π΅. Для этого Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ key – Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ сравнСниС элСмСнтов. Π­Ρ‚ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ наша lambda:

Π’Ρ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ lamda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ являСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ всС Ρ‡Π΅Ρ‚Π½Ρ‹Π΅ элСмСнты Π² спискС. Для этого имССтся встроСнная Π² Python функция filter :

filter ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ осущСствляСтся Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ элСмСнтов. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ использовали Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ – это использованиС lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² отобраТСниях Π½ΠΎΠ²ΠΎΠ³ΠΎ пространства. ВрСбуСтся ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ списка чисСл ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ список ΠΊΡƒΠ±ΠΎΠ² этих чисСл. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ map это Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

map ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΡƒΡŽ список Π² Π½ΠΎΠ²ΠΎΠΌ пространствС. Π—Π΄Π΅ΡΡŒ Π±Ρ‹Π»Π° использована анонимная функция, которая Π²ΠΎΠ·Π²ΠΎΠ΄ΠΈΡ‚ элСмСнт Π² 3-ю ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ.

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π½Π΅ всСгда lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ умСстными ΠΈΠ·-Π·Π° ΠΈΡ… Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса. НапримСр, filter ΠΈ map ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСписаны Ρ‡Π΅Ρ€Π΅Π· List comprehension, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ Ρ‚ΡƒΡ‚. Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ lambda-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ List comprehension Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Data Science, Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ Π½Π° Π½Π°ΡˆΠΈΡ… практичСских курсах ΠΏΠΎ Python Π² Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ ΡƒΡ‡Π΅Π±Π½ΠΎΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π΅ обучСния ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ИВ-спСциалистов Π² МосквС.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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

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 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

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

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

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

Traceback

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

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

Бинтаксис

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

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

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

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

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

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

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

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

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

IIFE

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

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

АргумСнты

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

unittest

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

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

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

doctest

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python. Π€ΠΎΡ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ лямбда функция python

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

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

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

timeit

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

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

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

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

Monkey Patching

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Filter

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

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

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

Reduce

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

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

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