235.69K
Categories: programmingprogramming softwaresoftware

Python. Функции. Лекция 4

1.

Белорусско-Российский университет
Кафедра «Программное обеспечение информационных технологий»
Информатика.
Программирование на Python
Тема: Python.
Функции
КУТУЗОВ Виктор Владимирович
Могилев, 2021

2.

Что такое функции?
• Функции - это удобный способ разделить код на
полезные блоки, позволяя его упорядочить и сделать
более читабельным, повторно использовать его и
сэкономить некоторое время.
• Функции в Python определяются с помощью
ключевого слова "def", за которым следует имя
функции в качестве имени блока.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
2

3.

Правила для создания функций
Существуют некоторые правила для создания функций
в Python.
1. Блок функции начинается с ключевого слова def,
после которого следуют название функции и
круглые скобки ().
2. Любые аргументы, которые принимает функция,
должны находиться внутри этих скобок.
3. После скобок идет двоеточие : и с новой строки с
отступом начинается тело функции.
Т. е. функция определяется следующим образом:
def <имя_функции>(<аргументы функции>):
Информатика. Программирование на Python
Тема: Python. Основы. Функции
3

4.

Функция в Python. Синтаксис
Информатика. Программирование на Python
Тема: Python. Основы. Функции
4

5.

Функции
Пример простой функции выводящий текст
def my_function():
print("Это новая функция!")
# обращение к функции в программе
my_function()
Информатика. Программирование на Python
Тема: Python. Основы. Функции
5

6.

Функции
Пример простой функции с параметрами
def sum_two_numbers(a, b):
return a + b
# значению х передаем результат
работы функции
x = sum_two_numbers(1,2)
Информатика. Программирование на Python
Тема: Python. Основы. Функции
6

7.

Пример простой функции сложения двух чисел
def calc(a, b):
print(a)
print(b)
return a + b
calc(5, 15)
5
15
50
50
100
sum = calc(50, 50)
print(sum)
Информатика. Программирование на Python
Тема: Python. Основы. Функции
7

8.

Функции. Нахождение максимального значения
двух чисел
def m_max(a, b):
if a > b:
return a
else:
return b
Вывод
print(m_max(3, 5))
print(m_max(8, 3))
5
8
Информатика. Программирование на Python
Тема: Python. Основы. Функции
8

9.

Аргументы функции
9

10.

Аргументы функции
• Вызывая функцию, мы можем передавать ей
следующие типы аргументов:
1. Обязательные аргументы
(Required arguments)
2. Аргументы-ключевые слова
(Keyword arguments)
3. Аргументы по-умолчанию
(Default arguments)
4. Аргументы произвольной длины
(Variable-length argumens)
Информатика. Программирование на Python
Тема: Python. Основы. Функции
10

11.

1. Обязательные аргументы
• 1. Обязательные аргументы
• Если при создании функции мы указали количество
передаваемых ей аргументов и их порядок, то и
вызывать ее мы должны с тем же количеством
аргументов, заданных в нужном порядке.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
11

12.

1. Обязательные аргументы. Пример
# Определим функцию hour_to_sec
# Она переводит часы в секунды
def hour_to_sec(hour, min, sec):
return hour * 60 * 60 + min * 60 + sec
# Вызовем функцию. Количество и порядок
аргументов очень важны!
# Иначе результат вычислений будет неверным
hour_to_sec(0, 5, 50)
350
Информатика. Программирование на Python
Тема: Python. Основы. Функции
12

13.

2. Аргументы-ключевые слова
• 2. Аргументы-ключевые слова
• Аргументы-ключевые слова используются при
вызове функции. Благодаря ключевым аргументам,
вы можете задавать произвольный (то есть не
такой, каким он описан при создании функции)
порядок аргументов.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
13

14.

2. Аргументы-ключевые слова. Пример
# Используем ту же самую функцию
def hour_to_sec(hour, min, sec):
return hour * 60 * 60 + min * 60 + sec
# Хотя в определении первым
часы,
# мы можем передать секунды
первого аргумента.
# В таком случае мы обязаны
параметра
hour_to_sec(sec=50, hour=0,
Информатика. Программирование на Python
Тема: Python. Основы. Функции
параметром идут
в качестве
указать имя
min=5)
14

15.

3. Аргументы по-умолчанию
• 3. Аргументы по-умолчанию
• Аргумент по умолчанию, это аргумент, значение
для которого задано изначально, при создании
функции.
• Если при вызове функции вы не будете передавать
данный аргумент, то функция возьмет его значение
по-умолчанию.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
15

