Аргументы функции Python (по умолчанию, ключевое слово и произвольное)

В Python вы можете определить функцию, которая принимает переменное количество аргументов. В этой статье вы научитесь определять такие функции, используя аргументы по умолчанию, ключевое слово и произвольные аргументы.

Видео: Аргументы функций Python: позиционные, ключевые слова и значения по умолчанию

Аргументы

В теме «Пользовательские функции» мы узнали об определении функции и ее вызове. В противном случае вызов функции приведет к ошибке. Вот пример.

 def greet(name, msg): """This function greets to the person with the provided message""" print("Hello", name + ', ' + msg) greet("Monica", "Good morning!")

Вывод

 Привет, Моника, доброе утро!

Здесь функция greet()имеет два параметра.

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

Если мы вызовем его с другим количеством аргументов, интерпретатор выдаст сообщение об ошибке. Ниже приведен вызов этой функции с одним аргументом и без аргументов вместе с соответствующими сообщениями об ошибках.

 >>> greet ("Monica") # только один аргумент TypeError: greet () отсутствует 1 обязательный позиционный аргумент: 'msg'
 >>> greet () # нет аргументов TypeError: greet () отсутствует 2 обязательных позиционных аргумента: 'name' и 'msg'

Аргументы переменных функций

До сих пор функции имели фиксированное количество аргументов. В Python есть и другие способы определения функции, которая может принимать переменное количество аргументов.

Ниже описаны три различные формы этого типа.

Аргументы Python по умолчанию

Аргументы функции могут иметь значения по умолчанию в Python.

Мы можем предоставить аргументу значение по умолчанию, используя оператор присваивания (=). Вот пример.

 def greet(name, msg="Good morning!"): """ This function greets to the person with the provided message. If the message is not provided, it defaults to "Good morning!" """ print("Hello", name + ', ' + msg) greet("Kate") greet("Bruce", "How do you do?")

Вывод

Привет Катя, доброе утро! Привет, Брюс, как дела?

В этой функции параметр nameне имеет значения по умолчанию и является обязательным (обязательным) во время вызова.

С другой стороны, параметр msgимеет значение по умолчанию "Good morning!". Так что во время разговора это необязательно. Если указано значение, оно перезапишет значение по умолчанию.

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

Это означает, что аргументы не по умолчанию не могут следовать за аргументами по умолчанию. Например, если бы мы определили заголовок функции выше как:

 def greet (msg = "Доброе утро!", name):

Мы получили бы сообщение об ошибке:

 SyntaxError: аргумент не по умолчанию следует за аргументом по умолчанию

Аргументы ключевых слов Python

Когда мы вызываем функцию с некоторыми значениями, эти значения присваиваются аргументам в соответствии с их положением.

Например, в приведенной выше функции greet(), когда мы вызывали ее как greet("Bruce", "How do you do?"), значение "Bruce"присваивается имени аргумента и аналогично "How do you do?"msg.

Python позволяет вызывать функции с использованием аргументов ключевого слова. Когда мы вызываем функции таким образом, порядок (положение) аргументов может быть изменен. Все последующие вызовы вышеупомянутой функции действительны и дают тот же результат.

 # 2 keyword arguments greet(name = "Bruce",msg = "How do you do?") # 2 keyword arguments (out of order) greet(msg = "How do you do?",name = "Bruce") 1 positional, 1 keyword argument greet("Bruce", msg = "How do you do?") 

Как мы видим, мы можем смешивать позиционные аргументы с аргументами ключевого слова во время вызова функции. Но мы должны помнить, что аргументы ключевых слов должны следовать за позиционными аргументами.

Позиционный аргумент после аргументов ключевого слова приведет к ошибкам. Например, вызов функции выглядит следующим образом:

 greet(name="Bruce","How do you do?")

Приведет к ошибке:

 SyntaxError: аргумент без ключевого слова после аргумента ключевого слова

Произвольные аргументы Python

Иногда мы не знаем заранее количество аргументов, которые будут переданы функции. Python позволяет нам справляться с подобными ситуациями с помощью вызовов функций с произвольным количеством аргументов.

В определении функции мы используем звездочку (*) перед именем параметра, чтобы обозначить этот тип аргумента. Вот пример.

 def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")

Вывод

 Привет Моника Привет Люк Привет Стив Привет Джон

Здесь мы вызвали функцию с несколькими аргументами. Эти аргументы упаковываются в кортеж перед передачей в функцию. Внутри функции мы используем forцикл для возврата всех аргументов.

Интересные статьи...