Python. Режими співставлення аргументів. Класифікація. Співставлення за позицією. Співставлення за іменами. Аргументи за замовчуванням. Приклади

Python. Режими співставлення аргументів. Класифікація. Співставлення за позицією. Співставлення за іменами. Аргументи за замовчуванням. Приклади


Зміст


Пошук на інших ресурсах:




1. Режими співставлення аргументів у Python. Класифікація

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

def Fn(a):
    # Використання аргументу (параметру) a в функції Fn
    ...
    return

# Виклик функції Fn і передача їй об'єкту X
X = 28
Fn(X) # У функції Fn() неявно виконується присвоєння a = X

Мова Python, як й інші мови програмування, підтримує різноманітні режими співставлення аргументів при виклику функцій. Нижче наведено перелік цих режимів

  • режим співставлення за позицією Fn(value). При цьому режимі значення, що передаються у функцію, присвоюються іменам в функції у порядку зліва направо (дивіться п. 2);
  • режим співставлення за іменами Fn(name=value);
  • режим передачі аргументів за замовчуванням;
  • режим передачі/отримання змінної кількості аргументів;
  • узагальнені способи виклику функції.

 

2. Співставлення за позицією: Fn(value). Приклад

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

Приклад.

# Аргументи. Режими співставлення.
# Передача аргументу в функцію - співставлення за позицією

# Функція, що отримує 4 аргументи
def Fn(a, b, c, d):

    # у тілі функції виводяться значення аргументів з іменами
    print('Fn.a = ', a)
    print('Fn.b = ', b)
    print('Fn.c = ', c)
    print('Fn.d = ', d)
    return

# Передача об'єктів у функцію Fn()
Fn(1, 2, 3, 4) # Fn.a=1, Fn.b=2, Fn.c=3, Fn.d=4

Після запуску на виконання, програма видасть наступний результат

Fn.a = 1
Fn.b = 2
Fn.c = 3
Fn.d = 4

Як видно з результату, при виклику функції Fn()

Fn(1, 2, 3, 4)

число (об’єкт) 1 присвоюється параметру a в тілі функції. Відповідно числа 2, 3, 4 присвоюються параметрам b, c, d в тілі функції.

 

3. Співставлення за іменами: Fn(name=value). Приклад

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

Приклад.

# Аргументи. Режими співставлення.
# Передача аргументу в функцію - співставлення за іменем

# Функція, що отримує 4 аргументи
def Fn(a, b, c, d):
    # у тілі функції виводяться значення аргументів з іменами
    print('Fn.a = ', a)
    print('Fn.b = ', b)
    print('Fn.c = ', c)
    print('Fn.d = ', d)
    return

# Передача об'єктів у функцію Fn() - задаються конкретні імена
Fn(d=4, a=1, c=3, b=2) # Fn.a=1, Fn.b=2, Fn.c=3, Fn.d=4

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

Fn.a = 1
Fn.b = 2
Fn.c = 3
Fn.d = 4

Якщо при виклику функції Fn(), задати неіснуючий параметр, то інтерпретатор видасть помилку. Наприклад, якщо у виклику функції фрагмент c=3 замінити на f=3

Fn(d=4, a=1, f=3, b=2)

то інтерпретатор видасть наступну помилку

TypeError: Fn() got an unexpected keyword argument 'f'

 

4. Режим передачі аргументів за замовчуванням: def Fn(name=value). Приклад

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

Наприклад, якщо оголошено функцію, що отримує значення за замовчуванням як показано нижче

def Fn(a=5):
    # тіло функції
    # ...
    return

то цю функцію можна викликати двома способами

...
Fn()
Fn(value)
...

де value – деякий об’єкт (число, рядок, список і т.д.), що створений раніше у програмі.

У першому випадку викликається функція без параметрів. Це означає, що в тілі функції параметр a отримує значення 5 (за замовчуванням).
У другому випадку викликається функція з одним параметром value. Це означає, що в тілі функції параметр a отримує передане значення value.

Приклад. У прикладі, функція отримує 4 параметри. Параметри c і d отримують значення за замовчуваннями, відповідно 10 і 100.

# Аргументи. Режими співставлення.
# Передача аргументу в функцію - задавання значень за замовчуванням

# Функція, що отримує 4 параметри.
# Параметри c, d отримують значення за замовчуванням, відповідно 10 і 100
def Fn(a, b, c=10, d=100):
    # у тілі функції виводяться значення параметрів з іменами
    print('Fn.a = ', a)
    print('Fn.b = ', b)
    print('Fn.c = ', c)
    print('Fn.d = ', d)
    return

# Передача об'єктів у функцію Fn() - задаються значення за замовчуванням
Fn(1,2,3,4) # Fn.a=1, Fn.b=2, Fn.c=3, Fn.d=4
Fn(1,2,3) # Fn.a=1, Fn.b=2, Fn.c=3, Fn.d=100
Fn(1,2) # Fn.a=1, Fn.b=2, Fn.c=10, Fn.d=100

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

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

Fn.a = 1
Fn.b = 2
Fn.c = 3
Fn.d = 4
Fn.a = 1
Fn.b = 2
Fn.c = 3
Fn.d = 100
Fn.a = 1
Fn.b = 2
Fn.c = 10
Fn.d = 100

 

5. Режим передачі аргументів за замовчуванням. Порядок слідування аргументів за замовчуванням в інструкції def

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

  • першими визначаються імена аргументів, які не отримують значення за замовчуванням. І вже після цього визначаються імена аргументів, що отримують значення за замовчуванням.

Наприклад. Нехай задано функцію Fn(), яка отримує три аргументи a, b, c. Якщо при описі функції, для аргументів a, b задати значення за замовчуванням наступним чином

def Fn(a=1, b=2, c): # це є помилковий код
    # ...
    # ...
    return

то при запуску програми на виконання, інтерпретатор Python видасть синтаксичну помилку з наступним повідомленням

non default argument follows default argument

що означає “аргумент не за замовчуванням слідує за аргументом за замовчуванням”. Отже, аргументи за замовчуванням мають визначатись останніми в переліку аргументів функції в інструкції def.

Щоб поправити ситуацію, можна написати наступний код оголошення функції Fn()

def Fn(c, a=1, b=2): # це є коректний код
    # тіло функції Fn()
    # ...

У вищенаведеному оголошенні функції Fn(), імена аргументів за замовчуванням a, b слідують після аргументу не за замовчуванням c.

 

6. В якому порядку інтерпретатор здійснює співставлення аргументів у переліку аргументів функції?

Якщо оголошується деяка функція (інструкція def), що містить аргументи, то інтерпретатор слідує строго визначеному порядку використання співставлення аргументів. Цей порядок полягає в наступному:

    1. Співставлення неіменованих аргументів за позиціями (дивіться п. 2).
    2. Співставлення аргументів за іменами (дивіться п. 3).
    3. Співставлення додаткових неіменованих аргументів змінної довжини за синтаксисом кортежу *sequence. Більш детально про співставлення неіменованих аргументів дивіться тут.
  1. Співставлення додаткових іменованих аргументів змінної довжини з перетворенням у словник **name. Більш детально про перетворення аргументів змінної довжини у словник дивіться тут.
  2. Співставлення значень за замовчуванням (дивіться п. 4).

 


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