Connect with us

Обучение

Заметки Python #5: Всё про функции

204

 

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

Функция — это блок кода, который можно вызвать в любом месте программы, не печатая код заново. До этого мы часто обращались к функциям, но не всегда называли их так. 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)

[/code]

 

Результат:

Теперь решим простую задачку. Нужно проверить как работают функции 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))

[/code]

 

Результат.

Создание своих функций. Параметры

В питоне можно создавать свои функции, чтобы можно было свой написанный код вставлять в разные места своей программы, да и в стандартной библиотеке может не быть того, что нам нужно. Чтобы создать свою функцию нам необходимо написать слово 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]

 

Результат:

Теперь можно написать функцию для фильтрации праздничного стола

[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

[/code]

 

Результат:

Нажмите что бы оставить комментарий

Ответить

Ваш адрес email не будет опубликован.

Лучшие сервисы стриминга музыки в 2019 году

Сервисы

Телевидение Wink Ростелеком: Samsung LG, Sony, Phillips, Android TV

Ростелеком

Ноутбуки Asus не видят жесткий диск. Автоматический вход в BIOS при старте

Гаджеты

LG WEB OS: приложения, обновления, настройка, проблемы со звуком

Гаджеты

Advertisement Яндекс.Метрика

Digital2.ru - Тренды, Профессии IT, WEB- разработка, Вакансии, Автоматизация, Цифровая экономика
Свободное копирование и распространение материалов с сайта Digital2.ru
разрешено только с указанием активной ссылки на Digital2 как на источник.
Copyright 2018 - 2020 © All rights reserved

OPGIO.COM

Connect