# Функции
Функция — блок кода для выполнения определенной задачи, который можно использовать многократно в разных частях программы. Существует множество встроенных в Python готовых функций. Некоторые вы уже применяли ранее: print() , str() , int() , float() , len() .
Создание функции называется определение. Оно начинается с ключевого слова def (от англ. definition, «определение»), затем идут имя функции, её аргументы, или параметры в круглых скобках и двоеточие. Начиная со следующей строки, с отступом в 4 пробела от начала, записывают тело функции — код, который она выполняет. Обращение к функции называется вызов функции. Функция вызывается по имени, при вызове ей передают аргументы, с которыми она должна что-то сделать.
Напишем приветствие как функцию:
Создали функцию с именем say_hello (англ. say hello, "поздороваться"). В любом месте программы при вызове say_hello() будет выводиться на экран приветствие с текстом, зависящим от аргумента current_hour (англ. current hour , "текущий час").
# Упражнения
- На основе заготовленного кода напишите функцию print_friends_count() для вывода количества друзей. Аргументом сделайте friends_count . Вызовите эту функцию не менее трёх раз с разными аргументами. Значениями friends_count могут быть любые натуральные числа.
- Напишите цикл для запусков print_friends_count() c аргументами от 1 до 10. Проследите изменения выведенных надписей.
# Упражнения tkinter
Напишите оконное приложение выводящее список количества друзей.
Напишите оконное приложение с полем ввода количества друзей. Кнопкой при нажатии на которую выводится сообщение о количестве друзей.
# Аргументы функции
В Python аргументам функций может быть присвоено значение по умолчанию. Оно подставляется, когда при вызове функции вы не оставляете насчёт аргументов никаких инструкций.
Функция say_hello() принимает два аргумента — current_hour и name (англ. name, "имя"), которому задано значение по умолчанию. При вызове только с одним аргументом current_hour значением второго аргумента name станет пустая строка.
При вызове функции можно явно указывать, какому аргументу какое значение соответствует. В таком случае порядок следования аргументов в скобках роли не играет.
# Упражнения
Допишите код функции print_friends_count() , добавьте аргумент name со значением по умолчанию. Если вы при вызове передаёте функции имя, она должна вывести на экран строку вида '<имя>, у тебя N друзей' , если нет — тогда просто 'У тебя N друзей' .
Анфиса может анализировать списки. Например, подсчитывать дни, когда в вашем городе или в городах ваших друзей стояла хорошая погода.
Есть списки средних дневных температур в Москве за май 2017 и 2018 годов. Создайте функцию comfort_count(temperatures) для подсчёта в переданном списке комфортных дней — дней с температурой воздуха от 22 до 26 градусов включительно.
Функция в результате работы должна вывести на экран строку 'Количество комфортных дней в этом месяце: N' , где N — результат подсчёта в цикле с условием. Сначала посчитайте приятные дни в мае 2017-го года, а потом — в мае 2018-го.
# Разбиение на функции
В больших проектах, написанных на Python, принято выносить весь повторяющийся код в отдельные функции перед телом основной программы. Посмотрим на пример:
Функция say_hello() содержит основную логику, а runner() (от англ. run, "запускать") выполняет роль управляющего механизма. Такое разделение придаёт коду программы аккуратный внешний вид, делает его более выразительным, упрощает чтение.
# Упражнения
- Подготовьте код Виты к использованию на сервере.
- Напишите функцию process_query() (англ. process query, «обработать запрос»). Перенесите в неё весь код из тела основной программы. Эта функция будет принимать на вход запросы пользователя и выдавать ответ на них. Пока она может обработать всего один запрос — сообщить количество друзей.
- Добавьте вызов функции process_query() в тело основной программы.
- На серверы приходит множество запросов — от разных пользователей или от других серверов. Измените функцию process_query() (обработчик запроса), чтобы она поддерживала несколько разных запросов, а не только один.
- Добавьте аргумент query в функцию process_query() . Этот аргумент будет сообщать, какой именно запрос необходимо обработать.
- В начало функции process_query() добавьте проверку значения переменной query: если значение равно 'Сколько у меня друзей?' — выведите ответ на этот вопрос, как в предыдущем задании;
- в противном случае — выведите '<неизвестный запрос>'. Добавьте вызов process_query('Сколько у меня друзей?') в основное тело программы. Добавьте ещё один вызов process_query('Как меня зовут?') в основное тело программы.
- Доработайте программу.
- Добавьте в функцию process_query() обработку ещё одного запроса 'Кто все мои друзья?'. В ответ нужно выводить на экран Твои друзья: <список_друзей>, где <список_друзей>— строка, состоящая из списка друзей, разделённых запятой и пробелом.
- Добавьте вызов process_query('Кто все мои друзья?') в тело основной программы.
# Возврат значений из функции
Пока что все наши функции печатали результаты своей работы на экран. Но обычно задача функции не сводится к выступлениям в печати. Как правило, это код, производящий специальные вычисления. Он не выводит результаты на экран, а возвращает их как значения. Значение вернётся в вызывающий код, и там будет использовано. Например, сохранено в переменной. Если программе нужно, к примеру, несколько раз посчитать одно и то же, эти вычисления поручают особым функциям:
Ключевое слово return (англ. «возвращать») указывает, какое значение функция вернёт основному коду.
# Упражнения
- Доработаем программу подсчёта комфортных дней в мае.
- Измените функцию comfort_count() , чтобы она не печатала количество комфортных дней, а возвращала.
- Чтобы увидеть результат выполнения функции, напечатайте его в основном коде командой print(comfort_count(may_2017)) .
# Вызов функции из функции
Функцию можно вызвать не только из основного кода, но и из другой функции.
Хорошая привычка — выделять вычисления и вывод в отдельные функции, чтобы печать результатов не была разбросана по всему коду.
Если бы мы ошиблись и забыли вернуть строку text из функции show_info(), то вывод получился бы странный:
Что такое None здесь? Это специальное значение в Python, и оно обозначает. ничего (англ. none, "ничто"). Если значение какой-нибудь переменной равно None , обычно это значит, что она не определена, не имеет никакого значения. Функция runner() печатает результаты вызовов функции show_info() . Так как в ней нет return , то она ничего не возвращает, и print() печатает это самое ничего.
Функции в Python
Функция — это блок кода, который выполняет определенную задачу. В Python есть два типа функции: встроенные и пользовательские. Параметр — это значение, которое принимает функция. Аргумент — это значение, которое передается в функцию при ее вызове в программе. Оператор return используется для возвращения значения из функции.
Что такое функция?
Функция — это блок кода, который выполняет определенную задачу.
Предположим, нам нужно написать программу, которая нарисует круг, а затем раскрасит его. Вы можете создать две функции для решения этой проблемы:
функция создания круга;
функция раскрашивания круга.
Разделение сложной задачи на более мелкие части делает нашу программу простой для понимания и повторного использования.
Типы функций в Python
Есть два типа функций:
Функции из Стандартной библиотеки Python — это встроенные функции, доступные для использования.
Пользовательские функции — мы можем создавать собственные функции на основе наших требований.
Функции в Python
Функция — это именованный блок кода, к которому можно обратиться из любого места программы. У функции есть имя и список входных параметров, а также возвращаемое значение.
Функция позволяет использовать в программе один и тот же фрагмент кода несколько раз.
Oбъявление функции в Python выглядит так:
def function_name ( argument1 , argument2 , . ):
# код функции
# def — DEclare Function — «объявить функцию»
# function_name — имя функции
# (argument1, argument2, . ) — список аргументов, поступающих на вход функции при ее вызове
# тело функции — это весь код, который идет после двоеточия
# Объявление функции
def hello (name):
print ( ‘Hello, ‘ + name)
# Вызовы функции
hello ( ‘Max’ )
hello ( ‘Ivan’ )
hello ( ‘Alex’ )
hello ( ‘Kate’ )
# Вывод
>> Hello, Max
>> Hello, Ivan
>> Hello, Alex
>> Hello, Kate
Оператор return возвращает значение из функции.
Представьте себе обычный калькулятор. Вы вводите первое число, операцию и второе число. Калькулятор возвращает нам результат операции над этими числами. Всё просто, не так ли? Функции точно так же умеют возвращать значение с помощью специального оператора return.
# Объявление функции
def sum2 ( a , b ):
return a + b
# Вызовы функции
s1 = sum2 ( 10 , 2 )
s2 = sum2 ( 108 , 100 )
s3 = sum2 ( 3 , 1 )
print ( f ‘s1 =
print ( f ‘s2 =
print ( f ‘s3 =
>> s1 = 12
>> s2 = 208
>> s3 = 4
# Функция умножения двух чисел
def mult2 ( a , b ):
return a * b
# Вызовем нашу функцию
m1 = mult2 ( 10 , 2 )
m2 = mult2 ( 108 , 100 )
m3 = mult2 ( 3 , 1 )
print ( f ‘m1 =
print ( f ‘m2 =
print ( f ‘m3 =
>> m1 = 20
>> m2 = 10800
>> m3 = 3
Для параметров функции можно указывать значения по умолчанию. Это дает возможность вызывать функцию с меньшим числом параметров.
# Аргумент name по умолчанию равен ‘world’
def hello ( name = ‘world’ ):
print ( ‘Hello, ‘ + name)
hello ()
hello ( ‘Ivan’ )
>> Hello, world
>> Hello, Ivan
Примеры
# Написать функцию square(), вычисляющую квадрат числа.
def square ( number ):
return number * number # Возвращаем результат работы функции обратно в программу
a = square ( 2 )
print (a)
# Напишите функцию perimetr, вычисляющую периметр прямоугольника со сторонами a и b.
def perimetr ( a , b ):
return 2 * (a + b)
p = perimetr ( 4 , 3 )
print (p)
# Напишите функцию isEven, возвращающую True, если число четное, и False, если — нечетное.
def isEven ( x ):
return x % 2 == 0
print ( isEven ( 10 ))
print ( isEven ( 11 ))
# Напишите функцию amountList, которая возвращает сумму всех элементов списка.
def amountList ( lst ):
amount = 0
f or x in lst:
amount += x
return amount
print ( amountList ([ 1 , 2 , 3 ]))
mylist = [ 1 , 2 , 4 , 8 , 16 ]
s = amountList (mylist)
print ( f ‘Сумма списка ‘ )
>> 6
>> Сумма списка [ 1 , 2 , 4 , 8 , 16 ] равна 31
# Напишите функцию fib, которая возвращает n-ное число Фибоначчи.
# Последовательность Фибоначчи выглядит так: 1 1 2 3 5 8 13 21 34
def fib ( n ):
a, b = 0 , 1
if n == 0 : return 0
f or i in range ( 1 , n):
a, b = b, a + b
return b
print ( fib ( 2 ))
print ( fib ( 3 ))
print ( fib ( 4 ))
print ( fib ( 5 ))
print ( fib ( 10 ))
# Напишите функцию fact, вычисляющую значение факториала числа N.
# Факториал числа — это произведение всех чисел от 1 до N.
# Например, факториал числа 5 равен 120 (5! = 120).
def fact ( n ):
result = 1
while n > 1 :
result *= n
n -= 1
return result
print ( fact ( 2 ))
print ( fact ( 3 ))
print ( fact ( 4 ))
print ( fact ( 5 ))
Решение задач
Напишите функцию, которая получает в качестве аргумента радиус круга и находит его площадь.
# Не забудьте написать функцию circle.
print ( circle ( 4 ))
print ( circle ( 1 ))
Напишите функцию, которая возвращает True, если число делится на 3, и False, если — нет.
# Не забудьте написать функцию three.
print ( three ( 4 ))
print ( three ( 3 ))
3. Максимум в списке
Напишите функцию, которая возвращает максимальный элемент из переданного в нее списка.
# Напишите функцию maxList.
mylist = [ 1 , 3 , 2 ]
print ( maxList (mylist))
4. Сколько четных
Напишите функцию, которая возвращает количество четных элементов в списке.
# Напишите функцию evenCounter.
mylist = [ 1 , 10 , 2 , 4 , 6 ]
evens = evenCounter (mylist)
print (even)
Напишите функцию, которая возвращает список с уникальными (неповторяющихся) элементам.
# Напишите функцию unique.
mylist = [ 1 , 1 , 2 , 1 , 3 , 2 , 3 ]
print ( unique (mylist))
Как вызвать функцию в Python
В Python, также как и во многих других языках, чтобы избегать повторного написания кода, используются функции. В этой статье мы покажем на примерах, как в Python вызвать написанную функцию, в том числе вложенную.
Содержание
Определение функции
Чтобы определить функцию в Python, нужно сначала написать ключевое слово def , затем имя функции и круглые скобки. После имени и круглых скобок пишется двоеточие. Далее следует код самой функции.
Базовый синтаксис функции имеет следующий вид:
Пример реальной функции выглядит вот так:
Назначение данной функции — выводить в консоль следующий текст: «You can learn to code for free on Pythonist».
Но чтобы данная функция заработала, ее нужно вызвать.
От редакции Pythonist: подробнее о создании функций читайте в статье «Функции и их аргументы в Python 3».
Как вызвать функцию в Python
Чтобы вызвать функцию, необходимо написать ее имя, после которого следуют круглые скобки.
Синтаксис вызова функции выглядит так:
То есть, чтобы вызвать функцию, которую мы определили ранее, нам нужно написать Learn_to_code() :
Замечание: убедитесь, что вы не указываете вызов функции внутри блока самой функции. Это не сработает, потому что вызов будет рассматриваться как часть выполняемой функции.
Вызов функции внутри самой функции.
Можно заметить, что функция не выводит текст в консоль, так как была вызвана внутри блока функции.
Вызов функции после ее определения
А здесь текст выводится как надо, потому что функция была вызвана правильным образом.
Как вызвать вложенную функцию
Теперь разберем, как вызвать вложенные функции. Этот вопрос иногда вызывает некоторое затруднение.
Вот пример вложенной функции:
Функция Learn_what_language является частью функции Learn_to_code , так как находится внутри ее.
Если вы наберете learn_to_code() и запустите код, будет вызвана только внешняя функция learn_to_code :
В редакторе видно, что имя вложенной функции затемнено
Как видите, вызывается только внешняя функция.
Чтобы также вызвать внутреннюю функцию, нужно добавить learn_what_language() . Но вот где именно?
Возможно, вызов следовало бы написать непосредственно после определения внутренней функции внутри блока внешней функции.
Но без вызова внешней функции это также не сработает:
Вы можете заметить, что внутренняя функция learn_what_language() по-прежнему не делает то, что мы хотим.
Чтобы данный код работал правильно, необходимо вызвать обе функции следующим образом:
Правильный вызов вложенной функции
Теперь все работает должным образом.
Заключение
В данной статье мы разобрали, как определять функции и вызывать их. Также мы рассмотрели, как вызывать вложенные функции. Мы надеемся, что в дальнейшем у вас не возникнет никаких затруднений в данных вопросах.