Skip to content

Instantly share code, notes, and snippets.

@0viktory0
Last active August 28, 2023 17:08
Show Gist options
  • Save 0viktory0/44db0f796a6a025aa9345477326f3b5e to your computer and use it in GitHub Desktop.
Save 0viktory0/44db0f796a6a025aa9345477326f3b5e to your computer and use it in GitHub Desktop.

Параметры функий

Проблема № 1

Программист — запретить использование именованных аргументов, так как в будущем их имена могут измениться.

Решение: при объявлении функции задать необходимые параметры как позиционные

def func(a, b, /):
    print(a, b)

Другие способы решить проблему:

  • использовать конструкции *args или **kwargs

Значимые преимущества/недостатки:

  • (+) использование позиционных аргументов при вызове функции исключает привязку к имени, что позволяет избежать поломки кода при изменении имен переменных в коде программы
  • (+) использование определенных аргументов не вызовет вопросов при вызове функции в отличии от использования конструкции *args или **kwargs
  • (-) если необходимо задать большое количество аргументов, есть риск возникновения ошибки при вызове самой функции

Причины преимуществ/недостатков:

  • все необходимые параметры прописаны при обьявлении функции, что исключает возникновение вопросов при вызове функции
  • код внутри функции не привязан к именам ее аргументов

Проблема № 2

Программист — объявить функцию с произвольным количеством параметров

Решение: использовать конструкции *args или **kwargs

def func1(*args):
    for arg in args:
        print(arg)

def func2(**kwargs):
    for key in kwargs:
        print(f"{key} = {kwargs[key]}")

Другие способы решить проблему:

  • перечислить все параметры при определении функции
  • использовать переменные типа list, dict

Значимые преимущества/недостатки:

  • (+) оператор * позволяет передать в функцию переменное количество значений, и все они будут упакованы в кортеж
  • (+) оператор ** упаковывает аргументы, переданные по имени, в словарь. Имена параметров служат ключами
  • (-) возникает вероятность получения ошибки или некорректного результата при нарушении последовательности аргументов

Причины преимуществ/недостатков:

  • упрощение записи определения функции
  • отсутсвует необходимость заранее определять количество параметров функции
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment