0% нашли этот документ полезным (0 голосов)
9 просмотров19 страниц

Lesson 4

Документ охватывает основные концепции итерируемых объектов и итераторов в Python, включая их определение и использование. Также рассматриваются функции, аргументы функций, анонимные функции, области видимости переменных и элементы функционального программирования, такие как map, filter и reduce. В заключение упоминается модуль Collections и его структуры данных, такие как Counter и namedtuple.

Загружено:

Andrew Valoviy
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
9 просмотров19 страниц

Lesson 4

Документ охватывает основные концепции итерируемых объектов и итераторов в Python, включая их определение и использование. Также рассматриваются функции, аргументы функций, анонимные функции, области видимости переменных и элементы функционального программирования, такие как map, filter и reduce. В заключение упоминается модуль Collections и его структуры данных, такие как Counter и namedtuple.

Загружено:

Andrew Valoviy
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 19

Python

разработчик
Lesson 4
Итерируемый объект (iterable или iterable object)
• Итерация - это общий термин, который описывает процедуру взятия
элементов чего-то по очереди.
• В более общем смысле, это последовательность инструкций, которая
повторяется определенное количество раз или до выполнения указанного
условия.
• Итерируемый объект (iterable) - это объект, который способен
возвращать элементы по одному. Кроме того, это объект, из которого
можно получить итератор.

• все последовательности: список, строка, кортеж В Python за получение итератора


• словари отвечает функция iter()
• файлы
Итератор (iterator)
• Итератор (iterator) - это объект, который возвращает свои элементы по одному за раз.
• С точки зрения Python - это любой объект, у которого есть метод __next__. Этот метод
возвращает следующий элемент, если он есть, или возвращает исключение StopIteration,
когда элементы закончились.
• Кроме того, итератор запоминает, на каком объекте он остановился в последнюю
итерацию.
• В Python у каждого итератора присутствует метод __iter__ - то есть, любой итератор
является итерируемым объектом. Этот метод просто возвращает сам итератор.
Пример создания итератора из списка Теперь можно использовать функцию next(), которая вызывает
метод __next__, чтобы взять следующий элемент
Пример собственного класс-итератора
Пример выполнения кода

Наш итератор выдает числа по нарастающей. При этом


каждое следующее число больше предыдущего на
случайную величину.
Стоит отметь преимущество итераторов как таковых
перед контейнерными типами вроде списков. В памяти
компьютера не хранятся все элементы итератора, в
основном лишь описание, как получить следующий
элемент. Если представить, что нужны тысячи чисел или
надо генерировать сложные объекты, выгода
существенна.
Функция (function)
Функция в python - объект, принимающий аргументы и
возвращающий значение. Обычно функция определяется с
помощью инструкции def.

Определим простейшую функцию Теперь мы ее можем вызвать Функция может быть любой сложности и
возвращать любые объекты (списки, кортежи,
и даже функции!)

Инструкция return говорит, что нужно вернуть


значение. В нашем случае функция возвращает
сумму x и y.
Аргументы функции (function arguments)
Функция может принимать произвольное количество аргументов или не
принимать их вовсе. Также распространены функции с произвольным числом
аргументов, функции с позиционными и именованными аргументами,
обязательными и необязательными.
Args, kwargs
Функция также может принимать переменное количество Функция может принимать и произвольное число именованных
позиционных аргументов, тогда перед именем ставится * аргументов, тогда перед именем ставится **

Как видно из примера, args - это кортеж из всех В переменной kwargs у нас хранится словарь, с которым мы, опять-
переданных аргументов функции, и с переменной таки, можем делать все, что нам заблагорассудится.
можно работать также, как и с кортежем.
Args, kwargs
Функция также может принимать переменное количество Функция может принимать и произвольное число именованных
позиционных аргументов, тогда перед именем ставится * аргументов, тогда перед именем ставится **

Как видно из примера, args - это кортеж из всех В переменной kwargs у нас хранится словарь, с которым мы, опять-
переданных аргументов функции, и с переменной таки, можем делать все, что нам заблагорассудится.
можно работать также, как и с кортежем.
Анонимные функции, lambda
Анонимные функции могут содержать лишь одно выражение, но и выполняются они быстрее.
Анонимные функции создаются с помощью инструкции lambda. Кроме этого, их не обязательно
присваивать переменной, как делали мы инструкцией def func():
lambda функции, в отличие от обычной, не требуется инструкция
return, а в остальном, ведет себя точно так же
Область видимости переменных
Область видимости или scope определяет контекст переменной, в рамках которого ее можно
использовать. В Python есть два типа контекста: глобальный и локальный.

Глобальный контекст Локальный контекст

Глобальный контекст подразумевает, что переменная является В отличие от глобальных переменных локальная переменная
глобальной, она определена вне любой из функций и доступна определяется внутри функции и доступна только из этой
любой функции в программе функции, то есть имеет локальную область видимости

