Python. Функция. Понятие функции. Общая форма. Примеры объявления и использования функций




Функция. Понятие функции. Общая форма. Примеры объявления и использования функций

 


Содержание


Поиск на других ресурсах:

1. Что такое функция? Определение функции. Преимущества применения функций

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

Использование функций в программах на Python дает следующие взаимосвязанные преимущества:

  • избежание повторения одинаковых фрагментов кода в разных частях программы;
  • уменьшение избыточности исходного кода программы. Как следствие, уменьшение логических ошибок программирования;
  • улучшенное восприятие исходного кода программы в случаях, где вместо блоков многочисленных инструкций (операторов) вызываются имена готовых протестированных функций. Это, в свою очередь, также уменьшает количество ошибок;
  • упрощение внесения изменений в повторяемых блоках кода, организованных в виде функций. Достаточно внести изменения только в тело функции, тогда во всех вызовах данной функции эти изменения будут учтены;
  • с помощью функций удобно разбивать сложную систему на более простые части. Значит, функции – удобный способ структурирования программы;
  • уменьшение трудозатрат на программирование, а, значит, повышение производительности работы программиста.

В языке программирования Python для функций характерны следующие особенности:

  • функции могут возвращать результат;
  • функции могут получать входные параметры, влияющие на полученный результат.

 

2. Инструкция def. Общая форма объявления функции в Python. Создание функции

Чтобы функцию можно было использовать в программе, ее нужно создать (объявить). В языке Python создание (или объявление) функции выполняется с помощью инструкции def. Если интерпретатор достигает инструкции def, он создает новый объект функции и связывает упакованный код функции с ее именем.

Функция может возвращать или не возвращать значение. Если функция не возвращает значения, то считается, что она автоматически возвращает объект None, который игнорируется. В этом случае инструкция return необязательна. Общая форма такой функции следующая:

def <name>(arg1, arg2, ..., argN):
    <statement1>
    <statement2>
    ...
    <statementN>

где

  • name – имя функции, с которым будет связан объект функции и список параметров (arg1, arg2, …, argN). Объект функции получает имя name и создается во время выполнения (в Python нет времени компиляции);
  • arg1, arg2, argN – список параметров, которые может получать функция. Функция также может быть без параметров;
  • statement1, statement2, statementN – одна или несколько инструкций, которые следуют с отступлениями относительно def.

Если функция возвращает значение, то ее общая форма следующая

def <name>(arg1, arg2, ..., argN):
    <statement1>
    <statement2>
    ...
    <statementN>
    return <value>

здесь

  • name – имя функции;
  • arg1, arg2, …, argN – параметры функции (если такие есть);
  • statement1, statement2, statementN – инструкции, которые реализованы в теле функции;
  • value – значение, возвращаемое функцией.

Определение функции с помощью инструкции def может быть реализовано внутри других инструкций, например, внутри инструкции if.

 

3. Вызов функции

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

Например. Пусть объявлена следующая функция

def Mult2(a, b):
    return a*b

тогда ее вызов может быть, например, таким

res = Mult2(7,9)

В результате, значение res = 63.

Интерпретатор, встретив инструкцию def выполняет следующие действия:

  • создает новый объект функции с именем Mult2;
  • упаковывает программный код функции и связывает объект с именем Mult2;
  • вызывает функцию в программе.

Если указать

res = Mult2('abc',3)

то res = ‘abcabcabc’.

 

4. Пример объявления и использования функции без параметров

Ниже приведен пример объявления и использования функции, которая не содержит параметров. Функция носит имя Hello и выводит на экран текст «Hello world!» 3 раза.

# Функции без параметров.
# Объявить функцию с именем Hello(),
# которая выводит "Hello world!" на экран.
def Hello():
    print("Hello world!")

# Вызвать функцию Hello() в цикле while
i=0
while i<3:
    Hello()
    i=i+1

 

5. Пример объявления и использования функции, которая получает 1 параметр

Ниже приведен пример создания и использования функции Print3(), которая получает один параметр и выводит его на экран 3 раза.

# Объявить функцию с именем Print5(),
# которая выводит значение параметра t на экран 3 раза
def Print3(t):
    i=0
    while i<3:
        print(t)
        i=i+1

# Вызвать функцию Print3() для разных типов параметров
Print3('abc')
Print3(2.85)
Print3(-88)
Print3(True)

Результат выполнения программы

abc
abc
abc
2.85
2.85
2.85
-88
-88
-88
True
True
True

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

 

6. Пример объявления и использования функции, которая получает параметр и возвращает результат

Ниже приводится пример функции, которая получает параметр и возвращает результат. Функция осуществляет реверсирование строки.

