Аргументы функции Python
Вы можете создать функцию на Python, которая принимает переменное количество аргументов. В этом посте вы узнаете, как определять такие функции, используя значения по умолчанию, ключевые слова и произвольные аргументы.
Аргументы
Мы узнали, как определить функцию и вызвать ее в теме пользовательской функции. В противном случае вызов функции завершится ошибкой. Вот иллюстрация.
def greet(name, msg):
"""This function greets to
the person with the provided message"""
print("Hello", name + ', ' + msg)
greet("Monica", "Good morning!")
Вывод
Hello Monica, Good morning!
Здесь функция greet()
имеет два параметра.
Эта функция работает легко и без ошибок, потому что мы вызвали ее с двумя аргументами.
Интерпретатор выдаст сообщение об ошибке, если мы вызовем его с другим количеством аргументов. Ниже показан вызов этого метода с одним аргументом и без него, а также связанные с ним сообщения об ошибках.
>>> greet("Monica") # only one argument
TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet() # no arguments
TypeError: greet() missing 2 required positional arguments: 'name' and '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?")
Вывод
Hello Kate, Good morning!
Hello Bruce, How do you do?
Используя оператор присваивания (=), мы можем присвоить аргументу значение по умолчанию. Вот иллюстрация.
Параметр msg, напротив, имеет значение «Доброе утро!» как его значение по умолчанию. В результате этого не требуется во время вызова. Если указано значение, оно будет иметь приоритет над значением по умолчанию.
Значение по умолчанию может быть установлено для любого количества аргументов в функции. Однако, если у нас есть аргумент по умолчанию, мы также должны иметь значения по умолчанию для всех аргументов справа от него.
Другими словами, аргументы не по умолчанию не могут сопровождаться аргументами по умолчанию. Например, если заголовок функции был определен как:
def greet(msg = "Good morning!", name):
Мы получили бы ошибку как:
SyntaxError: non-default argument follows default argument
Аргументы ключевых слов Python
Вызовы функций связаны с аргументами ключевого слова. Когда вы используете аргументы ключевого слова в вызове функции, вызывающая сторона использует имя параметра для идентификации параметров.
Поскольку интерпретатор Python может использовать предоставленные ключевые слова для сопоставления значений с параметрами, вы можете пропустить аргументы или расположить их не по порядку. Метод printme() также можно вызывать с ключевыми словами следующими способами:
# 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: non-keyword arg after keyword arg
Произвольные аргументы 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("Rocky", "Sunil", "Anil", "Bishal")
Вывод
Hello Rocky
Hello Sunil
Hello Anil
Hello Bishal
В этом случае мы вызвали функцию с многочисленными аргументами. Перед передачей в функцию эти аргументы упаковываются в запись. Мы используем цикл for внутри метода, чтобы вернуть все аргументы.