Built-in Types
В следующих разделах описаны стандартные типы,встроенные в интерпретатор.
Основными встроенными типами являются числовые значения,последовательности,связки,классы,экземпляры и исключения.
Некоторые классы коллекций изменяемы. Методы, которые добавляют, вычитают или переставляют элементы на месте и не возвращают конкретный элемент, никогда не возвращают сам экземпляр коллекции, а None .
Некоторые операции поддерживаются несколькими типами объектов; в частности, практически все объекты можно сравнивать на равенство, проверять на истинность и преобразовывать в строку (с помощью функции repr() или немного отличающейся функции str() ). Последняя функция неявно используется, когда объект записывается функцией print() .
Тестирование истинного значения
Любой объект может быть протестирован на предмет истинности, для использования в if или while или в качестве операнда логических операций ниже.
По умолчанию объект считается истинным, если его класс не определяет __bool__() который возвращает False , или __len__() который возвращает ноль при вызове с объектом. 1 Вот большинство встроенных объектов, считающихся ложными:
- константы, определенные как ложные: None и False .
- ноль любого числового типа: 0 , 0.0 , 0j , Decimal(0) , Fraction(0, 1)
- пустые последовательности и коллекции: » , () , [] , <> , set() , range(0)
Операции и встроенные функции, которые имеют логический результат, всегда возвращают 0 или False для false и 1 или True для true, если не указано иное. (Важное исключение: логические операции or and and всегда возвращают один из своих операндов.)
Логические операции — and , or , not
Это Булевы операции,упорядоченные по возрастанию приоритета:
если x ложно, то True , иначе False
- Это оператор короткого замыкания,поэтому он оценивает второй аргумент только в том случае,если первый является ложным.
- Это оператор короткого замыкания,поэтому он оценивает второй аргумент только в том случае,если первый из них верен.
- not имеет более низкий приоритет, чем небулевы операторы, поэтому not a == b интерпретируется как not (a == b) , а a == not b является синтаксической ошибкой.
Comparisons
В Python есть восемь операций сравнения. Все они имеют одинаковый приоритет (который выше, чем у логических операций). Сравнения можно связывать произвольно; например, x < y y оценивается только один раз (но в обоих случаях z вообще не оценивается, когда x < y оказывается ложным).
В этой таблице обобщены операции сравнения:
идентичность объекта отрицания
Объекты разных типов, кроме разных числовых, никогда не сравниваются как равные. Оператор == всегда определен, но для некоторых типов объектов (например, объектов класса) эквивалентен is . Операторы < , и >= определены только там, где они имеют смысл; например, они вызывают исключение TypeError , когда один из аргументов является комплексным числом.
Неидентичные экземпляры класса обычно сравниваются как неравные, если только класс не определяет метод __eq__() .
Экземпляры класса не могут быть упорядочены по отношению к другим экземплярам того же класса или другим типам объектов, если класс не определяет достаточное количество методов __lt__() , __le__() , __gt__() и __ge__() (в общем случае , __lt__() и __eq__() достаточно, если вам нужны общепринятые значения операторов сравнения).
Поведение операторов is и is not нельзя настроить; также их можно применять к любым двум объектам и никогда не вызывать исключения.
Еще две операции с одинаковым синтаксическим приоритетом, in и not in , поддерживаются типами, которые являются итерируемыми или реализуют метод __contains__() .
Числовые типы-int,float,complex
Существует три различных числовых типа: целые числа , числа с плавающей запятой и комплексные числа . Кроме того, логические значения являются подтипом целых чисел. Целые числа имеют неограниченную точность. Числа с плавающей запятой обычно реализуются с помощью double в C; информация о точности и внутреннем представлении чисел с плавающей запятой для машины, на которой работает ваша программа, доступна в sys.float_info . Комплексные числа имеют действительную и мнимую части, каждая из которых является числом с плавающей запятой. Чтобы извлечь эти части из комплексного числа z , используйте z.real и z.imag . (Стандартная библиотека включает дополнительные числовые типы fractions.Fraction , для рациональных чисел, и decimal.Decimal , для чисел с плавающей запятой с определяемой пользователем точностью.)
Числа создаются числовыми литералами или в результате встроенных функций и операторов. Целочисленные литералы без украшений (включая шестнадцатеричные, восьмеричные и двоичные числа) дают целые числа. Числовые литералы, содержащие десятичную точку или знак экспоненты, дают числа с плавающей запятой. Добавление ‘j’ или ‘J’ к числовому литералу дает мнимое число (комплексное число с нулевой действительной частью), которое вы можете добавить к целому числу или с плавающей точкой, чтобы получить комплексное число с действительной и мнимой частями.
Python полностью поддерживает смешанную арифметику: когда двоичный арифметический оператор имеет операнды разных числовых типов, операнд с «более узким» типом расширяется до другого, где целое уже, чем с плавающей запятой, которое уже, чем сложное. Сравнение между числами разных типов ведет себя так, как будто сравниваются точные значения этих чисел. 2
Конструкторы int() , float() и complex() могут использоваться для создания чисел определенного типа.
Все числовые типы (кроме сложных) поддерживают следующие операции (приоритеты операций см. в разделе Приоритет операторов ):
Working with Binary Data in Python
Alright, lets get this out of the way! The basics are pretty standard:
- There are 8 bits in a byte
- Bits either consist of a 0 or a 1
- A byte can be interpreted in different ways, like binary octal or hexadecimal
Note: These are not character encodings, those come later. This is just a way to look at a set of 1’s and 0’s and see it in three different ways(or number systems).
Input : 10011011 Output : 1001 1011 ---- 9B (in hex) 1001 1011 ---- 155 (in decimal) 1001 1011 ---- 233 (in octal)
This clearly shows a string of bits can be interpreted differently in different ways. We often use the hex representation of a byte instead of the binary one because it is shorter to write, this is just a representation and not an interpretation.
Encoding
Now that we know what a byte is and what it looks like, let us see how it is interpreted, mainly in strings. Character Encodings are a way to assign values to bytes or sets of bytes that represent a certain character in that scheme. Some encodings are ASCII(probably the oldest), Latin, and UTF-8(most widely used as of today. In a sense encodings are a way for computers to represent, send and interpret human readable characters. This means that a sentence in one encoding might become completely incomprehensible in another encoding.
Python and Bytes
From a developer’s point of view, the largest change in Python 3 is the handling of strings. In Python 2, the str type was used for two different kinds of values – text and bytes, whereas in Python 3, these are separate and incompatible types. This means that before Python3 we could treat a set of bytes as a string and work from there, this is not the case now, now we have a separate data type, called bytes. This data type can be briefly explained as a string of bytes, which essentially means, once the bytes data type is initialized it is immutable.