--- title: Python Integers localeTitle: Цепочки Python --- Теоретическая область для целых чисел в python является отрицательной бесконечностью до бесконечности. На практике целочисленные значения ограничены объемом доступной памяти. В Python 2 существует различие между **`int`** , числами, которые соответствуют 32 или 64-битным _C длинным_ и **`long`** номерам, ограниченным доступной памятью. Python 3 объединил два типа в **`int`** , больше информации в [PEP 237](https://www.python.org/dev/peps/pep-0237/) . **создание `int` с использованием целочисленных литералов** [Целочисленные литеры](https://docs.python.org/3/reference/lexical_analysis.html#integer-literals) _Целочисленные объекты_ могут быть созданы с использованием целочисленных литералов. Безсердечные числа без десятичных знаков являются целыми литералами: ``` >>> 1234567890 # Unadorned numbers are integer literals 1234567890 >>> type(1234567890) ``` Числовые литералы не содержат знак, однако создания отрицательных _целых объектов_ можно предваряя с одноместный `-` (минус) оператором без пробела перед буквальным: ``` >>> -1234567890 -1234567890 >>> type(-1234567890) ``` Аналогично, положительные целые объекты могут быть созданы путем префикса унарного `+` (плюс) оператора без пробела перед цифрами. Обычно `+` омрачивается: ``` >>> +1234 1234 ``` Бинарные (base 2, prefix: `0b` или `0B` ), восьмеричные (base 8, prefix: `0o` или `0O` ) и шестнадцатеричные (базовые 16, префикс: `0x` или `0X` ) целые числа также могут быть созданы с использованием целочисленных литералов: ``` >>> 0b1, 0b10, 0b11 (1, 2, 3) >>> 0o1, 0o10, 0o11 (1, 8, 9) >>> 0x1, 0x10, 0x11 (1, 16, 17) ``` Обратите внимание, что ведущие 0 для ненулевых целых литералов **не допускаются** : ``` >>> 0 # Zero by itself is okay. 0 >>> 01 # Leading zero(s) cause SyntaxError. File "", line 1 01 ^ SyntaxError: invalid token ``` `int` [конструктор](https://docs.python.org/3/library/functions.html#int) еще один способ создать _целые объекты._ ``` class int(x=0) class int(x, base=10) ``` При необходимости предпочтительнее создавать _целые объекты_ с целыми литералами: ``` >>> a = 1 # Prefer integer literal when possible. >>> type(a) >>> b = int(1) # Works but unnecessary. >>> type(b) ``` Однако конструктор позволяет создавать _целые объекты_ из других типов номеров: ``` >>> a = 1.123 >>> type(a) >>> print(a) 1.123 >>> b = int(1.123) >>> type(b) >>> print(b) 1 ``` Использование конструктора `int` для чисел с плавающей запятой усекает число до нуля: ``` >>> int(-1.23) -1 >>> int(1.23) 1 ``` Встроенные `boolean` константы являются экземплярами класса `bool` и являются подклассами класса `int` , что делает их своего рода числовым типом: ``` >>> type(True) >>> issubclass(bool, int) True ``` Если это не имеет смысла для вас, не беспокойтесь. Теперь просто помните, что вызов конструктора int с `boolean` объектами будет возвращать _целые объекты_ : ``` >>> int(True) 1 >>> int(False) 0 ``` Конструктор `int` также будет делать _целые объекты_ из строк: ``` >>> a = "10" >>> type(a) >>> b = int("10") >>> type(b) ``` _Строки_ для конструктора `int` должны представлять целочисленный литерал: Второй параметр конструктора `int` - это указать базу (по умолчанию: 10). Допустимые значения: 0 и 2-36. Если явная база предоставляется, первым аргументом должна быть строка. ``` >>> int("111", 2) 7 >>> int(111, 2) Traceback (most recent call last): File "", line 1, in TypeError: int() can't convert non-string with explicit base ``` Строка, используемая для конструктора `int` с явной базой, должна быть допустимым целым литералом для этой базы: ``` >>> int('11', 2) 3 >>> int('12', 2) Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 2: '12' ``` Можно использовать как префиксные, так и не префиксные строки целых литералов, однако, если они используются, префикс должен соответствовать предоставленной базе. ``` >>> int('1101', 2) 13 >>> int('0b1101', 2) 13 >>> int('0x1101', 2) Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 2: '0x1101' ``` Если используется префиксная строка и база 0, созданный целочисленный объект будет использовать базу, указанную префиксом. Если префикс не используется, то основание предполагается 10 ``` >>> int('100', 0) 100 >>> int('0b100', 0) 4 >>> int('0o100', 0) 64 ```