Python. Функція. Поняття функції. Загальна форма. Приклади оголошення та використання функцій




Функція. Поняття функції. Загальна форма. Приклади оголошення та використання функцій


Зміст


Search other websites:

1. Що таке функція? Визначення функції. Переваги застосування функцій

Функція – це засіб (спосіб) групування фрагментів програмного коду таким чином, що цей програмний код може викликатись багатократно з допомогою використання імені функції.

Використання функцій у програмах на Python дає наступні взаємозв’язані переваги:

  • уникнення повторення однакових фрагментів коду в різних частинах програми;
  • зменшення надлишковості вихідного коду програми. Як наслідок, зменшення логічних помилок програмування;
  • покращене сприйняття вихідного коду програми у випадках, де замість блоків численних інструкцій (операторів) викликаються імена готових протестованих функцій. Це, в свою чергу, також зменшує кількість помилок;
  • спрощення внесення змін у повторюваних блоках коду, які організовані у вигляді функцій. Достатньо внести зміни тільки в тілі функції, тоді в усіх викликах даної функції ці зміни будуть враховані;
  • з допомогою функцій зручно розбивати складну систему на більш прості частини. Отже, функції – зручний спосіб структурування програми;
  • зменшення трудозатрат на програмування, а, отже, підвищення продуктивності праці програміста.

У мові програмування Python для функцій характерні наступні особливості:

  • функції можуть повертати результат;
  • функції можуть отримувати вхідні параметри, які впливають на отриманий результат.

 

2. Інструкція def. Загальна форма оголошення функції в Python. Створення функції

Щоб функцію можна було використовувати у програмі, її потрібно створити (оголосити). У мові Python створення (або оголошення) функції виконується з допомогою інструкції def. Якщо інтерпретатор досягає інструкції def, він створює новий об’єкт функції та зв’язує упакований код функції з її іменем.

Функція може повертати або не повертати значення. Якщо функція не повертає значення, то вважається, що вона автоматично повертає об’єкт None, який ігнорується. У цьому випадку інструкція return необов’язкова. Загальна форма такої функції наступна:

def <name>(arg1, arg2, ..., argN):
    <statement1>
    <statement2>
    ...
    <statementN>

де

  • name – ім’я функції, з яким буде зв’язано об’єкт функції та список параметрів (arg1, arg2, …, argN). Об’єкт функції отримує ім’я name і створюється під час виконання (у Python немає часу компіляції);
  • arg1, arg2, argN – список параметрів, які може отримувати функція. Функція також може бути без параметрів;
  • statement1, statement2, statementN – одна або декілька інструкцій, що слідують з відступами відносно def.

Якщо функція повертає значення, то її загальна форма наступна

def <name>(arg1, arg2, ..., argN):
    <statement1>
    <statement2>
    ...
    <statementN>
    return <value>

тут

  • name – ім’я функції;
  • arg1, arg2, …, argN – параметри функції (якщо такі є);
  • statement1, statement2, statementN – інструкції, що реалізовані в тілі функції;
  • value – значення, яке повертає функція.

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

 

3. Виклик функції

Після того, як функція створена (оголошена), можна здійснювати її виклик. Виклик функції здійснюється з допомогою її імені та переліку параметрів.

Наприклад. Нехай оголошено наступну функцію

def Mult2(a, b):
    return a*b

то її виклик може бути, наприклад, таким

res = Mult2(7,9)

У результаті, значення res = 63.

Інтерпретатор, зустрівши інструкцію def виконує наступні дії:

  • створює новий об’єкт функції з іменем Mult2;
  • упаковує програмний код функції та зв’язує об’єкт з іменем Mult2;
  • викликає функцію в програмі.

Якщо задати

res = Mult2('abc',3)

то res = ‘abcabcabc’.

 

4. Приклад оголошення та використання функції без параметрів

Нижче наведено приклад оголошення та використання функції, що не містить параметрів. Функція має ім’я Hello і виводить на екран текст “Hello world!” 3 рази.

# Функції без параметрів.
# Оголосити функцію з іменем Hello(),
# яка виводить "Hello world!" на екран.
def Hello():
    print("Hello world!")

# Викликати функцію Hello() в циклі while
i=0
while i<3:
    Hello()
    i=i+1

 

5. Приклад оголошення та використання функції, яка отримує 1 параметр

Нижче наведено приклад створення та використання функції Print3(), яка отримує один параметр і виводить його на екран 3 рази.

# Оголосити функцію з іменем Print5(),
# яка виводить значення параметру t на екран 3 рази
def Print3(t):
    i=0
    while i<3:
        print(t)
        i=i+1

# Викликати функцію Print3() для різних типів параметрів
Print3('abc')
Print3(2.85)
Print3(-88)
Print3(True)

Результат виконання програми

abc
abc
abc
2.85
2.85
2.85
-88
-88
-88
True
True
True

Як видно з результату, у мові Python тип параметру, що передається у функцію, може бути будь-яким. Інтерпретатор розпізнає його на основі об’єкту, що передається в якості параметру.

 

6. Приклад оголошення та використання функції, яка отримує параметр та повертає результат

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

