Экспресс-курс по Python: Лекция №3 Функции и модули

При написании коль сколько-нибудь сложных программ необходимо код программы разбивать на отдельные части. Самым мелкой частью являются функции, которые программируются автономно от всей программы, но которые связаны с помощью входных параметров, и возвращаемым результатом. Иногда функции могут быть связаны через глобальные переменные, но использование глобальных переменных - это опасный путь при разработке. Далее отдельные функции удобно хранить в отдельных файлах, которые различные проекты могут подключать и использовать. Такие файлы, содержащие функции, называются в Python модулями.

Сначала рассмотрим определение и использование функции в языке Python. Как мы уже отмечали, функции могут иметь параметры и возвращать значения. При этом операторы тела функции будут активированы в момент вызова функции из другой части кода. Вот пример функции:

  1. # определение функции
  2. def func(a, b):
  3. c = a * b
  4. return c
  5. # основная часть программы
  6. n = 5
  7. m = 6
  8. k = func(n, m)
  9. print(k)

30

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

  1. # определение функции
  2. def func(a, b = 3):
  3. c = a * b
  4. return c
  5. # основная часть программы
  6. n = 5
  7. k = func(n)
  8. print(k)

15

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

  1. def fact(n):
  2. if n <= 1:
  3. return 1
  4. else:
  5. return n * fact(n - 1)
  6.  
  7. N = int(input("Введите N > "))
  8. NF = fact(N)
  9. print("N! = " + NF.__str__())

Введите N > 5
N! = 120

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

  1. def MinMax(P):
  2. if len(P) < 1:
  3. return (0, 0)
  4. Min = P[0]
  5. Max = P[0]
  6. for x in P:
  7. if x < Min:
  8. Min = x
  9. if x > Max:
  10. Max = x
  11. return (Min, Max)
  12.  
  13. P = [-1, 10, 2, 3, -2, 5, 6]
  14. Min, Max = MinMax(P)
  15. print("Min = " + Min.__str__() + ", Max = " + Max.__str__())

Min = -2, Max = 10

В большой программе всегда используется большое количество различных функций, а общее количество строк кода имеет десятки и сотни тысяч строк, поэтому вся программа разбивается на большое количество модулей, расположенных в разных файлах. Кроме того, такое разбиение позволяет вести параллельную разработку кода и использовать уже ранее написанные функции. Python поддерживает модульную структуру программ. Часть функций может быть реализована в отдельных файлах, называемых модулями. При этом каждый модуль имеет название, которое задается совпадает с именем файла без расширения. Например, если модуль расположен в файле factorial.py, то такой модуль имеет имя factorial. Для того, чтобы использовать функции в модуле этот модуль необходимо подключить с помощью команды import, например:

  1. import factorial

Пусть в этом модуле будет реализация функции fact(n), покажем как она вызывается:

  1. import factorial
  2. NF = factorial.fact(5)

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

  1. def fact(n):
  2. if n <= 1:
  3. return 1
  4. else:
  5. return n * fact(n - 1)
  6.  
  7. print("Модуль подключен.")

В основной программе напишем:

  1. import factorial
  2. print(factorial.fact(5))

В результате будет

Модуль включен!
120

Модуль также может подключать другие модули, но нужно, чтобы не возникло циклического подключения модулей. Одной командой можно импортировать несколько модулей, например:

  1. import unit1, unit2, unit3

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

  1. # Модуль unit1
  2.  
  3. def func(n):
  4. a = n * n
  5. print("Квадрат " + n.__str__() + " равен " + a.__str__())
  1. # Модуль unit2
  2.  
  3. def func(n):
  4. a = n * n * n
  5. print("Куб " + n.__str__() + " равен " + a.__str__())

В этих модулях объявлена функция с одинаковым названием func. Подключим эти модули и выполним следующий код:

  1. import unit1, unit2
  2.  
  3. unit1.func(3)
  4. unit2.func(3)

Квадрат 3 равен 9
Куб 3 равен 27

Укажем еще, что при подключении модуля ему можно дать новое названия для ссылок:

  1. import unit as my

Тогда для вызова можно использовать следующий код

  1. my.func(5)

Язык программирования Python обладает развитыми стандартными модулями, содержащими огромное количество функций. Эти модули становятся доступными после указания их в инструкции import. Кроме того, доступно большое количество сторонних модулей, в которых реализованы тысячи функций на все случаи жизни. Мы наиболее часто будем использовать модуль math, в котором реализованы основные математические функции и модуль random для получения псевдослучайных чисел (с различными законами распределения).

Приведем пример получения последовательности нормально распределенных случайных величин:

  1. import random
  2.  
  3. for n in range(10):
  4. x = random.normalvariate(0, 1)
  5. print(x)

-0.12067952406854943
-1.5057798633269697
0.6456773221594082
-1.251377153424645
1.5301106633575032
1.100802203681748
-1.3554079150895464
-0.2812866585673061
-0.9670328083983757
-0.6026818572475595

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

Home | Лекции | Python | Видео | Скачать | Ссылки
Copyright (c) 2017, Roman Shamin
148
43528
77