Python-рецепты. Функции и модули.


В этой заметке мы рассмотрим определение функций на python, их вызов, а так же написание и использование отдельных модулей для дальнейшего использования. В качестве примера напишем модуль для простейших статистических расчетов (вычисление суммы элементов массива, среднего арифметического и дисперсии) и научимся его использовать.

Итак, вначале функции.

# сборник рецептов на python (функции и модули)

# пример определения ничего не делающей функции
# (pass означает ничего не делать)
def simpleFunction():
    u""" Справка (помощь, F1 и т.д.) для функции simpleFunction():
    эта функция абсолютно ничего не делает"""
    pass

# вызываем функцию
simpleFunction()

# вызываем справку по функции
print simpleFunction.__doc__

# функция сложения
# если второй аргумент не задан,
# то по умолчанию b = 1
def funcAdd(a, b=1):
    # то, что возвращает функция
    return a + b

# можно определить эту же функцию как лямбда-выражение
funcAdd = lambda a, b=1: a+b

# выведет сумму чисел 3 и 8
print funcAdd(3, 8)

# выведет 6, второй аргумент не задан
# и его значение принимается по умолчанию - единице
print funcAdd(5)

# можно сразу сделать вывод,
# а результат вычислений не возвращать
def printFuncAdd(a, b=1):
    print a + b

# возвращает None, а выводит 11
printFuncAdd(10)

# используем глобальные переменные
def printA():
    global a
    print a
    a += 1

# после вывода внешней переменной 'a'
# увеличивает ее значение на 1
a = 10
printA()
print a

Теперь перейдем к практической части. Сохраним файл на диск со следующим содержимым. Назовем его «stat.py». Это будет наш модуль.

# функция суммирования элементов массива
def summas(a):
    s = 0
    for x in a:
        s += x
    return s

# функция вычисления среднего арафиметического
def average(a):
    # используем определенную выше
    # функцию суммирования элементов массива
    return summas(a)/len(a)

# функция вычисления дисперсии
def dispersion(a):
    av = average(a)
    s = 0
    for x in a:
        s += (x - av) * (x - av)
    return s/len(a)

В той же папке сохраняем файл (под названием «test.py») следующего содержания.

# импортируем модуль stat.py
import stat

# "придумываем" массив для обработки
a = [1,3,4,2,3,4]

print u'Исходный массив: ', a
print u'Сумма элементов массива: ', stat.summas(a)
print u'Среднее арифметическое: ', stat.average(a)
print u'Дисперсия: ', stat.dispersion(a)

# а можно подключить модуль так:
import stat as st

print u'Исходный массив: ', a
print u'Сумма элементов массива: ', st.summas(a)
print u'Среднее арифметическое: ', st.average(a)
print u'Дисперсия: ', st.dispersion(a)

# или так:
from stat import *

print u'Исходный массив: ', a
print u'Сумма элементов массива: ', summas(a)
print u'Среднее арифметическое: ', average(a)
print u'Дисперсия: ', dispersion(a)

Запускаем и видим, что функции свеженаписанного модуля успешно работают.

С python поставляется большое количество удобных модулей. Для обработки котировок нам понадобятся модули urrlib, re и math, но это уже совсем другая история…

, ,



  1. Пока нет комментариев.
(никто не узнает)