Главное свойство декораторов – то, что они выполняются сразу после определения декорируемой функции. Обычно на этапе импорта то есть когда Python загружает модуль. Continue reading
Все, что нужно знать о байтах в Python
Новые типы двоичных последовательностей во многих отношениях похожи на тип str в Python 2. Главное что нужно знать – это то, что существуют два основных встроенных типа двоичных последовательностей: неизменяемый тип bytes, появившийся в Python 3, и изменяемый тип bytearray, добавленный в Python 2.6.
Кстати, в Python 2.6 был также введен тип bytes, но лишь как псевдоним типа str, он ведет себя иначе, чем тип bytes в Python 3.
Каждый элемент bytes или bytearray – целое число от 0 до 255, а не односимвольная строка, как в типе str в Python 2 str. Continue reading
Обработка отсутствия ключей в Python с помощью setdefault
В полном соответствии с философией “быстрого прекращения” доступ к словарю dict с помощью конструкции d[k] возбуждает исключение, если ключ k отсутствует.
Любой питонист знает об альтернативной конструкции d.get(k, default), которая применяется вместо d[k], если иметь значение по умолчанию удобнее, чем обрабатывать исключение KeyError.
Однако если нужно обновить найденное значение (при условии, что оно изменяемое), то и __getitem__, и get оказываются неудобны и неэффективны.
В примере №1 показан неоптимальный скрипт, демонстрирующий одну ситуацию, когда dict.get – не лучший способ обработки отсутствия ключа. Continue reading
Обращения к атрибутам: __getattr__ и __setattr__ в Python
Метод __getattr__ выполняет операцию получения ссылки на атрибут. Если говорить более определенно, он вызывается с именем атрибута в виде строки всякий раз, когда обнаруживается попытка получить ссылку на неопределенный(несуществующий) атрибут.
Этот метод не вызывается, если интерпретатор может обнаружить атрибут посредством выполнения процедуры поиска в дереве наследования. Вследствие этого метод __getattr__ удобно использовать для обобщенной обработки запросов к атрибутам. Например: Continue reading
Операция вызова: __call__ в Python
Метод __call__ вызывается при обращении к экземпляру как к функции. Это не повторяющееся определение – если метод __call__ присутствует, интерпретатор будет вызвать его, когда экземпляр вызывается как функция, передавая ему любые позиционные и именованные аргументы:
1 2 3 4 5 6 7 8 9 10 11 |
>>> class CallMe: def __call__(self, *args, **kwargs): # Реализует вызов экземпляра print('Called:', args, kwargs) # Принимает любые аргументы ... ... >>> C = CallMe() >>> C(4,5,6) Called: (4,5,6) {} >>> c(5,6,7, x = 10, y = 20) Called: (5,6,7) {'x' : 10, 'y': 20 } |
Выражаясь более формальным языком, метод __call__ поддерживает все схемы передачи аргументов. Все что передается экземпляру, передается этому методу наряду с обычным аргументом self, в котором передается сам экземпляр. Например, следующие определения метода: Continue reading
Кодирование строк символов ASCII в Python
Рассмотрим несколько примеров, демонстрирующих основы кодирования строк в Python. Строки символов ASCII являются простейшей разновидностью строк символов Юникода, которые хранятся как последовательности байтов, представляющих символы: Continue reading
Модуль cgi Python
В модуле cgi предусмотрен основной класс FieldStorage, который выполняет всю работу. Этот класс считывает всю необходимую информацию о пользователе, передаваемую веб-клиентом (через веб-сервер), поэтому экземпляр этого класса должен быть создан сразу после запуска сценария CGI на языке Python.
Экземпляр указанного класса включает объект, напоминающий словарь, который содержит набор пар “ключ значение”. Ключами являются имена элементов ввода, передаваемых из заполненной формы. Значения содержат соответствующие данные. Continue reading
Введение в интерфейс CGI Python
Изначально веб разрабатывался как глобальный оперативный репозитарий, или архив документов (главным образом для образовательных и научных учреждений). При этом информация в основном была представлена в текстовой форме, как правило, с разметкой НТМL.
Язык НТМL можно рассматривать как инструмент форматирования текста, позволяющий задавать шрифты, размеры и стили. Основной особенностью НТМL является поддержка гипертекста. Под этим подразумевается возможность использовать определенный текст (обычно как-то выделенный) или даже графические элементы в качестве ссылок, указывающих на другие документы или на места в Интернете и в веб, которые связаны с контекстом оригинала.
Для доступа к документу достаточно щелкнуть кнопкой мыши или воспользоваться другим механизмом выделения содержимого, предназначенным для пользователей. Документы HTML являются статическими, хранятся на веб-сервере и передаются клиентам по требованию. Continue reading
Шифрование строк с помощью модуля hashlib Python
Для шифрования строк предназначен модуль hashlib. Прежде чем использовать функции из этого модуля, необходимо подключить модуль с помощью инструкции:
1 |
import hashlib |
Модуль предоставляет следующие функции: md5(), sha1(), sha224(), sha256(), sha384 и sha512(). В качестве необязательного параметра функциям можно передать шифруемую последовательность байтов. Например: Continue reading
Тип данных bytearray Python
Тип данных bytearray является разновидностью типа bytes и поддерживает те же самые методы и операции. В отличие от типа bytes, тип bytearray допускает возможность непосредственного изменения объекта и содержит дополнительные методы, позволяющие выполнять эти изменения.
Создать объект типа bytearray можно следующими способами:
С помощью функции bytearray([<Строка>, <Кодировка>[, <Обработка ошибок>]]). Если параметры не указаны, то возвращается пустой объект. Чтобы преобразовать строку в объект типа bytearray, необходимо передать минимум два первых параметра. Если строка указана только в первом параметре, то возбуждается исключение TypeError. Continue reading