Встроенные функции
Встроенные функции, выполняющие преобразование типов
bool(x) — преобразование к типу bool, использующая стандартную процедуру проверки истинности. Если х является ложным или опущен, возвращает значение False, в противном случае она возвращает True.
bytearray([источник [, кодировка [ошибки]]]) — преобразование к bytearray. Bytearray — изменяемая последовательность целых чисел в диапазоне 0≤X
bytes([источник [, кодировка [ошибки]]]) — возвращает объект типа bytes, который является неизменяемой последовательностью целых чисел в диапазоне 0≤X
complex([real[, imag]]) — преобразование к комплексному числу.
dict([object]) — преобразование к словарю.
float([X]) — преобразование к числу с плавающей точкой. Если аргумент не указан, возвращается 0.0.
frozenset([последовательность]) — возвращает неизменяемое множество.
int([object], [основание системы счисления]) — преобразование к целому числу.
list([object]) — создает список.
memoryview([object]) — создает объект memoryview.
object() — возвращает безликий объект, являющийся базовым для всех объектов.
range([start=0], stop, [step=1]) — арифметическая прогрессия от start до stop с шагом step.
set([object]) — создает множество.
slice([start=0], stop, [step=1]) — объект среза от start до stop с шагом step.
str([object], [кодировка], [ошибки]) — строковое представление объекта. Использует метод __str__.
tuple(obj) — преобразование к кортежу.
Другие встроенные функции
abs(x) — Возвращает абсолютную величину (модуль числа).
all(последовательность) — Возвращает True, если все элементы истинные (или, если последовательность пуста).
any(последовательность) — Возвращает True, если хотя бы один элемент — истина. Для пустой последовательности возвращает False.
ascii(object) — Как repr(), возвращает строку, содержащую представление объекта, но заменяет не-ASCII символы на экранированные последовательности.
bin(x) — Преобразование целого числа в двоичную строку.
callable(x) — Возвращает True для объекта, поддерживающего вызов (как функции).
chr(x) — Возвращает односимвольную строку, код символа которой равен x.
classmethod(x) — Представляет указанную функцию методом класса.
compile(source, filename, mode, flags=0, dont_inherit=False) — Компиляция в программный код, который впоследствии может выполниться функцией eval или exec. Строка не должна содержать символов возврата каретки или нулевые байты.
delattr(object, name) — Удаляет атрибут с именем ‘name’.
dir([object]) — Список имен объекта, а если объект не указан, список имен в текущей локальной области видимости.
divmod(a, b) — Возвращает частное и остаток от деления a на b.
enumerate(iterable, start=0) — Возвращает итератор, при каждом проходе предоставляющем кортеж из номера и соответствующего члена последовательности.
eval(expression, globals=None, locals=None) — Выполняет строку программного кода.
exec(object[, globals[, locals]]) — Выполняет программный код на Python.
filter(function, iterable) — Возвращает итератор из тех элементов, для которых function возвращает истину.
format(value[,format_spec]) — Форматирование (обычно форматирование строки).
getattr(object, name ,[default]) — извлекает атрибут объекта или default.
globals() — Словарь глобальных имен.
hasattr(object, name) — Имеет ли объект атрибут с именем ‘name’.
hash(x) — Возвращает хеш указанного объекта.
help([object]) — Вызов встроенной справочной системы.
hex(х) — Преобразование целого числа в шестнадцатеричную строку.
id(object) — Возвращает «адрес» объекта. Это целое число, которое гарантированно будет уникальным и постоянным для данного объекта в течение срока его существования.
input([prompt]) — Возвращает введенную пользователем строку. Prompt — подсказка пользователю.
isinstance(object, ClassInfo) — Истина, если объект является экземпляром ClassInfo или его подклассом. Если объект не является объектом данного типа, функция всегда возвращает ложь.
issubclass(класс, ClassInfo) — Истина, если класс является подклассом ClassInfo. Класс считается подклассом себя.
iter(x) — Возвращает объект итератора.
len(x) — Возвращает число элементов в указанном объекте.
locals() — Словарь локальных имен.
map(function, iterator) — Итератор, получившийся после применения к каждому элементу последовательности функции function.
max(iter, [args . ] * [, key]) — Максимальный элемент последовательности.
min(iter, [args . ] * [, key]) — Минимальный элемент последовательности.
next(x) — Возвращает следующий элемент итератора.
oct(х) — Преобразование целого числа в восьмеричную строку.
open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) — Открывает файл и возвращает соответствующий поток.
ord(с) — Код символа.
pow(x, y[, r]) — ( x ** y ) % r.
reversed(object) — Итератор из развернутого объекта.
repr(obj) — Представление объекта.
print([object, . ], *, sep=» «, end=’\n’, file=sys.stdout) — Печать.
property(fget=None, fset=None, fdel=None, doc=None)
round(X [, N]) — Округление до N знаков после запятой.
setattr(объект, имя, значение) — Устанавливает атрибут объекта.
sorted(iterable[, key][, reverse]) — Отсортированный список.
staticmethod(function) — Статический метод для функции.
sum(iter, start=0) — Сумма членов последовательности.
super([тип [, объект или тип]]) — Доступ к родительскому классу.
type(object) — Возвращает тип объекта.
type(name, bases, dict) — Возвращает новый экземпляр класса name.
vars([object]) — Словарь из атрибутов объекта. По умолчанию — словарь локальных имен.
zip(*iters) — Итератор, возвращающий кортежи, состоящие из соответствующих элементов аргументов-последовательностей.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Итераторы и итерируемые объекты в Python. Методы __next__ и __iter__
В английской документации по Python фигурируют два похожих слова – iterable и iterator. Обозначают они разное, хотя и имеющее между собой связь.
На русский язык iterable обычно переводят как итерируемый объект, а iterator – как итератор, или объект-итератор. С объектами обоих разновидностей мы уже сталкивались в курсе "Python. Введение в программирование", однако не делали на этом акцента.
Iterable и iterator – это не какие-то конкретные классы-типы, наподобие int или list . Это обобщения. Существует ряд встроенных классов, чьи объекты обладают возможностями iterable. Ряд других классов порождают объекты, обладающие свойствами итераторов.
Кроме того, мы можем сами определять классы, от которых создаются экземпляры-итераторы или итерируемые объекты.
Примером итерируемого объекта является список. Примером итератора – файловый объект. Список включает в себя все свои элементы, а файловый объект по-очереди "вынимает" из себя элементы и "забывает" то, что уже вынул. Также не ведает, что в нем содержится еще, так как это "еще" может вычисляться при каждом обращении или поступать извне. Например, файловый объект не знает сколько еще текста в связанном с ним файле.
Из такого описания должно быть понятно, почему один и тот же список мы можем перебирать сколько угодно раз, а с файловым объектом это можно сделать только единожды.