16.

3. Аргументы по-умолчанию. Пример
# Функция принимает два параметра:
имя и возраст
# Параметр age имеет значение по-умолчанию
def person(name, age=25):
print(name, '-', age, ' лет ')
# Передадим функции оба параметра и посмотрим
результат
person('Иван', 19)
# Теперь передадим функции только 1 параметр
# Параметр age примет свое значение
по-умолчанию
Иван - 19 лет
person('Петр')
Петр - 25 лет
Информатика. Программирование на Python
Тема: Python. Основы. Функции
16

17.

4. Аргументы произвольной длины
• 4. Аргументы произвольной длины
• Иногда возникает ситуация, когда вы заранее не
знаете, какое количество аргументов будет
необходимо принять функции.
• В этом случае следует использовать аргументы
произвольной длины.
• Они задаются произвольным именем переменной,
перед которой ставится звездочка (*).
Информатика. Программирование на Python
Тема: Python. Основы. Функции
17

18.

4. Аргументы произвольной длины. Пример
# Определим функцию с произвольным
количеством параметров
# Данная функция выводит переданные ей
аргументы в консоль
()
def print_args(*args):
('Строка',)
print(args)
(1, 'Строка', 'Еще строка', 38, 4)
# Вызовем функцию без аргументов
print_args()
# Вызовем функцию с 1 аргументом
print_args('Строка')
# Вызовем функцию с 5ю аргументами
print_args(1, 'Строка', 'Еще строка', 38, 4)
Информатика. Программирование на Python
Тема: Python. Основы. Функции
18

19.

Локальные и глобальные
переменные в функциях
19

20.

Глобальные переменные
Внутри функции можно использовать переменные, объявленные
вне этой функции
def f():
print(a)
a = 1
f()
• Здесь переменной a присваивается значение 1, и функция f() печатает это
значение, несмотря на то, что до объявления функции f эта переменная не
инициализируется. В момент вызова функции f() переменной a уже
присвоено значение, поэтому функция f() может вывести его на экран.
• Такие переменные (объявленные вне функции, но доступные
внутри функции) называются глобальными.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
20

21.

Локальные переменные
• Но если инициализировать какую-то переменную внутри
функции, использовать эту переменную вне функции не
удастся. Например:
def f():
a = 1
f()
print(a)
• Получим ошибку NameError: name 'a' is not defined.
Такие переменные, объявленные внутри функции,
называются локальными.
• Эти переменные становятся недоступными после выхода
из функции.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
21

22.

«Защита» глобальных переменных
• Интересным получится результат, если попробовать изменить
значение глобальной переменной внутри функции:
def f():
a = 1
print(a)
a = 0
f()
print(a)
1
0
• Будут выведены числа 1 и 0. Несмотря на то, что значение
переменной a изменилось внутри функции, вне функции оно
осталось прежним!
• Это сделано в целях “защиты” глобальных переменных от
случайного изменения из функции.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
22

23.

Пример
• Например, если функция будет вызвана из цикла по переменной i, а в этой
функции будет использована переменная i также для организации цикла, то
эти переменные должны быть различными.
• Если вы не поняли последнее предложение, то посмотрите на следующий
код и подумайте, как бы он работал, если бы внутри функции изменялась
переменная i.
def factorial(n):
res = 1
for i in range(1, n + 1):
res *= i
return res
for i in range(1, 6):
print(i, '! = ', factorial(i), sep=‘’)
1!
2!
3!
4!
5!
=
=
=
=
=
1
2
6
24
120
• Итак, если внутри функции модифицируется значение некоторой
переменной, то переменная с таким именем становится локальной
переменной, и ее модификация не приведет к изменению глобальной
переменной с таким же именем.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
23

24.

Пример
• Интерпретатор Pytthon считает переменную локальной для данной функции, если в её коде
есть хотя бы одна инструкция, модифицирующая значение переменной, то эта переменная
считается локальной и не может быть использована до инициализации.
• Инструкция, модифицирующая значение переменной — это операторы =, +=, а также
использование переменной в качестве параметра цикла for.
• При этом даже если инструкция, модицифицирующая переменную никогда не будет
выполнена, интерпретатор это проверить не может, и переменная все равно считается
локальной. Пример:
def f():
print(a)
if False:
a = 0
a = 1
f()
• Возникает ошибка: UnboundLocalError: local variable 'a' referenced before assignment.
• В функции f() идентификатор a становится локальной переменной, т.к. в функции есть
команда, модифицирующая переменную a, пусть даже никогда и не выполняющийся (но
интерпретатор не может это отследить).
• Поэтому вывод переменной a приводит к обращению к неинициализированной локальной
переменной.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
24

