0 знаков
55. Итоги раздела «Функции в Python»
Уроки раздела «Функции в Python»- Введение в раздел «Функции в Python»
- Замыкания и оператор nonlocal в Python
- Аргументы и параметры функций, операторы (звездочка) и (звездочка)(звездочка) в Python
- Анонимные функции (выражения lambda)
В предыдущем уроке вы узнали, чем отличаются генераторные функции и выражения, а так же познакомились с оператором yield
. В разделе «Функции в Python» научились эффективно и повторно использовать написанный ранее код. Напомню, использование функций - простой, но не единственный способ сократить избыточность кода и разбить программу на смысловые части.
Краткий пересказ раздела «Функции в Python»
В первом уроке мы дали определение понятию «функция» и научились их создавать. Выяснили, чем отличаются аргументы и параметры, поговорили о полиморфизме и обсудили локальные переменные.
Отличие понятий «аргумент» и «параметр»Аргумент – это фактическое значение, которое передается функции в виде данных. Параметр – это переменная, которая используется при создании функции.
ПолиморфизмПолиморфизм – это способность функции обрабатывать данные различных типов.
Далее познакомились с правилом LEGB (Local, Enclosed, Global, Built-in) и областью видимости переменных. Узнали для чего используется оператор global
.
Потом попробовали разобраться со сложной темой - замыкания. В этом же уроке поговорили об операторе nonlocal
.
В следующем уроке еще раз поговорили об аргументах и параметрах функций в Python и научились использовать операторы *
и **
для передачи аргументов в функцию и сбора переданных в функцию аргументов.
Затем научились создавать функции без имени - анонимные функции (lambda). Немного поговорили о функциональном программировании и функциях map()
, filter()
и reduce()
.
Завершили раздел генераторными функциями и генераторными выражениями. Научились использовать оператор yield
.
Новая информация из раздела «Функции в Python»
Функция в Python создается с помощью оператора def
:
def имя_функции(арг_1, арг_2, … арг_N):
операторы
Для возврата из функции используется оператор return
:
def mult(x, y):
return x * y
print(mult(4, 6)) # => 24
Чтобы сделать переменную глобальной, используйте оператор global
. Но использовать его нужно правильно. Если забыли, вернитесь к уроку.
Вспомним один из примеров про замыкания и оператор nonlocal
. Обязательно вернитесь к уроку и запустите все примеры еще раз:
def up(num1):
a = num1
def inner():
nonlocal a
a -= 1
return a
return inner
up_one = up(10)
print(up_one()) # => 9
print(up_one()) # => 8
print(up_one()) # => 7
print(up_one()) # => 6
Операторы *
и **
используются не только для умножения и возведения в степень (такие операторы называются инфиксные). Вспомним пример распаковки итерируемого объекта в аргументы функции с помощью оператора *
:
def sum(a, b):
print(a + b)
a = (3, 4)
sum(*a)
И вспомним распаковку словаря с помощью оператора **
в аргументы функции:
def sum(a, b):
print(a) # => 5
print(b) # => 4
print(a + b) # => 9
a = {"b": 4, "a": 5}
sum(**a)
Синтаксис lambda выражений следующий:
lambda арг1, арг2, … аргN : выражение
f = lambda a, b : a + b
print(f(3, 2)) # => 5
Функциональное программирование держится на трех функциях:
map()
- применяет функции к элементам итерируемого объекта.filter()
- фильтрует элементы на основе проверяемой функции.reduce()
- применяет функции к парам элементов и результатов выполнения.
Оператор yield
используется в обычных функциях, создаваемых с помощью оператора def
. Такие функции называются генераторными. За счет использования таких функций мы можем возвращать по одному результату за вызов и останавливать выполнение функции с сохранением состояния. Проще вспомнить на примере вычисления квадрата чисел:
def square(N):
for i in range(1, N):
yield i * i
result = square(1000000)
print(next(result)) # => 1
print(next(result)) # => 4
print(next(result)) # => 9
Генераторные выражения создаются точно так же, как списковые включения, только в круглых скобках:
result = (x for x in result if x[1] >= 18)
Главное отличие от спискового включения — это то, что будет храниться в памяти после выполнения. Списковые включения (list comprehensions) после выполнения сохраняют в памяти весь генерируемый список, в свою очередь, генераторное выражение (generator expression) сохраняет в память только объект-генератор, с которым в дальнейшем можно работать по необходимости.
Заключение
В разделе «Функции в Python» вы научились создавать собственные именованные и анонимные функции, генераторные выражения и функции, а так же познакомились с новыми операторами для работы с ними. В следующем разделе будем строить более крупные функциональные блоки программы - модули и пакеты.
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