Функції представляють блок коду, який виконує певне завдання і який можна повторно використовувати в інших частинах програми. Формальне визначення функції:
def имя_функции ([параметри]): інструкція
Визначення функції починається з виразу def, яке складається з імені функції, набору дужок з параметрами та двокрапки. Параметри в дужках необов'язкові. А з наступного рядка йде блок інструкцій, які виконує функція. Всі інструкції функції мають відступи від початку рядка.
Наприклад, визначення найпростішої функції:
def say_hello(): print("Hello")
Функція називається say_hello. Вона не має параметрів і містить одну єдину інструкцію, яка виводить на консоль рядок "Hello".
Для виклику функції вказується ім'я функції, після якого в дужках йде передача значень для всіх її параметрів. Наприклад:
def say_hello(): print("Hello") say_hello() say_hello() say_hello()
Тут три рази поспіль викликається функція say_hello. В результаті ми отримаємо наступний консольний висновок:
Привіт
Привіт
Тепер визначимо і використовуємо функцію з параметрами:
def say_hello (ім'я): друк("Привіт",ім'я) say_hello ("том") say_hello ("Боб") say_hello ("Аліса")
Функція приймає ім'я параметр, і при виклику функції ми можемо передати замість параметра будь-яке значення:
Привіт, Боб
Привіт, Алісо
Значення за замовчуванням
Деякі параметри функції ми можемо зробити необов'язковими, вказавши для них значення за замовчуванням при визначенні функції. Наприклад:
def say_hello(name="Tom"): print("Hello,", name) say_hello() say_hello("Bob")
Тут параметр name є необов'язковим. І якщо ми не передаємо при виклику функції для нього значення, то застосовується значення за замовчуванням, тобто рядок "Tom".
Іменовані параметри
При передачі значень функція зіставляє їх з параметрами в тому порядку, в якому вони передаються. Наприклад, нехай є наступна функція:
def display_info(name, age): print("Name:", name, "\t", "Age:", age) display_info("Tom", 22)
При виклику функції перше значення "Tom" передається першому параметру-параметру name, друге значення-число 22 передається другому параметру-age. І так далі по порядку. Використання іменованих параметрів дозволяє перевизначити порядок передачі:
def display_info(name, age): print("Name:", name, "\t", "Age:", age) display_info(age=22, name="Tom")
Іменовані параметри припускають вказівку імені параметра з присвоєнням йому значення при виклику функції.
Невизначена кількість параметрів
За допомогою символу зірочки можна визначити невизначену кількість параметрів:
def sum(*params): result = 0 for n in params: result + = n return result sumOfNumbers1 = sum(1, 2, 3, 4, 5) # 15 sumOfNumbers2 = sum(3, 4, 5, 6) # 18 print(sumOfNumbers1) print(sumOfNumbers2)
В даному випадку функція sum приймає один параметр - *params, але зірочка перед назвою параметра вказує, що фактично на місце цього параметра ми можемо передати невизначену кількість значень або набір значень. У самій функції за допомогою циклу for можна пройтися по цьому набору і зробити з переданими значеннями різні дії. Наприклад, в даному випадку повертається сума чисел.
Повернення результату
Функція може повертати результат. Для цього у функції використовується оператор return, після якого вказується значення, що повертається:
def exchange(usd_rate, money): result = round(money/usd_rate, 2) return result result1 = exchange(60, 30000) print(result1) result2 = exchange(56, 30000) print(result2) result3 = exchange(65, 30000) print(result3)
Оскільки функція повертає значення, то ми можемо присвоїти значення будь-якої змінної і потім використовувати її: result2 = exchange(56, 30000).
У Python функція може повертати відразу кілька значень:
def create_default_user(): name = "Tom" age = 33 return name, age user_name, user_age = create_default_user() print("Name:", user_name, "\t Age:", user_age)
Тут функція create_default_user повертає два значення: name і age. При виклику функції ці значення по порядку присвоюються змінним user_name і user_age, і ми можемо використовувати їх.
Функція main
В програмі може бути визначено безліч функцій. І щоб всіх їх упорядкувати, доброю практикою вважається додавання спеціальної функції main, в якій потім вже викликаються інші функції:
def main(): say_hello("Tom") usd_rate = 56 money = 30000 result = exchange(usd_rate, money) print("До видачі", result, "доларів") def say_hello(name): print("Hello,", name) def exchange(usd_rate, money): result = round(money/usd_rate, 2) return result # Виклик функції main main()