Зачем нужны объекты, элементы которых можно получить только один раз? Представьте, что текстовый файл большой. Если сразу загрузить его содержимое в память, то последней может не хватить. Также бывает удобно генерировать значения на лету, по требованию, если они нужны в программе только один раз. В противовес тому, как если бы они были получены все сразу и сохранены в списке.
У всех итераторов, но не итерируемых объектов, есть метод __next__. Именно его код обеспечивает выдачу очередного элемента. Каков этот код, зависит от конкретного класса. У файлового объекта это по всей видимости код, читающий очередную строку из связанного файла.
>>> f = open('text.txt') >>> f.__next__() 'one two\n' >>> f.__next__() 'three \n' >>> f.__next__() 'four five\n' >>> f.__next__() Traceback (most recent call last): File "", line 1, in StopIteration
Когда итератор выдал все свои значения, то очередной вызов __next__() должен возбуждать исключение StopIteration . Почему именно такое исключение? Потому что на него "реагирует" цикл for . Для for это сигнал останова.
Судя по наличию подчеркиваний у __next__ , он относится к методам перегрузки операторов. Он перегружает встроенную функцию next() . То есть когда объект передается в эту функцию, то происходит вызов метода __next__() этого объекта-итератора.
>>> f = open('text.txt') >>> next(f) 'one two\n' >>> next(f) 'three \n' >>> next(f) 'four five\n' >>> next(f) Traceback (most recent call last): File "", line 1, in StopIteration
Если объект итератором не является, то есть у него нет метода __next__ , то вызов функции next() приведет к ошибке:
>>> a = [1, 2] >>> next(a) Traceback (most recent call last): File "", line 1, in TypeError: 'list' object is not an iterator
Внутренний механизм работы цикла for так устроен, что на каждой итерации он вызывает функцию next() и передает ей в качестве аргумента объект, указанный после in в заголовке. Как только next() возвращает StopIteration , цикл for ловит это исключение и завершает свою работу.
Напишем собственный класс с методом __next__ :
>>> class A: . def __init__(self, qty): . self.qty = qty . def __next__(self): . if self.qty > 0: . self.qty -= 1 . return '+' . else: . raise StopIteration . >>> a = A(3) >>> next(a) '+' >>> next(a) '+' >>> next(a) '+' >>> next(a) Traceback (most recent call last): File "", line 1, in File "", line 9, in __next__ StopIteration
Вызов next() работает, но если мы попробуем передать объект циклу for , получим ошибку:
>>> b = A(5) >>> for i in b: . print(i) . Traceback (most recent call last): File "", line 1, in TypeError: 'A' object is not iterable
Интерпретатор говорит, что объект типа A не является итерируемым объектом. Другими словами, цикл for ожидает, что после in будет стоять итерируемый объект, а не итератор. Как же так, если цикл for потом вызывает метод __next__() , который есть только у итераторов?
На самом деле цикл for ожидает, что у объекта есть не только метод __next__ , но и __iter__ . Задача метода __iter__ – "превращать" итерируемый объект в итератор. Если в цикл for передается уже итератор, то метод __iter__() этого объекта должен возвращать сам объект:
>>> class A: . def __init__(self, qty): . self.qty = qty . def __iter__(self): . return self . def __next__(self): . if self.qty > 0: . self.qty -= 1 . return '+' . else: . raise StopIteration . >>> a = A(4) >>> for i in a: . print(i) . + + + +
Если циклу for передается не итератор, а итерируемый объект, то его метод __iter__() должен возвращать не сам объект, а какой-то объект-итератор. То есть объект, созданный от другого класса.
Получается, в классах-итераторах метод __iter__ нужен лишь для совместимости. Ведь если for работает как с итераторами, так и итерируемыми объектами, но последние требуют преобразования к итератору, и for вызывает __iter__() без оценки того, что ему передали, то требуется, чтобы оба – iterator и iterable – поддерживали этот метод. С точки зрения наличия в классе метода __iter__ итераторы можно считать подвидом итерируемых объектов.
Очевидно, по аналогии с next() , цикл for вызывает не метод __iter__() , а встроенную в Python функцию iter() .
Если список передать функции iter() , получим совсем другой объект:
>>> s = [1, 2] >>> si = iter(s) >>> type(s) >>> type(si) >>> si >>> next(si) 1 >>> next(si) 2 >>> next(si) Traceback (most recent call last): File "", line 1, in StopIteration
Как видно, объект класса list_iterator исчерпывается как нормальный итератор. Список s при этом никак не меняется. Отсюда понятно, почему после обхода циклом for итерируемые объекты остаются в прежнем составе. От них создается "копия"-итератор, а с ними самими цикл for не работает.

