Аргументы функции Python
Аргументы функции 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!")
Вывод
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?
В этой функции параметр name
не имеет значения по умолчанию и требуется (обязательно) во время вызова.
С другой стороны, параметр msg
имеет значение по умолчанию "Good morning!"
. Таким образом, это необязательно во время разговора. Если указано значение, оно перезапишет значение по умолчанию.
Любое количество аргументов в функции может иметь значение по умолчанию. Но если у нас есть аргумент по умолчанию, все аргументы справа от него также должны иметь значения по умолчанию.
Это означает, что аргументы не по умолчанию не могут следовать за аргументами по умолчанию. Например, если бы мы определили заголовок функции выше как:
def greet(msg = "Good morning!", name):
Мы получили бы ошибку как:
SyntaxError: non-default argument follows default argument<час>
Аргументы ключевого слова Python
Когда мы вызываем функцию с некоторыми значениями, эти значения присваиваются аргументам в соответствии с их положением.
Например, в приведенной выше функции greet()
, когда мы назвали его как greet("Bruce", "How do you do?")
, значение "Bruce"
присваивается аргументу name и аналогично "How do you do?"
в сообщение .
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: 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("Monica", "Luke", "Steve", "John")
Вывод
Hello Monica Hello Luke Hello Steve Hello John
Здесь мы вызвали функцию с несколькими аргументами. Эти аргументы упаковываются в кортеж перед передачей в функцию. Внутри функции мы используем for
цикл для возврата всех аргументов.
Python