В 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 = "Добро утро!", име):
Ще получим грешка като:
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
цикъл, за да извлечем всички аргументи обратно.