Главная страница
Навигация по странице:

  • Оператор или метод Описание

  • Метод Описание

  • Встроенные типы представления структурных элементов программы

  • Категория типов Имя типа Описание

  • Атрибут Описание

  • Встроенные функции и методы

  • Классы и экземпляры как вызываемые объекты

  • справочник по Python. мм isbn 9785932861578 9 785932 861578


    Скачать 4.21 Mb.
    Названиемм isbn 9785932861578 9 785932 861578
    Анкорсправочник по Python
    Дата08.05.2022
    Размер4.21 Mb.
    Формат файлаpdf
    Имя файлаBizli_Python-Podrobnyy-spravochnik.440222.pdf
    ТипСправочник
    #518195
    страница7 из 82
    1   2   3   4   5   6   7   8   9   10   ...   82
    Отображения
    Объекты отображений
    представляют произвольные коллекции объектов, которые могут индексироваться другими коллекциями практически про- извольных ключей. В отличие от последовательностей, отображения явля- ются неупорядоченными коллекциями и могут индексироваться числами, строками и другими объектами. Отображения относятся к разряду изме- няемых коллекций.
    Единственным встроенным типом отображений являются словари, кото- рые представляют собой разновидность таблиц хешей, или ассоциативных массивов. В качестве ключей словаря допускается использовать любые не- изменяемые объекты (строки, числа, кортежи и так далее). Списки, слова-

    72
    Глава 3. Типы данных и объекты ри и кортежи, содержащие изменяемые объекты, не могут использоваться в качестве ключей (словари требуют, чтобы значения ключей оставались постоянными).
    Для выборки элементов из объекта отображения используется оператор индексирования по ключу m[k], где k – значение ключа. Если требуемый ключ отсутствует в словаре, возбуждается исключение KeyError. Функция len(
    m)
    возвращает количество элементов, хранящихся в отображении. Ме- тоды и операторы, применимые к словарям, перечислены в табл. 3.6.
    Таблица 3.6. Методы и операторы, поддерживаемые словарями
    Оператор или метод
    Описание
    len(
    m)
    Возвращает количество элементов в словаре m.
    m[k]
    Возвращает элемент словаря m с ключом k.
    m[k]=x
    Записывает в элемент m[k] значение x.
    del
    m[k]
    Удаляет элемент m[k].
    k in m
    Возвращает True, если ключ k присутствует в словаре m.
    m.clear()
    Удаляет все элементы из словаря m.
    m.copy()
    Создает копию словаря m.
    m.fromkeys(s [,value])
    Создает новый словарь с ключами, перечисленными в по- следовательности s, а все значения устанавливает равны- ми value.
    m.get(k [,v])
    Возвращает элемент m[k], если таковой имеется, в против- ном случае возвращает v.
    m.has_key(k)
    Возвращает True, если в словаре m имеется ключ k, в про- тивном случае возвращает False. (Вместо этого метода ре- комендуется использовать оператор in. Доступен только в Python 2.)
    m.items()
    Возвращает последовательность пар (key, value).
    m.keys()
    Возвращает последовательность ключей.
    m.pop(k [,default])
    Возвращает элемент m[k], если таковой имеется, и удаляет его из словаря; в противном случае возвращает default, если этот аргумент указан, или возбуждает исключение
    KeyError
    m.popitem()
    Удаляет из словаря случайную пару (key, value) и возвра- щает ее в виде кортежа.
    m.setdefault(k [, v])
    Возвращает элемент m[k], если таковой имеется, в про- тивном случае возвращает значение v и создает новый элемент словаря m[k] = v.
    m.update(b)
    Добавляет все объекты из b в словарь m.
    m.values()
    Возвращает последовательность всех значений в словаре m.

    Встроенные типы представления данных
    73
    Б
    ольшинство методов, перечисленных в табл. 3.6, используются для извле- чения и манипулирования содержимым словарей. Метод m.clear() удаляет все элементы. Метод m.update(b) добавляет в текущее отображение все пары
    (
    key,value)
    , присутствующие в отображении b. Метод m.get(k [,v]) извлека- ет объект и позволяет указывать необязательное значение по умолчанию
    v
    , которое будет возвращаться в случае отсутствия в словаре указанного ключа. Метод m.setdefault(k [,v]) напоминает метод m.get(), за исключением того, что он не только вернет значение v в случае отсутствия запрошенно- го ключа, но и создаст элемент m[k] = v. Если значение v не указано, по умолчанию будет использоваться значение None. Метод m.pop() возвращает элемент и одновременно удаляет его из словаря. Метод m.popitem() использу- ется для удаления содержимого словаря в цикле.
    Метод m.copy() выполняет поверхностное копирование элементов отображе- ния и помещает их в новое отображение. Метод m.fromkeys(s [,value]) созда- ет новое отображение с ключами, содержащимися в последовательности s.
    Полученное отображение будет иметь тот же тип, что и оригинал m. В каче- стве значений для всех элементов будет использовано значение None, если в необязательном аргументе value не задано альтернативное значение. Ме- тод fromkeys() определен, как метод класса, поэтому его можно вызывать относительно имени класса, например: dict.fromkeys().
    Метод m.items() возвращает последовательность, содержащую пары (key,
    value)
    . Метод m.keys() возвращает последовательность всех ключей, а метод
    m.values()
    – последовательность всех значений. Единственной безопасной операцией над результатами этих методов являются итерации. В Python 2 результатом этих методов является список, но в Python 3 результатом яв- ляется итератор, позволяющий выполнить обход текущего содержимого отображения. Если программа будет использовать результаты этих мето- дов как итераторы, она будет совместима с обеими версиями Python. Если потребуется сохранить результаты этих методов как обычные данные, их следует скопировать и сохранить в списке. Например, items = list(m.
    items())
    . Если программе достаточно просто получить список всех ключей, лучше использовать инструкцию keys = list(m).
    Множества
    Множества
    – это неупорядоченные коллекции уникальных элементов.
    В отличие от последовательностей, множества не поддерживают операции индексирования и получения срезов. От словарей их отличает отсутствие ключей, связанных с объектами. Элементы, помещаемые в множество, должны быть неизменяемыми. Существует два типа множеств: set – изме- няемое множество, и frozenset – неизменяемое множество. Оба типа мно- жеств создаются с помощью пары встроенных функций:
    s = set([1,5,10,15])
    f = frozenset([‘a’,37,’hello’])
    Обе функции, set() и frozenset(), заполняют создаваемое множество, вы- полняя итерации по значениям, хранящимся в аргументе. Оба типа мно- жеств поддерживают методы, перечисленные в табл. 3.7.

    74
    Глава 3. Типы данных и объекты
    Таблица 3.7. Методы и операторы, поддерживаемые множествами
    Метод
    Описание
    len(
    s)
    Возвращает количество элементов в множестве s.
    s.copy()
    Создает копию множества s.
    s.difference(t)
    Разность множеств. Возвращает все элементы из множества s, отсутствующие в t.
    s.intersection(t)
    Пересечение множеств. Возвращает все элементы, присутствующие в обоих множествах s и t.
    s.isdisjoint(
    t)
    Возвращает True, если множества s и t не имеют об- щих элементов.
    s.issubset(t)
    Возвращает True, если множество s является подмно- жеством t.
    s.issuperset(
    t)
    Возвращает True, если множество s является надмно- жеством t.
    s.symmetric_difference(
    t)
    Симметричная разность множеств. Возвращает все элементы, которые присутствуют в множестве s или
    t
    , но не в обоих сразу.
    s.union(
    t)
    Объединение множеств. Возвращает все элементы, присутствующие в множестве s или t.
    Методы s.difference(t), s.intersection(t), s.symmetric_difference(t) и s.union(t) реализуют стандартные математические операции над множествами. Воз- вращаемое значение имеет тот же тип, что и множество s (set или frozenset).
    Аргумент t может быть любым объектом языка Python, поддерживающим итерации. В число таких объектов входят множества, списки, кортежи и строки. Эти операции над множествами доступны также в виде математи- ческих операторов, которые подробнее описываются в главе 4.
    Дополнительно изменяемые множества (тип set) поддерживают методы, перечисленные в табл. 3.8.
    Таблица 3.8. Методы, поддерживаемые изменяемыми множествами
    Метод
    Описание
    s.add(item)
    Добавляет элемент item в s. Ничего не делает, если этот элемент уже имеется в множестве.
    s.clear()
    Удаляет все элементы из множества s.
    s.difference_update(t)
    Удаляет все элементы из множества s, которые при- сутствуют в t.
    s.discard(item)
    Удаляет элемент item из множества s. Ничего не де- лает, если этот элемент отсутствует в множестве.
    s.intersection_update(t)
    Находит пересечение s и t и оставляет результат в s.
    s.pop()
    Возвращает произвольный элемент множества и удаляет его из s.

    Встроенные типы представления структурных элементов программы
    75
    Метод
    Описание
    s.remove(item)
    У
    даляет элемент item из s. Если элемент item
    отсут- ствует в множестве, возбуждается исключение
    KeyError
    .
    s.symmetric_difference_
    update(t)
    Находит симметричную разность s и t и оставляет результат в s.
    s.update(
    t)
    Добавляет все элементы t в множество s. t может быть другим множеством, последовательностью или любым другим объектом, поддерживающим итерации.
    Все эти операции изменяют само множество s. Аргумент t может быть лю- бым объектом, поддерживающим итерации.
    Встроенные типы представления
    структурных элементов программы
    Функции, классы и модули в языке Python являются объектами, которы-
    Python являются объектами, которы- являются объектами, которы- ми можно манипулировать, как обычными данными. В табл. 3.9 перечис- лены типы, которые используются для представления различных элемен- тов самих программ.
    Таблица 3.9. Встроенные типы Python для представления структурных
    элементов программ
    Категория типов
    Имя типа
    Описание
    Вызываемые types.BuiltinFunctionType type object types.FunctionType types.MethodType
    Встроенные функции и методы
    Тип встроенных типов и классов
    Родоначальник всех типов и классов
    Пользовательские функции
    Методы классов
    Модули types.ModuleType
    Модуль
    Классы object
    Родоначальник всех типов и классов
    Типы type
    Тип встроенных типов и классов
    Обратите внимание, что в табл. 3.9 object и type встречаются дважды, пото- му что типы и классы, как и функции, являются вызываемыми объектами.
    Вызываемые типы
    Вызываемые типы представляют объекты, поддерживающие возможность их вызова, как функций. Существует несколько разновидностей объектов, обладающих этим свойством, включая пользовательские функции, встро- енные функции, методы экземпляров и классы.

    76
    Глава 3. Типы данных и объекты
    Пользовательские функции
    Пользовательские функции
    являются вызываемыми объектами, которые создаются на уровне модуля с помощью инструкции def или оператора lambda
    . Например:
    def foo(x,y):
    return x + y
    ёё
    bar = lambda x,y: x + y
    Пользовательская функция f обладает следующими атрибутами:
    Атрибут
    Описание
    f.__doc__
    Строка документирования
    f.__name__
    Имя функции
    f.__dict__
    Словарь, содержащий атрибуты функции
    f.__code__
    Скомпилированный байт-код функции
    f.__defaults__
    Кортеж с аргументами по умолчанию
    f.__globals__
    Словарь, определяющий глобальное пространство имен
    f.__closure__
    Кортеж, содержащий данные, связанные с вложенными областями видимости
    В устаревших версиях Python 2 многие из перечисленных атрибутов имели имена, такие как func_code, func_defaults и так далее. Перечисленные име- на атрибутов совместимы с версиями Python 2.6 и Python 3.
    Методы
    Методы
    – это функции, которые определены внутри класса. Существует три основных типа методов: методы экземпляра, методы класса и статиче- ские методы:
    class Foo(object):
    def instance_method(self,arg):
    инструкции
    @classmethod def class_method(cls,arg):
    инструкции
    @staticmethod def static_method(arg):
    инструкции
    Метод экземпляра
    – это метод, который оперирует экземпляром данного класса. Ссылка на экземпляр передается методу в первом аргументе, кото- рый в соответствии с соглашениями называется self. Метод класса опери- рует самим классом, как объектом. Объект класса передается методу клас- са в первом аргументе cls. Статический метод – это обычная функция,

    Встроенные типы представления структурных элементов программы
    77
    которая по некоторым соображениям была помещена в класс. Он не полу- чает ссылку ни на экземпляр класса, ни на сам класс.
    Методы экземпляра и методы класса представлены специальным типом types.MethodType
    . Однако, чтобы понять, как действует этот специальный тип, необходимо разобраться с тем, как действует механизм поиска атри- бутов объекта (.). Поиск любого атрибута объекта (.) всегда выполняется как отдельная операция, независимо от операции вызова функции. При фактическом вызове метода выполняются обе операции, но в виде отдель- ных действий. Следующий пример иллюстрирует порядок вызова метода
    f.instance_method(arg)
    экземпляра класса Foo из предыдущего листинга:
    f = Foo() # Создает экземпляр meth = f.instance_method # Отыскивает метод и отмечает отсутствие ()
    meth(37) # Вызов метода
    В данном примере meth – это связанный метод. Связанный метод – это вы- зываемый объект, который заключает в себе функцию (метод) и экземпляр класса. При вызове связанного метода экземпляр класса передается мето- ду в первом аргументе (self). То есть в этом примере meth можно рассматри- вать, как механизм вызова метода, готовый к использованию, который бу- дет запущен при добавлении к нему оператора () вызова функции.
    Операция поиска метода может также выполняться непосредственно в са- мом классе. Например:
    umeth = Foo.instance_method # Поиск instance_method в классе Foo umeth(f,37) # Вызов с явной передачей значения аргумента self
    В этом примере umeth – это несвязанный метод. Несвязанный метод – это вызываемый объект, который заключает в себе функцию, но предполагает, что ссылка на экземпляр соответствующего типа будет передаваться в пер- вом аргументе вручную. В данном примере в первом аргументе передается экземпляр f класса Foo. Если попытаться передать экземпляр неверного типа, будет возбуждено исключение TypeError. Например:
    >>> umeth(“hello”,5)
    Traceback (most recent call last):
    File “”, line 1, in
    TypeError: descriptor ‘instance_method’ requires a ‘Foo’ object but received a ‘str’
    (Перевод:
    Трассировочная информация (самый последний вызов – самый нижний):
    Файл “”, строка 1, в <модуль>
    TypeError: дескриптор ‘instance_method’ должен быть объектом класса ‘Foo’, получен объект ‘str’
    )
    >>>
    Для пользовательских классов связанные и несвязанные методы представ- лены объектами типа types.MethodType, которые являются всего лишь тон- кой оберткой вокруг обычного объекта функции. Методы поддерживают следующие атрибуты:

    78
    Глава 3. Типы данных и объекты
    Атрибут
    Описание
    m.__doc__
    Строка документирования
    m.__name__
    Имя метода
    m.__class__
    Класс, в котором определен данный метод
    m.__func__
    Объект функции, реализующей данный метод
    m.__self__
    Ссылка на экземпляр, ассоциированный с данным методом
    (None – для несвязанных методов)
    Одна из важных особенностей Python 3 состоит в том, что несвязанные ме-
    Python 3 состоит в том, что несвязанные ме-
    3 состоит в том, что несвязанные ме- тоды больше не обернуты объектом types.MethodType. Если обратиться к ме- тоду Foo.instance_method, как показано в предыдущих примерах, он будет интерпретироваться, как обычный объект функции, реализующей метод.
    Более того, в Python 3 больше не выполняется проверка типа аргумента self
    Встроенные функции и методы
    Для представления функций и методов, реализованных на языках C и C++, используется объект types.BuiltinFunctionType. Для встроенных методов до- ступны следующие атрибуты:
    Атрибут
    Описание
    b.__doc__
    Строка документирования
    b.__name__
    Имя функции/метода
    b.__self__
    Ссылка на экземпляр, ассоциированный с данным методом
    (для связанных методов)
    Для встроенных функций, таких как len(), аргумент __self__ устанавлива- ется в значение None, что является признаком функции, которая не связана с каким-либо конкретным объектом. Для встроенных методов, таких как
    x.append
    , где x – объект списка, в аргументе __self__ передается ссылка на объект x.
    Классы и экземпляры как вызываемые объекты
    Классы и экземпляры также могут действовать, как вызываемые объек- ты. Объект класса создается инструкцией class и может вызываться как функция для создания новых экземпляров. В этом случае аргументы вызо- ва передаются методу __init__() класса для инициализации вновь создан- ного экземпляра. Экземпляр может имитировать поведение функции, если определяет специальный метод __call__(). Если этот метод определен для экземпляра x, то инструкция x(args) вызовет метод x.__call__(args).

    Встроенные типы представления структурных элементов программы
    79
    Классы, типы и экземпляры
    Когда определяется класс, его объявление обычно создает объект типа type
    . Например:
    >>>
    1   2   3   4   5   6   7   8   9   10   ...   82


    написать администратору сайта