Именные функции, инструкция def
Функция в python - объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def.
Определим простейшую функцию:
def add(x, y): return x + yИнструкция return говорит, что нужно вернуть значение. В нашем случае функция возвращает сумму x и y.
Теперь мы ее можем вызвать:
>>>
>>> add(1, 10)11>>> add('abc', 'def')'abcdef'Функция может быть любой сложности и возвращать любые объекты (списки, кортежи, и даже функции!):
>>>
>>> def newfunc(n):... def myfunc(x):... return x + n... return myfunc...>>> new = newfunc(100) # new - это функция>>> new(200)300Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None:
>>>
>>> def func():... pass...>>> print(func())NoneАргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
>>>
>>> def func(a, b, c=2): # c - необязательный аргумент... return a + b + c...>>> func(1, 2) # a = 1, b = 2, c = 2 (по умолчанию)5>>> func(1, 2, 3) # a = 1, b = 2, c = 36>>> func(a=1, b=3) # a = 1, b = 3, c = 26>>> func(a=3, c=6) # a = 3, c = 6, b не определенTraceback (most recent call last): File "", line 1, in func(a=3, c=6)TypeError: func() takes at least 2 arguments (2 given)Функция также может принимать переменное количество позиционных аргументов, тогда перед именем ставится *:
>>>
>>> def func(*args):... return args...>>> func(1, 2, 3, 'abc')(1, 2, 3, 'abc')>>> func()()>>> func(1)(1,)Как видно из примера, args - это кортеж из всех переданных аргументов функции, и с переменной можно работать также, как и с кортежем.
Функция может принимать и произвольное число именованных аргументов, тогда перед именем ставится **:
>>>
>>> def func(**kwargs):... return kwargs...>>> func(a=1, b=2, c=3){'a': 1, 'c': 3, 'b': 2}>>> func(){}>>> func(a='python'){'a': 'python'}В переменной kwargs у нас хранится словарь, с которым мы, опять-таки, можем делать все, что нам заблагорассудится.
Анонимные функции, инструкция lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее. Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно присваивать переменной, как делали мы инструкцией def func():
>>>
>>> func = lambda x, y: x + y>>> func(1, 2)3>>> func('a', 'b')'ab'>>> (lambda x, y: x + y)(1, 2)3>>> (lambda x, y: x + y)('a', 'b')'ab'lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном, ведет себя точно так же:
>>>
>>> func = lambda *args: args>>> func(1, 2, 3, 4)(1, 2, 3, 4)