Передача аргументов в функции Python
На прошлой статье, мы разобрались с тем, как определять функции в python. Сейчас мы разберемся, что такое аргументы, и как их передавать. Перейдем сразу к примере, и разберемся со всеми вопросами шаг за шагом.
def func (name,message): """ Эта функция принимает две переменные name и message """ print("Привет", name + ', ' + message) func("Тимур","Доброе утро") Результат: Привет Тимур, Доброе утро
В примере выше, мы видим что функция func(), имеет два параметра. Мы вызвали эту функцию, с двумя аргументами, соответственно, у нас нет никаких проблем. Если мы попробуем вызвать функцию с другим количеством аргументов, Pycharm , выдаст нам сообщение об ошибке.
func("Тимур") # Только один аргумент TypeError: greet() missing 1 required positional argument: 'message'
Значение аргумента по умолчанию
Аргумент может иметь значение по умолчанию. Задается это значение с помощью уже знакомого нам оператора присваивания.
def hello(name, message="Доброе утро"): print("Hello", name + ', '+message) hello("Тимур") hello("Мария", "Как дела?") Результат: Тимур, Доброе утро Мария, Как дела?
В этой функции наш первый параметр, не имеет значения по умолчанию, поэтому он обязателен во время вызова. А второй параметр имеет значение по умолчанию, соответственно мы можем его не указывать при вызове функции.
Важно запомнить! Любое количество аргументов передаваемых в функцию, может иметь значение по умолчанию. Но, как только мы указали такой аргумент, все последующие аргументы так же должны иметь значение по умолчанию, в противном случае,мы получим синтаксическую ошибку.
def hello(message = "Доброе утро", name): # Мы передали аргументы в неправильном порядке, поэтому получаем ошибку SyntaxError: non-default argument follows default argument
Вызов аргументов по ключевым словам
При вызове функции с аргументами, значение этих аргументов присваиваются в соответствии с их позицией.
В примерах выше, при вызове функции hello(), значение «Тимур » присваивалось аргументу name, и так же значение «Доброе утро», присваивалось message.
В Python, можно вызывать функции с помощью ключевых слов. При таком вызове, порядок аргументов может быть другой. Рассмотрим несколько примеров. Все примеры указанные ниже дают одинаковый результат.
hello (name ="Тимур", message ="Как дела?") hello (message ="Как дела?", name ="Тимур") hello ("Тимур", message ="Как дела?")
Как мы видим, мы без проблем можем позиционные аргументы с аргументами ключевых слов. Но, всегда помните что аргументы ключевых слов, идут за позиционными аргументами. В противном случае получим следующую ошибку:
SyntaxError: non-keyword arg after keyword arg
Произвольное количество аргументов
Иногда может произойти такое, что мы точно не знаем какое количество аргументов нам необходимо передать. Решается этот вопрос в Python, довольно просто.
При определении функции, мы используем специальный символ (*) пере названием аргумента. Рассмотрим пример.
def hello(*names) """ Пример функции с передачей неограниченного количества аргументов""" for i in names: print("Привет", i) hello("Тимур","Павел","Настя","Василий","Женя") Результат: Привет Тимур Привет Павел Привет Настя Привет Василий Привет Женя
Я думаю, посмотрев код, вы без труда разобрались, что у нас там произошло. Но давайте все же по порядку. Мы изначально не знали какое количество аргументов нам нужно передать, поэтому использовали специальный символ (*). Далее мы вызываем нашу функцию hello(«Тимур»,»Павел»,»Настя»,»Василий»,»Женя»), куда передали нужное нам количество аргументов. В это время, внутри функции, наши переданные аргументы формируется в кортеж, а затем запускается цикл for, для последующего перебора, и извлечения переданных аргументов.