# Функция, реверсирующая строку
def Reverse(s):
    s2 = ''
    i = len(s)-1
    while i>=0:
        s2 = s2 + s[i]
        i = i-1
    return s2

# Вызов функции Reverse()
s1 = "abcdef"
s2 = Reverse(s1) # s2 = 'fedcba'
print("s2 = ", s2)

Результат работы программы

s2 = fedcba

 

7. Пример объявления функции в инструкции if. Реализация альтернативы

Определение функции с помощью средства def может быть вложено в другую инструкцию, например, инструкцию if. В этом случае возникает альтернатива при выполнении программы.

Пример. В примере на основании введенного значения n создается функция Fn(), которая вычисляет тригонометрическое выражение по следующему правилу:

  • sin(x)*cos(x), если n==1;
  • sin(x2)+cos(x), если n==2;
  • 1-sin(x), в противном случае.

Затем эта функция вызывается для заданного значения x.

# По заданному значению n определить функцию Fn(),
# которая вычисляет:
# sin(x)*cos(x), если n==1
# sin(x*x)+cos(x), если n==2
# 1-sin(x), в противном случае

# Импортировать математическую библиотеку
import math

# Ввести значение n
n = int(input('n = '))
x = float(input('x = '))

# Определить код функции Fn()
if (n==1):
    def Fn(x):
        print("n==1. res = sin(x)*cos(x).")
        return math.sin(x)*math.cos(x)
else:
    if (n==2):
        def Fn(x):
            print("n==2. res = sin(x*x)+cos(x)")
            return math.sin(x*x)+math.cos(x)
    else:
        def Fn(x):
            print("n==3. res = 1-sin(x)")
            return 1-math.sin(x)

# Вызов функции Fn()
res = Fn(x)
print("res = ", res)

Результат выполнения программы

n = 3
x = 1.2
n==3. res = 1-sin(x)
res =   0.06796091403277371

 

8. Полиморфизм в функциях. Примеры

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

Например, операция * может применяться как к числам, так и к строкам. В случае с числами эта операция означает умножение. В случае со строками эта операция позволяет повторить строку заданное количество раз.

Пример 1. Демонстрируется функция Mult(), которая получает два параметра a, b. Для полученных параметров выполняется операция *.

# Полиморфизм в функциях
# Функция Mult()
def Mult(a,b):
    return a*b

# Вызов функции Mult() для разных типов объектов
# 1. Для чисел
x = 8
y = 5
z = Mult(x,y) # z = 40

# 2. Для строк
s1 = "Hello "
n = 3
s2 = Mult(s1,n) # s2 = 'Hello Hello Hello'

Пример 2. Демонстрируется функция Summ(), которая получает два параметра a, b. Функция возвращает результат операции + над параметрами.

# Полиморфизм в функциях
# Функция Summ()
def Summ(a,b):
    return a+b

# Вызов функции Summ() для разных типов объектов
# 1. Для чисел
x = 18
y = 3
z = Summ(x,y) # z = 40

# 2. Для строк
s1 = "Hello "
s2 = "world!"
s3 = Summ(s1,s2) # s3 = 'Hello world!'

 

9. Использование локальных переменных внутри функций. Пример

Внутри функции могут быть объявлены локальные переменные. Локальная переменная – это имя (объект), которое доступно только внутри определения функции (инструкции def). Локальная переменная существует только во время выполнения функции.

В теле любой функции локальные переменные определяются на основе следующих признаков:

  • если переменная размещается в левой части операции присваивания;
  • если переменная (имя) есть параметр (аргумент) функции;
  • если переменная есть итератором в цикле for.

Пример. В примере создается функция SquareTriangle(), которая вычисляет площадь треугольника по его сторонам. Длины сторон треугольника с именами a, b, c есть входными параметрами функции. Если с a, b, c невозможно образовать треугольник, то функция возвращает значение None.

Затем происходит вызов функции SquareTriangle() и обработка результата возврата из функции.

# Вычислить площадь треугольника по длинам его сторон a,b,c

# Импортировать математическую библиотеку
import math

def SquareTriangle(a,b,c):
    if (((a+b)<c) or ((b+c)<a) or ((a+c)<b)):
        return None
    else:
        p = (a+b+c)/2 # это локальная переменная p
        s = math.sqrt(p*(p-a)*(p-b)*(p-c)) # локальная переменная s
        return s

# Использование функции SquareTriangle()
s = SquareTriangle(5,4,5)

if (s==None):
    print("The values of a, b, c is incorrect.")
else:
    print("s = ", s)

В функции SquareTruangle() создаются две локальные переменные с именами p, s.

Результат выполнения программы

s = 9.16515138991168