Сейчас будет очень объемная тема про встроенные функции Питона, их аргументы и области применения. Можно ли создавать свои функции?
Функция — это блок кода, который можно вызвать в любом месте программы, не печатая код заново. До этого мы часто обращались к функциям, но не всегда называли их так. print, len, input, range.
А вообще с помощью функций можно повторно использовать код, создать более логичную структуру программы и объединять действия. Еще есть функции abs (модуль числа), min и max (находят максимальный и минимальный элемент последовательности), round (округляет число до какого-либо знаков после запятой), sum (сумма элементов последовательности).
[adace-ad id=»3475″]
Интересная функция — enumerate (нумерация последовательности)
[code]morsik = [‘Виски’, ‘Шампанское’, ‘Кола’, ‘Сок’] # список
for buhlishko, rating in enumerate(morsik, 1): # в переменные бухлишко и рейтинг записываем список и его нумерацию.
print (buhlishko, rating)
Результат:
Теперь решим простую задачку. Нужно проверить как работают функции min max и sum
[code]# нам необходимо ввести три ценника на пряный William Lawsons, минимальный, максимальный и их общую сумму
total_cost = [] # создаем пустой список, куда будут попать введеные пользователем ценники
for i in range(3):
cost = int(input(‘Сколько стоит вискарик, брат?’))
total_cost.append(cost)
print(max(total_cost))
print(min(total_cost))
print(sum(total_cost))
Результат.
Создание своих функций. Параметры
В питоне можно создавать свои функции, чтобы можно было свой написанный код вставлять в разные места своей программы, да и в стандартной библиотеке может не быть того, что нам нужно. Чтобы создать свою функцию нам необходимо написать слово def и передать параметры функции. Как это выглядит?
[adace-ad id=»3470″][code]
def viskarik (where, cost ): # можно не передавать параметры функции, тогда нужно оставить просто пустые скобки ()
print (where,cost) # выводим на экран два этих параметра
# функцию мы объявили, теперь можем вставлять её в любую часть кода
viskarik(‘Лента’, 1000) # вызвали функцию и вписали два параметра, как и указали в начале функции
[/code]
Результат
Теперь разберемся с результатом функции (возвращаемое значение). Чтобы функция не писала значение, а просто возвращала результат используется команда return
[code]def viskarik (where, cost):
return where,cost # возвращаем результат
buhlo = viskarik(‘Лента’, 1000) #записываем результат функции с параметрами в переменную бухло
gdekupit = ‘Купить бухло можно тут: {}, а стоит оно: {}’.format(buhlo[0], buhlo[1])
print(gdekupit)
[/code]
Результат
Передать параметры можно и напрямую, т.е. указать функции, у какого параметра какое будет значение.
[code]def viskarik (where, cost):
return where,cost # возвращаем результат
print(viskarik(where=’Окей’, cost=’900′))
[/code]
Результат:
Так же можно задать значение по умолчанию
[code]def pivas (gde=’везде’, summa):
print(summa, gde)
pivas(‘900’)
[/code]
Чтобы передавать несколько аргументов или сколь угодно много. Для этого используют args и kwargs. Первый передает любое количество по порядку, второй — по имени. Это не какие-то параметры, так просто принято называть их в Питоне
[code]def viskarik (where, *args): # меняем один параметр на значение со звездочкой *args
return where, args # возвращаем результат
print(viskarik(‘Окей’, ‘900’, ‘1000’, ‘1100’)) #теперь мы можем передавать сколько угодно параметров
# результатом программы будет кортеж
def bestviskarik (**kwargs):
for key, value in kwargs.items():
print(key, value)
bestviskarik(best = ‘William’, Second = ‘Captain Morgan’, Third = ‘Other’ )
# результатом программы будет словарь (ключ=значение)
[/code]
Результат:
Переменную можно так же объявить глобальной — для этого надо в функции прописать слово global перед переменной. Но лучше переменные, кототорые находятся вне функций в модуле оставлять локальными — т.к. она может использоваться и в другой функции.
Переменная в функции будет считаться глобальной для вложенной функции. И так по мере вложенности
Функция — тоже объект
Функция может быть объектом. Мы можем записать этот объект в какую-то переменную. И эта переменная станет у нас функцией. Кроме того, мы можем передать функцию как параметр к другой функции. Как это работает?
[code]def cost_viskarik ():
return 1000
result = cost_viskarik()
print(result)
buhlo = cost_viskarik # в переменную записываем НЕ результат функции, а саму функцию
print(buhlo) # переменная бухло хранит в себе функцию где-то в памяти
print(type(buhlo))# тип переменной у нас будет function
print(buhlo()) # теперь мы можем вызвать функцию cost_viskarik через переменную бухло
[/code]
Результат
Передача параметров
Передача параметров возможна, когда внутри функции переменными являются: алгоритм, последовательность действий, либо действия внутри функции..
[adace-ad id=»3473″][code]
def text():
print (‘Привет, алкоголики’) # делаем обычную функцию с выводом текста
def other(buhlo): # делаем функцию с параметром buhlo
buhlo() # этим параметром будет функция
other(text) # передаем в функцию other саму функцию text. Внутри other она становится функцией, т.к. параметр
# у нас там тоже функция. В итоге текст будет выведен на экран
Результат:
Теперь можно написать функцию для фильтрации праздничного стола
[code]def filter_stol (nishtyaki):
result = []
for x in nishtyaki:
if ‘Вискарик’ in x:
result.append(x)
return result
nishtyaki = [‘Вискарик Капитан Морган’, ‘Рандомный закусон’, ‘Вискарик Вильям’, ‘Сок’, ‘Шашлык’] print(filter_stol(nishtyaki))
[/code]
Результат:
Теперь рассмотрим передачу параметра в виде функции
[code]
def filter_stol (nishtyaki, function): # передаем второй параметр в функцию фильтр стола — function
result = []
for x in nishtyaki:
if function(x): # теперь вместо конкретного условия вставляем сюда параметр function
result.append(x)
return result
nishtyaki = [‘Вискарик Капитан Морган’, ‘Рандомный закусон’, ‘Вискарик Вильям’, ‘Сок’, ‘Шашлык’]
# теперь, чтобы фильтрануть список только по вискарю мы будем использовать новую функцию
def only_viski (x): # создаем новую функцию
if ‘Вискарик’ in x: # и задаем ей какое-то условие
return x # при которой функция возвратит результат
print(filter_stol(nishtyaki, only_viski)) # эту новую фунцию мы передаем параметром из изначальной функции фильтра стола
# фильтр по соку
def only_sok (x): # создаем новую функцию
if ‘Сок’ in x: # и задаем ей какое-то условие
return x # при которой функция возвратит результат
print(filter_stol(nishtyaki, only_sok))
[/code]
Результат:
Лямбда-функции
[adace-ad id=»3482″]
Это такие локальные функции, которые можно написать в одну строку — применяются для функций, которые будут вызваны один раз и больше в коде не пригодятся. Записывается как
labda входные параметры: результат
Выглядит это так:
[code]def filter_stol (nishtyaki, function):
result = []
for x in nishtyaki:
if function(x):
result.append(x)
return result
nishtyaki = [‘Вискарик Капитан Морган’, ‘Рандомный закусон’, ‘Вискарик Вильям’, ‘Сок’, ‘Шашлык’]
# def only_viski (x):
# if ‘Вискарик’ in x:
# return x
print(filter_stol(nishtyaki, lambda x: ‘Вискарик’ in x )) # вместо передачи, как парамера, функции only_viski
# мы напишем на её месте лямбда-функцию, передаем один параметр x
# затем сразу выводим возвращаемое значение (результат), т.е. то, что было бы в return
Результат:
