Функції
Функція в python - об'єкт, який приймає аргументи і повертає значення. Зазвичай функція визначається за допомогою інструкції def .
def <ім'я функції>(<параметри>,<параметри>=<значення>):
<команди>
Визначимо найпростішу функцію:
def add ( x , y ):
return x + y
Функція може бути будь-якої складності і повертати будь-які об'єкти (списки, кортежі, і навіть функції!):
def newfunc ( n ):
def myfunc ( x ):
return x + n
return myfunc
Функція може і не закінчуватися інструкцією return, при цьому функція поверне значення None :
def func ():
pass
Аргументи функції
Функція може приймати будь-яку кількість аргументів чи не приймати їх зовсім. Також поширені функції з довільним числом аргументів, функції з позиційними і іменованими аргументами, обов'язковими і необов'язковими.
>>> 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 = 3
6
>>> func ( a = 1 , b = 3 ) # a = 1, b = 3, c = 2
6
>>> 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)