Функції Python

Функції представляють блок коду, який виконує певне завдання і який можна повторно використовувати в інших частинах програми. Формальне визначення функції:

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()