Языки программирования

Функции в Python

Функция в Python — это объект, принимающий аргументы и возвращающий значение. Объявление функции начинается с ключевого слова def, что является сокращением от define. После него идет имя функции.

После имени в круглых скобках задается список параметров. Пример простой функции:
def help():
    print("""Доступные команды:
          -h - справка
          -a - добавить
          -d - удалить
          -p - вывести""")

print("Эта строка будет отображена раньше")

help()
input()
Тело функции пишется с отступом со следующей строки. Мы объявили функцию help(), выводящую справку по использованию программы.

Интерпретатор при объявлении функции не выполняет ее, а выполнение функции начинается, когда будет встречен оператор её вызова (help()).

Функция может быть любой сложности и возвращать любые объекты (списки, кортежи, и даже функции):
def newfunc(n):
    def myfunc(x):
        return x + n
    return myfunc

new = newfunc(100)  # new - это функция
print(new(200))
input()

# выведет: 300

Аргументы функции

Функция может принимать произвольное количество аргументов или не принимать их вообще.
Напишем функцию sum(), которая принимает два параметра и возвращает сумму этих параметров. Листинг:
def sum(a, b):
    res = a + b
    return res

print(sum(2,2))
input()

# выведет: 4
Оператор return может возвращать, как результат вычисления выражения, так и значение переменной.

Рассмотрим еще один пример. Напишем код, который будет запрашивать у пользователя определенный ввод и он будет запрашивать до тех пор, пока пользователь не введет y или n. Листинг:
def yn(message):
    resp = None
    while resp not in ("y", "n"):
        resp = input(message).lower()
    return resp

answer = yn("Форматировать диск? [y/n]")
print("Ваш выбор: ", answer)
input()

Повторное использование кода

Основное назначение функций — это повторное использование кода. Если вам необходимо использовать один код несколько раз, тогда целесообразно оформить данный код в виде функции без параметров или с параметрами.
Преимущества повторного использования кода:
  1. Позволяет повысить производительность труда программиста. На проект можно затратить меньше времени и усилий;
  2. Позволяет улучшить качество программ;
  3. Позволяет повысить эффективность ПО. если есть хороший код, который эффективно работает, то целесообразно использовать его, а не писать новый код.
Использовать свой код повторно можно с помощью модулей в Python. После создания модулей можно будет подключать свой код к любой Python-программе и вызывать уже существующие в нем функции вместо написания новых для каждого проекта.

Переменное число параметров

Представим, что нужно написать функцию принимающую любое число параметров. Для этого используется аргумент «*». Пример:
def avg(first, *rest):
    return (first + sum(rest)) / (1 + len(rest))
print(avg(1,2))
print(avg(1,2,3,4))
input()

# выведет:
1.5
2.5
В данном случае rest-это кортеж, содержащий все дополнительно переданные аргументы. Код считает его последовательностью и работает как с последовательностью.

Функция может принять любое число именных параметров, тогда перед именем ставится **:
def variable_len(**args):
    print(type(args))
    for x, value in args.items():
        print(x, value)
variable_len(apple = "яблоко", bread = "хлеб") 

input()

# Выведет apple яблоко bread хлеб

Анонимные функции

Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее.
Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно присваивать переменной. Пример:
func = lambda x, y: x + y
print(func(1, 2))
input()
# выведет: 3

add = lambda x, y: x + y
print(add(2,2))
input()

# выведет: 4
lambda функции, в отличие от обычной, не требуется инструкция return, а в остальном, ведет себя точно также:
func = lambda *args: args
print(func(1, 2, 3, 4))
input()

# выведет: (1, 2, 3, 4)
Как правило, lambda используется в контексте некоторой другой операции, такой как сортировка или сокращение данных.

Возвращаем несколько значений

Иногда нужно, чтобы функция вернула несколько значений. Для этого просто возвращайте кортеж, например:
def fun():
    return 1, 2, 3
a, b, c = fun()
print(a, b, c)
input()

# выведет: 1 2 3
Данная функция возвращает одно значение, но в виде кортежа.

Документирование функции

Определим функцию:
def sum(s,y): return x + y
Если изучить ее, обнаружатся два скрытых метода (которые начинаются с двух знаков нижнего подчеркивания), среди которых есть __doc__.

Он нужен для настройки документации функции. Документация в Python называется docstring и может быть объединена с функцией следующим образом:
def sum(x, y):
    """Первая срока - заголовок

    Затем следует необязательная пустая строка и текст 
    документации.
    """
    return x+y
print(sum.__doc__)
sum.__doc__ += "some additional text"

input()
Команда docstring должна быть первой инструкцией после объявления функции. Ее потом можно будет извлекать или дополнять.

Видео по уроку:
Самоучитель по Python