Функции в python

Функции
Функции являются очень удобным инструментом для структурирования кода программы
В общем виде инструкция для объявления функции имеет вид:

def <имя>(<аргументы>):
    <блок>



Очень часто тело функции содержит необязательную инструкцию return. Эта инструкция завершает работу функции и возвращает результат.

>>> def summa(a,b,c):
...     return a+b+c
... 
>>> summa(1,2,4)
7
>>>


Тип значения, которое возвращает функция, определяется типами ее аргументов

>>> def summa(a,b,c):
...     return a+b+c
... 
>>> summa('a','b','c')
'abc'
>>>


Аргументы могут передаваться функции с использованием позиции и с использованием ключей. Во втором случае при вызове функции используется форма <имя функции>(<имя аргумента>=<значение аргумента>).

>>> def summa(a,b,c):
...     return a+b+c
... 
>>> summa(c=4,b=2,a=1)
7
>>>


При объявлении функции можно использовать значения по умолчанию. Те аргументы, для которых заданы значения по умолчанию, можно не указывать при вызове функции.

>>> def summa(a,b=2,c=4):
...     return a+b+c
... 
>>> summa(1)
7
>>> summa(1,2)
7
>>> summa(1,2,4)
7
>>>


При объявлении и вызове функции перед именем аргумента можно использовать символы * и **. Использование символов * и ** при вызове функции позволяет передавать аргументы в виде кортежа или словаря. Если символы * и ** используются при объявлении функции, то они позволяют функции принимать произвольное количество аргументов в виде кортежа или словаря.
Пример передачи аргументов функции в виде кортежа

>>> def summa(a,b,c):
...     return a+b+c
... 
>>> args=(1,2,4)
>>> summa(*args)
7


Пример передачи аргументов функции в виде словаря

>>> def summa(a,b,c):
...     return a+b+c
... 
>>> kwargs={'a':1,'b':2,'c':4}
>>> summa(**kwargs)
7


Пример передачи функции произвольного числа аргументов в виде кортежа

>>> def func1(*args): 
...     print args
... 
>>> func1()
()
>>> func1(1)
(1,)
>>> func1(1,2)
(1, 2)
>>> func1(1,2,'c',2.5)
(1, 2, 'c', 2.5)
>>>


В качестве примера объявим функцию summa, вычисляющую сумму произвольного числа аргументов

>>> def summa(*args):
...     s=0.0
...     for i in args:
...         s=s+float(i)
...     return s
... 
>>> print summa()
0.0
>>> print summa(1)
1.0
>>> print summa(1,2,3.5,'5')
11.5
>>>


Пример передачи функции произвольного числа аргументов в виде словаря

>>> def func2(**kwargs): 
...     print kwargs
... 
>>> func2()
{}
>>> func2(a=1)
{'a': 1}
>>> func2(a=1,b='text',c=1.5)
{'a': 1, 'c': 1.5, 'b': 'text'}
>>>



>>> def summa(**kwargs):
...     s=0.0
...     for i in kwargs.values():
...         s=s+float(i)
...     return s
... 
>>> print summa()
0.0
>>> print summa(a=1)
1.0
>>> print summa(a=1,b=2,c=4)
7.0
>>>

При объявлении функций можно комбинировать обычные аргументы и аргументы со знаками * и **. Например, функция func(a,*args) требует наличие одного обязательного аргумента a и произвольного количества необязательных аргументов в виде кортежа args. Функция func(*args,**kwargs) позволяет принимать произвольное количество аргументов в виде кортежа и (или) словаря.

Анонимные функции
Анонимные функции не имеют имени и состоят из единственного выражения, значение которого является возвращаемым значением функции. Анонимные функции создаются с помощью ключевого слова lambda и используется в виде: lambda <аргументы>: <выражение> . Их удобно использовать для создания небольших функций. Анонимные функции являются выражением, в отличие от инструкции def. Вследствие этой особенности, lambda-выражения можно использовать в тех участках кода, где нельзя использовать def. Анонимные функции можно присваивать переменным.


>>> a=[lambda x:x, lambda x:2*x]
>>> for i in a: print i(2)
... 
2
4
>>>



>>> func=lambda a,b:a+b
>>> func(1,2)
3
>>>

  • avatar
  • 0

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.