Функции на языке программирования Python
Ответы
Если вопрос в том, как определить функцию, тогда:
С помощью оператора def (имяФунции)():
Пример:
def countFood():
a = int(input())
b = int(input())
print("Всего", a+b, "шт.")
Ответ:
Функция в Python - особый объект, который может быть вызван. Функции могут принимать параметры на вход и возвращать значение, но не обязаны это делать, то есть функция без аргументов или не возвращающая значение - обычное дело.
Обычно Функции на языке Python определяются с использованием ключевого слова def. Например, функция, принимающая на вход 2 числа и возвращающая их сумму может быть описана следующим образом:
def Summ(a, b):
return a + b
оператор return возвращает значение выражения, стоящего справа от оператора и прерывает выполнение функции, возвращая контроль выполнения вызывающему коду.
Код, относящийся к функции (тело функции) должен быть выделен одним уровнем отступа.
Python в новых версиях поддерживает синтаксис явной типизации функций, когда при объявлении функции указывается тип принимаемых параметров и тип возвращаемого значения. Интерпретатор в дальнейшем эти указания типов всё равно игнорирует, но их всё равно стоит указывать хотя бы для того, что бы если вашу функцию будет использовать кто то другой, ему было проще понять, что ваша функция просит на вход и что возвращает. Пример явно типизированной функции:
def Summ(a: int, b: int) -> int:
return a+b
Функции в Python могут принимать не только позиционные, но и именованные аргументы. Такие аргументы при вызове функции передаются с указанием имени аргумента и присваиванию этому имени значения и без учёта порядка этих аргументов в объявлении функции.
Пример функции с именованными аргументами:
def SayHello(firstName = 'Лёха', secondName = 'Свотин'):
print(f"Hello, {firstName} {secondName}!")
В объявлении этой функции параметры firstName и secondName идут в одном порядке, но явно указывая имя параметра, мы можем передать их в любом удобном нам порядке:
SayHello(secondName = 'Оладьин', firstName = 'Алексей')
Нередки случаи, когда мы не можем точно знать, сколько конкретно аргументов должна получить функция. Тогда мы можем указать в её объявлении только один параметр, поставив перед ним звёздочку ( * ), следующим образом:
def Summ(*args):
summ = 0
for item in args:
summ+=item
return summ
#Вызов:
Summ(1, 2) # 3
Summ(1) # 1
Summ(1,2,3,4,5) # 15
В случае, если мы объявляем функцию с переменным числом аргументов, внутри функции под именем параметра со "звёздочкой" нам будет доступен лист всех аргументов, переданных функции при вызове.
Так же, если перед именем параметра указать две звёздочки, то мы сможем передавать переменное кол-во именованных параметров. Внутри функции они будут храниться как словарь, где ключами служат имена параметров, переданных при вызове, а значениями - значения параметров при вызове. Например, функцию со следующей сигнатурой:
def Foo(**kw):
...
Можно вызвать так:
Foo()
Foo(arg1 = 1, arg2 = 2)
Foo(arg1 = 1)
Foo(name = "Vasya")
Foo(func = lambda p: p**2)
и так далее. То есть аргументов при вызове может быть хоть сколько, они могут иметь любые имена и любые значения любого типа. Вопрос тут стоит только о том, как это разгребать внутри функции. Но это уже не о том.
Функция может содержать внутри себя другую функцию, и даже возвращать её:
def Foo(arg1):
def InnerFunc(arg2)
return arg1+args2
return InnerFunc
тогда мы можем вызвать её так:
func = Foo(2)
где func - тоже функция, т.к Foo возвращает функцию. Мы можем вызвать func, передав ей входной параметр, который она требует:
result = func(2) #-> 4