НОЧУ ДПО "Национальный открытый университет "ИНТУИТ"
Опубликован: 24.01.2021 | Доступ: свободный | Студентов: 1283 / 22 | Длительность: 03:57:00
Лекция 13:

Функции и процедуры

< Лекция 1 || Лекция 13: 12345

Описание классической функции. Вызов функции

Синтаксис описания функции в наиболее употребительном варианте достаточно прост:

def <имя функции> (<список имен аргументов>):
		<Операторы тела функции>

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

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

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

В отличие от привычного для меня стиля, когда заголовочный комментарий предшествует заголовку функции, в языке Pythonзаголовочный комментарий располагается сразу после заголовка функции (метода). Заголовочный комментарий является документированным комментарием и дает подсказку при вызове метода. Синтаксически заголовочный комментарий представляет текст, взятый в тройные кавычки, занимающий возможно несколько строчек.

Функции вызываются в выражениях и представляют первичные выражения, так что вызов функций допустим всюду, где допускаются первичные выражения.

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

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

P(x) = a_n * x^n + a_{n-1} * x^{n-1} + \dots + a_1 * x^1 + a_0

Входными параметрами (аргументами) являются два параметра - список коэффициентов полинома и число x. У функции один результат - значение полинома в точке x. Для вычисления результата будет использоваться классическая схема Горнера, требующая выполнения только n умножений и n сложений.

\def Gorner(a, x):
"""
    Вычисление полинома P(x) = Gorner(a, x)
    a - список коэффициентов полинома, первый в списке - старший коэффициент
    x - точка (число), в которой вычисляется значение полинома.
"""

    v = 0
    for coef in a:
        v = v * x + coef
    return v    

Выполним два вызова этой функции:

def test1():
    print("Polinom P(x) - Gorner Shema")
    p1 = Gorner([1, 2, 3], 2)
    print( "Gorner([1, 2, 3], 2) = ", p1)
    p2 = Gorner([3, 2, 1], 2)
    print( "Gorner([3, 2, 1], 2) = ", p2)
test1()

Вот результаты вычислений:


Рассмотрим теперь пример простой функции, вычисляющей два значения - минимальный и максимальный элементы списка. Результатом вычисления будет список из двух элементов, первый из которых является максимальным элементом, второй минимальным.

def Max_Min(a): 
"""
Вычисление максимального и минимального элементов списка a
"""
   
    max = min = a[0]
    for item in a:
        if item > max:
           max = item
        elif item < min:
           min = item
    res = [max, min]
    return res

Вызовем функцию на выполнение:

def test2():
    print ("Вычисление Max, Min списка ")
    a  = [5, 7, -2, 1, 8, 6]
    maxmin = Max_Min(a)
    print("max([5, 7, -2, 1, 8, 6]) = ", maxmin[0])
    print("min([5, 7, -2, 1, 8, 6]) = ", maxmin[1])
test2()

Результаты выполнения:


< Лекция 1 || Лекция 13: 12345
Елена Лаптева
Елена Лаптева

Думаю. что не смогу его закончить. Хотелось предупредить других - не тратьте зря время, ищите другой курс.

Михаил Сидоров
Михаил Сидоров

Если S - последовательность, то срез задается как S(i : j) и содержит j - i элементов,

а в примере используютс другие скобки - 

NL[1:3] = ["решили", "не", "искать"]

или это не срез, тогда, что это?