Здесь переменная name является глобальной и имеет глобальную область В данном случае в каждой из двух функций определяется локальная
видимости. И обе определенные здесь функции могут свободно ее переменная name. И хотя эти переменные называются одинаково, но
использовать. тем не менее это две разных переменных, каждая из которых доступна
только в рамках своей функции.
Область видимости переменных
Скрытие переменных Если же мы хотим изменить в локальной функции глобальную
переменную, а не определить локальную, то необходимо
Есть еще один вариант определения использовать ключевое слово global
переменной, когда локальная переменная
скрывают глобальную с тем же именем

Здесь определена глобальная переменная name.


Однако в функции say_hi определена локальная
переменная с тем же именем name. И если функция
say_bye использует глобальную переменную, то
функция say_hi использует локальную переменную,
которая скрывает глобальную.
Область видимости переменных
Nonlocal
Выражение nonlocal прикрепляет идентификатор к переменной из ближайшего
окружающего контекста (за исключением глобального контекста).
Обычно nonlocal применяется во вложенных функциях, когда надо прикрепить
идентификатор за переменной или параметром окружающей внешней функции.

При присвоении значения во


вложенной функции: n = 25 будет
создаваться новая переменная n, Чтобы во вложенной функции указать,
Здесь вложенная локальная функция inner() выводит которая скроет переменную n из что идентификатор во вложенной
на консоль значение переменной n, которая окружающей внешней функции outer. В функции будет представлять
определена во внешней функции outer(). Затем в итоге мы получим при выводе два переменную из окружающей функции,
функции outer() вызывается внутренняя функция разных числа. применяется выражение nonlocal
inner().
Элементы функционального программирования в
Python
Функциональный код отличается одним свойством: отсутствием
побочных эффектов. Он не полагается на данные вне текущей
функции, и не меняет данные, находящиеся вне функции. Все
остальные «свойства» можно вывести из этого.

Нефункциональная функция Функциональная функция


Элементы функционального программирования в
Python
Map

Принимает функцию и набор данных. Создаёт новую коллекцию, выполняет


функцию на каждой позиции данных и добавляет возвращаемое значение в
новую коллекцию. Возвращает новую коллекцию.

Простой map, принимающий список имён и Этот map возводит в квадрат каждый элемент
возвращающий список длин
Элементы функционального программирования в
Python
Map

Нефункциональный код Функциональный код


Элементы функционального программирования в
Python
Filter

В то время как map() пропускает каждый элемент Ниже приведен список (iterable) баллов 10 студентов на
итерируемого через функцию и возвращает экзамене по химии. Давайте отфильтруем тех, кто сдал с
результат всех элементов, прошедших через баллом выше 75 ... используя filter.
функцию, filter() прежде всего, требует, чтобы
функция возвращала логические значения (true или
false), а затем передает каждый элемент
итерируемого через функцию, «отфильтровывая» те,
которые являются ложными.
Давайте отфильтруем слова, являющиеся палиндромами, из
набора (iterable) подозреваемых слов палиндромов.
Элементы функционального программирования в
Python
Reduce

Функция reduce применяет функцию двух


аргументов кумулятивно к элементам
итерируемого, необязательно начиная с начального
аргумента. Имеет следующий синтаксис:

reduce(func, iterable[, initial])

Где func это функция, к которой кумулятивно


применяется каждый элемент iterable,
а initial необязательное значение, которое
помещается перед элементами итерируемого в
вычислении и служит значением по умолчанию, когда
итерируемый объект пуст.
Элементы функционального программирования в
Python
Создание словаря
Zip

Функция берёт на вход несколько списков и создаёт из


них список (в Python 3 создаётся не list, а специальный
zip-объект) кортежей, такой, что первый элемент
полученного списка содержит кортеж из первых
элементов всех списков-аргументов

Две последовательности Три последовательности


Модуль Collections
Collections — это встроенный модуль Python, реализующий специализированный
контейнер типов данных. Является альтернативой встроенным контейнерам общего
назначения Python, таким как dict, list, set и tuple.
Counter()
Рассмотрим несколько структур данных, представленных в этом Counter — это подкласс dict, который используется
модуле для подсчета объектов hashable. Элементы хранятся в
качестве ключей словаря, а количество объектов
сохранено в качестве значения.
namedtuple()
Именованные кортежи задают значение для каждой позиции в
кортеже, делая код более читаемым и само документируемым.
Доступ к объектам, хранящимся в кортеже, можно получить с
помощью уникального (удобного для чтения) идентификатора.

ChainMap()
ChainMap будет принимать
любое количество сопоставлений
или словарей и превращать их в
единое обновляемое
представление.

Вам также может понравиться