Python. Рекомендації щодо правильного структурування програм з допомогою функцій.

Рекомендації щодо правильного структурування програм з допомогою функцій. Неявний виклик функції. Приклади


Зміст


Search other websites:




1. Рекомендації щодо розробки (проектування) функцій та модулів у програмах

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

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

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

Щоб вирішити проблему взаємодії потрібно:

  • забезпечити максимальну незалежність функції від основної програми. Для цього передавати значення функції бажано з допомогою аргументів мінімізуючи використання глобальних змінних. Повертати значення з функції потрібно інструкцією return;
  • використовувати глобальні змінні для взаємодії з функцією потрібно тільки у крайніх випадках. Якщо масово використовувати глобальні змінні у функціях програми, це може призвести до появи важковловимих помилок узгодженості;
  • забезпечити правильне використання аргументів. Якщо при передачі з викликаючої програми у функцію змінюваних аргументів, не передбачається їх зміна, то у функції змінювати ці аргументи не потрібно. Як відомо, функції можуть змінювати деякі змінювані об’єкти, отримані в якості аргументів. Зміна аргументів в тілі функції збільшує зв’язок функції з програмою і робить її менш незалежною та більш специфічною;
  • уникати безпосередньої зміни змінних в іншому модулі. Якщо в одному модулі змінювати змінні іншого модуля, то встановлюється тісний зв’язок між цими модулями. Модулі стають складними в розумінні та малопридатними для багатократного використання. Потрібно максимально можливо забезпечити незалежність модулів програми. Пряма операція присвоєння змінній іншого модуля повинна бути замінена викликом спеціально розробленої функції доступу з цього ж модуля.

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

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

 

2. Схема організації взаємодії функції з іншими частинами програми

На рисунку 1 відображено схему взаємодію функції з іншими частинами програми.

Python. Взаємодія функції з зовнішніми частинами програми

Рисунок 1. Взаємодія функції з зовнішніми частинами програми

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

  • з допомогою оператора return;
  • з використанням змінюваних аргументів, при умові, що це передбачає викликаюча програма.

 

3. Функції як об’єкти. Операції над посиланнями на об’єкт функції

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

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

 

4. Неявний виклик функції. Поняття. Приклад

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

# Функція, на яку буде оголошено посилання
def Fn(parameters):
    # Код (тіло) функції
    ...

# Отримати посилання на функцію
refFn = Fn

# Викликати за посиланням функцію, параметри повинні співпадати
refFn(parameters)

тут

  • Fn – ім’я функції, на яку буде оголошено посилання;
  • refFn – посилання на функцію Fn();
  • parameters – список параметрів, які отримує функція.

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

Приклад. У прикладі демонструється присвоєння імені функції Add() іншому посиланню на функцію fn(). Потім за посиланням fn() викликається функція Add() для обчислення суми двох чисел.

# Посилання на функцію. Виклик функції за посиланням

# Функція, яка повертає суму двох чисел
def Add(x, y):
    return x+y

# Присвоїти ім'я функції іншому імені
fn = Add # fn - посилання на функцію Add()

# Виклик функції Add() за посиланням fn
z = fn(3, 8)
print("z = ", z) # вивести результат

 

5. Неявний виклик функцій з різною кількістю параметрів. Пошук максимального значення між числами. Приклад

У прикладі демонструється виклик за посиланням однієї з 3-х функцій:

  • Max2() – визначає максимальне значення між двома числами;
  • Max3() – визначає максимальне значення між трьома числами;
  • Max4() – визначає максимальне значення між чотирма числами.

 

# Max2() - повертає максимум між двома числами
def Max2(a, b):
    if a>b:
        return a
    return b

# Max3() - максимум між трьома числами
def Max3(a, b, c):
    max = a
    if max<b: max=b
    if max<c: max=c
    return max

# Max4() - максимум між чотирма числами
def Max4(a, b, c, d):
    max = a
    if max<b: max=b
    if max<c: max=c
    if max<d: max=d
    return max

# Продемонструвати неявний виклик функцій Max2(), Max3(), Max4().
fn = Max2 # посилання fn вказує на функцію Max2()
maximum = fn(2.85, 7.6)
print("maximum = ", maximum)

fn = Max3 # посилання fn вказує на функцію Max3()
maximum = fn(8.2, 3.44, 11.2)
print("maximum = ", maximum)

fn = Max4 # посилання fn вказує на функцію Max4()
maximum = fn(1.6, 2.8, 0.3, 2.9)
print("maximum = ", maximum)

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

maximum = 7.6
maximum = 11.2
maximum = 2.9

 


Зв’язані теми