Как и всё остальное в Python, функции - это объекты.
Функция определяется с помощью ключевого слова def
.
Определим простейшую функцию:
def hello(): print('hello')
Вызов функции осуществляется по имени. Если функция не имеет аргументов, она вызывается с пустыми скопками.
hello()
Функция может принимать аргументы.
def vowels(word): print word
В таком случае, вызов функции осуществляется с передачей одного аргумента
vowels('hello word');
Функция может иметь любое количество аргументов любого типа.
Как правило, функция возвращает результат ввиде одного значения, либо коллекции значений упакованных в соответствующую структуру данных.
def search(word): letters = set(word) return letters;
В данном случае, функция возвращает множество.
Функция может веруть значение с помощью ключевого слова return. После возврата значения функция больше не выполняется. Какой бы код ни шел после инструкции return, он не будет выполняться.
Имеется возможность объявить аннотации для функции. Аннотации не являются обязательными и носят информационный характер.
Аннотации указывают типы аргументов функции и тип возвращаемого значения функции.
def search(word:str) -> set: letters = set(word) return letters
Таким образом мы добавили аннотацию :str
, указывающую, что аргументом функции является строка, и аннотацию -> set
, которая указывает, что функция возвращает множество.
Подробнее аннотации описываются в PEP 3107 (http://www.python.org/dev/peps/pep-3107).
Функции в Python могут ссылаться на параметры по их именам. Т.к. у каждого аргумента имеется собственный ключ, то порядок следования аргументов не важен. Рассмотрим функцию с двумя аргументами:
def search(phrase:str, letters:str='aeiou') -> set:
При обращении к такой функции, мы можем поменять аргументы местами, если обращаемся к ним по именам:
search(letters='galaxy', phrase)
С помощью нотации *
(звездочка) ункция может принять любое количество аргументов (ноль и более аргументов).
def myfunc(*args): for a in args: print(a, end=' ')
Эта функция может быть вызвана с любым количеством аргументов:
myfunc(); myfunc(10); myfunc(1,2,3,4);
Для того, чтобы передать произвольное количество именованных аргументов, можно использовать нотацию **
.
def myfunc2(**kwards): for k,v in kwards.items(): print(k,v,sep='->', end=' ')
Вызов функции myfunc2 с произвольным количеством именованных аргуметов:
myfunc2(a=10, b=20); myfunc2(); myfunc2(a=10, b=20, c=30, d=40);
в