25.

Глобальные переменные - global
• Чтобы функция могла изменить значение глобальной переменной,
необходимо объявить эту переменную внутри функции, как глобальную, при
помощи ключевого слова global:
def f():
global a
a = 1
print(a)
1
1
a = 0
f()
print(a)
• В этом примере на экран будет выведено 1 1, так как переменная a
объявлена, как глобальная, и ее изменение внутри функции приводит к
тому, что и вне функции переменная будет доступна.
• Тем не менее, лучше не изменять значения глобальных переменных
внутри функции. Если ваша функция должна поменять какую-то
переменную, пусть лучше она вернёт это значением, и вы сами при вызове
функции явно присвоите в переменную это значение.
• Если следовать этим правилам, то функции получаются независимыми от
кода, и их можно легко копировать из одной программы в другую.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
25

26.

Пример
# начало куска кода, который можно
копировать из программы в программу
def factorial(n):
res = 1
for i in range(2, n + 1):
res *= i
return res
# конец куска кода
n = int(input())
f = factorial(n)
print(f)
# дальше всякие действия с переменной f
Информатика. Программирование на Python
Тема: Python. Основы. Функции
26

27.

Рекурсия
27

28.

Рекурсия
def short_story():
print("У попа была собака, он ее любил.")
print("Она съела кусок мяса, он ее убил,")
print("В землю закопал и надпись написал:")
short_story()
Информатика. Программирование на Python
Тема: Python. Основы. Функции
28

29.

Рекурсия. Вычисление факториала
• Рассмотрим это на примере функции вычисления факториала.
• Хорошо известно, что 0!=1, 1!=1. А как вычислить величину n! для большого n?
• Если бы мы могли вычислить величину (n-1)!, то тогда мы легко вычислим n!,
поскольку n!=n⋅(n-1)!. Но как вычислить (n-1)!? Если бы мы вычислили (n-2)!, то мы
сможем вычисли и (n-1)!=(n-1)⋅(n-2)!. А как вычислить (n-2)!? Если бы...
• В конце концов, мы дойдем до величины 0!, которая равна 1.
• Таким образом, для вычисления факториала мы можем использовать значение
факториала для меньшего числа.
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5))
• Подобный прием (вызов функцией самой себя) называется
рекурсией, а сама функция называется рекурсивной.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
29

30.

Рекурсия
• Рекурсивные функции являются мощным механизмом в
программировании. К сожалению, они не всегда эффективны.
• Также часто использование рекурсии приводит к ошибкам.
• Наиболее распространенная из таких ошибок – бесконечная
рекурсия, когда цепочка вызовов функций никогда не завершается и
продолжается, пока не кончится свободная память в компьютере.
• Две наиболее распространенные причины для бесконечной
рекурсии:
1. Неправильное оформление выхода из рекурсии. Например, если
мы в программе вычисления факториала забудем поставить
проверку if n == 0, то factorial(0) вызовет factorial(-1), тот вызовет
factorial(-2) и т. д.
2. Рекурсивный вызов с неправильными параметрами. Например,
если функция factorial(n) будет вызывать factorial(n), то также
получится бесконечная цепочка.
• Поэтому при разработке рекурсивной функции необходимо прежде
всего оформлять условия завершения рекурсии и думать, почему
рекурсия когда-либо завершит работу.
Информатика. Программирование на Python
Тема: Python. Основы. Функции
30

31.

Белорусско-Российский университет
Кафедра «Программное обеспечение информационных технологий»
Информатика. Программирование на Python
Тема: Python. Функции
Благодарю
за внимание
КУТУЗОВ Виктор Владимирович
Белорусско-Российский университет, Республика Беларусь, Могилев, 2021
31

32.

Список использованных источников
1.
Python - https://www.python.org/
2.
Google Colaboratory
https://colab.research.google.com/
3.
Как задать функцию в Python? Что за def...?
https://codecamp.ru/blog/functions/
4.
Урок 3. Функции, условные выражения и циклы
https://smartiqa.ru/courses/python/lesson-3
5.
ПитонТьютор. Занятие 8. Функции и рекурсия. 1. Функции
https://pythontutor.ru/lessons/functions/
Информатика. Программирование на Python
Тема: Python. Основы. Функции
32
English     Русский Rules