Функции

17 декабря 2019



Функция - это именованный фрагмент кода (подпрограмма), к которому можно обратиться из другого места вашей программы. Главным достоинством функций является, возможность переиспользования кода и/или выделение некоторого кода в отдельную структуру.

Функция определяет собственную (локальную) область видимости, куда входят входные параметры, а также те переменные, которые объявляются непосредственно в теле самой функции.

Объявление функций.

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

Простая функция

def myFunc():
print("hello myFunc!!!")

# Вызов функции в коде.
myFunc() # hello myFunc!!!

Данная функция не принимает аргументы, все, что она делает - это выводит сообщение hello myFunc!!!

Функция может быть присвоена переменной.

my_var = myFunc
my_var() # hello myFunc!!!

Область видимости

Следует помнить, что функция должна быть сначала объявлена , а только потом вызвана.
Например такой код вызовет ошибку:

myFunc()

def myFunc():
print("hello myFunc!!!")

Так как Вы пытаетесь обратиться к функции, о которой Python еще не знает.

Область видимости переменных

Переменные объявленные вне функции находятся в Глобальной области видимости и доступны всей программе.
Переменные объявленные в теле функции - видны только в данной функции представляют Локальную область видимости.
Дальнейший пример демонстрирует зоны видимости.

my_var = 10
my_var2 = 20

def myFunc():
func_var = 5
my_var2 = 15 # Переменная функции не переопределяет
    глобальную
print("--- В теле Функции ---")
print("my_var =", my_var) # 10
print("my_var2 =", my_var2) # 15
print("func_var =", func_var) # 5

myFunc()
print("--- Глобальная область видимости ---")
print("my_var2 =", my_var2) # 20 значение переменной небыло
    переписано
# print(func_var) # Вызовет ошибку func_var не определена

Аргументы (параметры) функции

Аргументами функции называют значение которые принимает функция. Аргументы передаются через запятую.

def myFunc(data):
print(data)

myFunc("HELLO!") # HELLO!

В данном примере передаем в функцию аргумент data и затем выводим его на экран командой print.

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

def myFunc(a=5, b=10):
print(a, b)

myFunc() # 5 1 использованы аргументы по умолчанию
myFunc(1, 2) # 1 2
    использованы переданные аргументы
myFunc(1) # 1 10 переданный аргумент a так как он первый. b
    поумолчанию.
myFunc(b=3) # 5 3 именованя передача аргумента

Возвращаемое значение

Не всегда удобно чтобы функция выводила итог работы на экран, часто бывает нужно присвоить итог работы какой либо переменной. Для этого функция должна возвращать значение. Реализовано это при помощи команды return.

def myFunc(a=5, b=10):
return a+b

i = myFunc(10, 20)
print(i) # 30

Наша функция, вместо вывода текста в консоль, выполняет сложение a+b и возвращает полученное значение. Которые мы присваиваем переменной i. В нашем примере i хранит значение равное 30.

Возвращаемых значений может быть как одно, так и несколько в зависимости от условий.

def myFunc(a=5, b=10):
if a<b:
return a+b
else:
return a-b
print(myFunc(10, 20)) # 30
    используется сложение
print(myFunc(30, 20)) # 10
    используется вычитание

В данном примере для краткости мы передаем нашу функцию сразу аргументом функции print()

Передача функции аргументом.

def fun1(name):
print("привет " + name() + "!")

def fun2():
return input("Введите имя: ") #input() для получения ввода из консоли

# вызов функции
fun1(fun2) # привет YOUR_NAME!

*args - список аргументов

*args используется для получения неизвестного заранее количества аргументов.

def func1(*args):
return args

print(func1("a", "b", "c", "d"))

Рекурсия

Вызов в функции самой себя.
В качестве примера рассчитаем факториал:

def fact(num):
if num == 0:
return 1 # факториал нуля
    равен единице
else:
return num * fact(num - 1)

print(fact(5)) # 120

Старайтесь использовать подобный вызов только тогда, когда он действительно необходим.

Документация!

Хорошим стилем программирования считается документировать свой код.
Python имеет встроенные методы работы с документацией. Документация пишется в тройных кавычках """ """ сразу после объявления функции. Для получения документации используется метод __doc__.

def myFunc():
""" Функция которая возвращает ноль и больше ничего не делает. """
return 0
print(myFunc.__doc__)