# Функція, яка реверсує рядок
def Reverse(s):
    s2 = ''
    i = len(s)-1
    while i>=0:
        s2 = s2 + s[i]
        i = i-1  
    return s2

# Виклик функції Reverse()
s1 = "abcdef"
s2 = Reverse(s1) # s2 = 'fedcba'
print("s2 = ", s2)

Результат роботи програми

s2 = fedcba

 

7. Приклад оголошення функції в інструкції if. Реалізація альтернативи

Визначення функції з допомогою засобу def може бути вкладене в іншу інструкцію, наприклад, інструкцію if. У цьому випадку виникає альтернатива при виконанні програми.

Приклад. У прикладі на основі введеного значення n створюється функція Fn(), яка обчислює тригонометричний вираз за наступним правилом:

  • sin(x)*cos(x), якщо n==1;
  • sin(x2)+cos(x), якщо n==2;
  • 1-sin(x), в противному випадку.

Потім ця функція викликається для заданого значення x.

# За заданим значенням n визначити функцію Fn(),
# яка обчислює:
# sin(x)*cos(x), якщо n==1
# sin(x*x)+cos(x), якщо n==2
# 1-sin(x), в іншому випадку

# Імпортувати математичну бібліотеку
import math

# Ввести значення n
n = int(input('n = '))
x = float(input('x = '))

# Визначити код функції Fn()
if (n==1):
    def Fn(x):
        print("n==1. res = sin(x)*cos(x).")
        return math.sin(x)*math.cos(x)
else:
    if (n==2):
        def Fn(x):
            print("n==2. res = sin(x*x)+cos(x)")
            return math.sin(x*x)+math.cos(x)
    else:
        def Fn(x):
            print("n==3. res = 1-sin(x)")
            return 1-math.sin(x)

# Виклик функції Fn()
res = Fn(x)

print("res = ", res)

Результат виконання програми

n = 3
x = 1.2
n==3. res = 1-sin(x)
res =   0.06796091403277371

 

8. Поліморфізм в функціях. Приклади

У мові Python усі дані представлені об’єктами. Об’єкти визначають синтаксичний зміст операції. Підтримка операцією різних типів об’єктів забезпечується завдяки поліморфізму. Поліморфізм – залежність змісту операції від типу об’єктів до яких вона застосовується. Поліморфізм у функції проявляється при передачі параметрів у функцію. Параметри функції є об’єкти, які можуть бути різних типів. Параметри функції використовуються в операціях, які можуть оперувати різними типами. У мові Python цей процес називається динамічною типізацією.

Наприклад, операція * може застосовуватись як до чисел, так і до рядків. У випадку з числами ця операція означає множення. У випадку з рядками ця операція дозволяє повторити рядок задану кількість разів.

Приклад 1. Демонструється функція Mult(), яка отримує два параметри a, b. Для отриманих параметрів виконується операція *.

# Поліморфізм у функціях
# Функція Mult()
def Mult(a,b):
    return a*b

# Виклик функції Mult() для різних типів об'єктів
# 1. Для чисел
x = 8
y = 5
z = Mult(x,y) # z = 40

# 2. Для рядків
s1 = "Hello "
n = 3
s2 = Mult(s1,n) # s2 = 'Hello Hello Hello'

Приклад 2. Демонструється функція Summ(), яка отримує два параметри a, b. Функція повертає результат операції + над параметрами.

# Поліморфізм у функціях
# Функція Summ()
def Summ(a,b):
    return a+b

# Виклик функції Summ() для різних типів об'єктів
# 1. Для чисел
x = 18
y = 3
z = Summ(x,y) # z = 40

# 2. Для рядків
s1 = "Hello "
s2 = "world!"
s3 = Summ(s1,s2) # s3 = 'Hello world!'

 

9. Використання локальних змінних всередині функцій. Приклад

Всередині функції можуть бути оголошені локальні змінні. Локальна змінна – це ім’я (об’єкт), що є доступне тільки всередині визначення функції (інструкції def). Локальна змінна існує тільки під час виконання функції.

У тілі будь-якої функції локальні змінні визначаються на основі наступних ознак:

  • якщо змінна розміщується в лівій частині операції присвоювання;
  • якщо змінна (ім’я) є параметр (аргумент) функції;
  • якщо змінна є ітератором в циклі for.

Приклад. У прикладі створюється функція SquareTriangle(), яка обчислює площу трикутника за його сторонами. Довжини сторін трикутника з іменами a, b, c є вхідними параметрами функції. Якщо з a, b, c неможливо утворити трикутник, то функція повертає значення None.

Потім відбувається виклик функції SquareTriangle() та обробка результату повернення з функції.

# Обчислити площу трикутника на основі його довжин a,b,c
# Імпортувати математичну бібліотеку
import math

def SquareTriangle(a,b,c):
    if (((a+b)<c) or ((b+c)<a) or ((a+c)<b)):
        return None
    else:
        p = (a+b+c)/2 # це є локальна змінна p
        s = math.sqrt(p*(p-a)*(p-b)*(p-c)) # локальна змінна s
        return s

# Використання функції SquareTriangle()
s = SquareTriangle(5,4,5)

if (s==None):
    print("The values of a, b, c is incorrect.")
else:
    print("s = ", s)

Результат виконання програми

s = 9.16515138991168