У мовах програмування функції є іменованої частиною коду. Це окремі блоки в тексті програми. Визначаються за допомогою зарезервованого слова def. В Python до функцій можна звертатися необмежену кількість разів з будь-якої частини сценарію.
Навіщо потрібні функції
Функції – це незамінний інструмент програміста. З їх допомогою розробник структурує програму, роблячи її зрозумілішою і компактніше. З допомогою функцій можна домогтися багаторазового використання окремої частини коду без його повторного написання.
Це найпростіший спосіб упакувати логіку виконання окремих частин програми. При цьому скорочується обсяг і час, який фахівець витрачає на створення сценарію.
Як написати першу функцію
В Python 3 для початківців своє знайомство з програмуванням є найпростіша функція print(). Щоб побачити її в дії вам знадобиться середовище розробки. Для цього скачайте дистрибутив мови з офіційного сайту і встановіть Python на комп'ютер. Відкрийте меню «Пуск» і в списку програм знайдіть Python 3. Розгорніть його клацанням лівої клавіші. У списку знайдіть середу IDLE і запустіть її. Наберіть print(«Hello, World!») і натисніть «Enter». Інтерпретатор поверне результат вашої першої функції. Деякі програмісти вважають за краще працювати в консолі. Якщо ви ставитеся до їх числа, натисніть win+R і введіть команду python.exe. Відкриється звичайний інтерпретатор, тільки з інтерфейсом cmd. Наберіть програму описаним вище чином і натисніть Enter в кінці, щоб побачити результат.
Як використовувати def
Нові функції створюються з допомогою інструкції def. Вони так само ефективні, як і вбудовані print() або open(), але відрізняються від функцій компилирующих мовами. Python def відноситься до виконуваних інструкцій. Це означає, що функції не існує, поки інтерпретатор її не побачить, і не перейде до її виконання. Інструкція def створює новий об'єкт і дає йому назву. Тобто коли інтерпретатор приступає до реалізації, він створює новий об'єкт і зв'язує його з ім'ям, зазначеним після def. Щоб зберігати дані до функцій можна прикріплювати різні атрибути. Тепер давайте напишемо функцію, яка повертає фразу «Hello, World!», лише з використанням def: def здравствуй_мир(): print(«Hello, World!») здравствуй_мир() #виклик функції Hello, World!
Синтаксис функцій і return
Інструкція def в Python складається з заголовка і пишеться за такими правилами: def (аргумент 1 аргумент 2 аргумент N): Після заголовка слід блок інструкцій, який починається з обов'язкового відступу. В IDLE інтерпретатор зробить його автоматично. Але в блокноті або іншому текстовому редакторі ви можете забути натиснути Tab. Тоді функція не запуститься. Програмний код в блоці інструкції називається тілом функції і виконується кожен раз при її виклику. Також в тілі іноді знаходиться return: def (аргумент 1 аргумент 2 аргумент N): return Return завершує роботу функції і передає викликає програмі об'єкт-результат. Інструкція не є обов'язковою. Функція буде працювати без return, і завершиться, коли потік управління досягне кінця її тіла.
Параметри та аргументи
Кожної функції можна передавати параметри, які вказуються в дужках після def. В Python вони записуються як змінні, розділені комами. Значення або посилання на об'єкти цим іменам присвоюються в блоці за двокрапкою. Після операції присвоєння їх прийнято називати аргументами, а не параметрами. Аргументи всередині функції ніяк не пов'язані з об'єктами поза її, тому в програмуванні їх відносять до локальних змінних. Область видимості обмежена блоком функції, що починається з def і закінчується return. Щоб було зрозуміліше, наведемо приклад: x = 12 #присвоюємо змінним посилання на цілочисельні об'єкти y = 34 def example(x,y): #створюємо функцію з ім'ям example x = «Hello» #присвоюємо значення аргументів x, y y = «Python» print(x, y, sep= «, ») return None example(x, y) #викликаємо функцію, не забувши вказати параметри Hello, Python print(x, y) 1234 Зверніть увагу на передостанню сходинку коду. У інтерпретатор Python команда print() повернула змінні x і y з глобальній області видимості. Значення аргументів не обов'язково вказувати всередині функції, можна вписати їх вручну при її виклику: def E_2(x, y): return x + y E_2(«Hello, » «Python!») #щоб слова були розділені, поставте пробіл перед закриває лапками Hello, Python! E_2(5 4) 10 Як видно з прикладу з простою функцією E_2 результат повністю залежить від типу об'єктів x і y. У першому випадку E_2 виконала конкатенацию, а в другому - арифметичну операцію додавання. У цьому полягає принцип поліморфізму та динамічної типізації. Те, що об'єкти визначають синтаксичний смисл, обумовлює гнучкість і простоту мови. Не потрібно витрачати час на те, щоб окремо вказати тип даних, з яким працює функція.
Правило LEGB
Це правило стосується роботи зі змінними в різних областях видимості. За замовчуванням усі імена, які ви створюєте в тілі функції, вважаються локальними. А імена в модулі є глобальними. При бажанні іменах можна присвоїти значення змінних верхнього рівня з допомогою інструкції notlocal і global. Правило LEGB пояснює схему дозволу імен: Як тільки інтерпретатор знаходить змінну всередині інструкції def, спочатку він виконує пошук значень в локальній області видимості. Якщо пошук не дає результату, він переходить до області видимості будь всеосяжної інструкції def. Далі інтерпретатор рухається до глобальних імен у верхньому рівні модуля і тим, що позначені як global. Якщо пошук не дає результатів, інтерпретатор шукає імена у вбудованій області видимості мови Python. Розглянемо конкретний приклад: L = 85 R = 23 def пример_2(K): R = 10 C = L + K+R return C пример_2(5) 100 Змінні L і R знаходяться на верхньому рівні і є глобальними іменами. R, C і K – це локальні змінні, так як присвоювання значення відбувається всередині інструкції def. Інтерпретатор виконує операцію додавання для локальних R, C і K, ігноруючи змінну R поза інструкції def. Потім шукає L, і не знайшовши її серед імен local, переходить на верхній рівень.
Що таке lambda
Крім def, Python функції можна створювати за допомогою спеціальних висловів, одне з яких - lambda. Свою оригінальну назву отримала на честь лямбда-числення мови LISP. Як і def, lambda створює функцію, яку можна буде надалі викликати, але не пов'язує її з яким-небудь ім'ям. На практиці lambda використовують, коли потрібно відкласти виконання фрагмента коду.
Основи лямбда-виразів
За зовнішнім виглядом лямбда-вирази нагадують інструкції def. Спочатку пишеться ключове слово lambda, потім аргументи, двокрапка й сам вираз: f = lambda x, y, z: x + y + z f(234) 9 Тіло лямбда являє собою одне єдине вираження, а не блок інструкцій. За рахунок цього lambda обмежена в можливостях і не настільки універсальна як def. У ній може бути реалізована тільки логіка, без циклів while або for. Для лямбда діють аналогічні з def правила пошуку змінних. Імена, зазначені поза вираження, є глобальними, всередині – локальними, і вони ніяк не впливають один на одного. Лямбда-виразу дуже зручно вбудовувати в програму. За рахунок невеликого розміру вони мінімізують і спрощують код. Але використання лямбда не є принциповим. В Python 3 початківцям для роботи буде досить інструкції def.