Напишем свой iterable-класс и связанный с ним iterator-класс, чтобы проиллюстрировать, как в Python может быть реализована взаимосвязь между итерируемым объектом и его итератором.
class Letters: def __init__(self, string): self.letters = [] for i in string: self.letters.append(f'--') def __iter__(self): return LettersIterator(self.letters[:]) class LettersIterator: def __init__(self, letters): self.letters = letters def __iter__(self): return self def __next__(self): if self.letters == []: raise StopIteration item = self.letters[0] del self.letters[0] return item kit = Letters('aeoui') print(kit.letters) for i in kit: print(i) print(kit.letters)
['-a-', '-e-', '-o-', '-u-', '-i-'] -a- -e- -o- -u- -i- ['-a-', '-e-', '-o-', '-u-', '-i-']
Заметим, что если в программе определяется класс, от которого будут создаваться итерируемые объекты, то в этой же программе должен быть класс, от которого создаются итераторы для этих объектов. При этом сам по себе класс, порождающий итераторы, никакой ценности может не иметь в том смысле, что непосредственно от него создание экземпляров в основной ветке программы не предполагается.
Обратное не верно. Если нужен класс, от которого создаются итераторы, определять класс для неких связанных с ним итерируемых объектов не требуется.
Практическая работа
Напишите класс-итератор, объекты которого генерируют случайные числа в количестве и в диапазоне, которые передаются в конструктор.
Курс с примерами решений практических работ:
pdf-версия
X Скрыть Наверх
Объектно-ориентированное программирование на Python
Функция iter() в Python, создает итератор
Функция iter() создает итератор из последовательности
Синтаксис:
iter(object, sentinel)
Параметры:
- object - последовательность или итератор,
- sentinel - значение с которым будет вызываться каждый элемент из object (если элементы object - это вызываемые объекты).
Возвращаемое значение:
- iterator - объект итератора.
Описание:
Функция iter() возвращает объект итератора. Первый аргумент object интерпретируется по-разному, в зависимости от наличия второго аргумента sentinel .
Если НЕТ аргумента sentinel , то первый аргумент object должен быть объектом-коллекцией, которая поддерживает протокол итераций метод __iter__() или он должен поддерживать протокол последовательности метод __getitem__() с целыми аргументами, начиная с 0 . Если он не поддерживает любой из этих протоколов, бросается исключение TypeError .
Если передается аргумент sentinel , то ожидается, что первый аргумент object , поддерживает вызов __call__() . В этом случае, созданный итератор будет вызывать указанный объект с каждым обращением к своему __next__() и проверять полученное значение на равенство со значением, переданным в аргумент sentinel . Если полученное значение равно sentinel , то бросается исключение StopIteration , иначе возвращается полученное значение.
Примеры создания итератора из последовательностей.
x = iter(["apple", "banana", "cherry"]) print(next(x)) print(next(x)) print(next(x))
Одно из применений второго аргумента sentinel это чтение строк файла, пока не будет достигнута, переданная в sentinel . Следующий пример считывает файл, пока метод readline() не вернёт пустую строку:
with open('mydata.txt') as fp: # читаем, пока не попадется пустая строка for line in iter(fp.readline, sentinel=''): # Делаем что-то с line.
Пользовательский тип, определивший __call__() :
class MyIterable(object): def __init__(self): self.index = 0 self.items = [1, 2, 3, 4] def __call__(self): value = self.items[self.index] self.index += 1 return value x = iter(MyIterable(), 3) print(next(x)) # 1 print(next(x)) # 2 print(next(x)) # StopIteration
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Как итератор преобразовать в число в python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
