165 lines
6.6 KiB
Markdown
165 lines
6.6 KiB
Markdown
---
|
||
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)
|
||
<class 'int'>
|
||
```
|
||
|
||
Числовые литералы не содержат знак, однако создания отрицательных _целых объектов_ можно предваряя с одноместный `-` (минус) оператором без пробела перед буквальным:
|
||
```
|
||
>>> -1234567890
|
||
-1234567890
|
||
>>> type(-1234567890)
|
||
<class 'int'>
|
||
```
|
||
|
||
Аналогично, положительные целые объекты могут быть созданы путем префикса унарного `+` (плюс) оператора без пробела перед цифрами. Обычно `+` омрачивается:
|
||
```
|
||
>>> +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 "<stdin>", 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)
|
||
<class 'int'>
|
||
>>> b = int(1) # Works but unnecessary.
|
||
>>> type(b)
|
||
<class 'int'>
|
||
```
|
||
|
||
Однако конструктор позволяет создавать _целые объекты_ из других типов номеров:
|
||
```
|
||
>>> a = 1.123
|
||
>>> type(a)
|
||
<class 'float'>
|
||
>>> print(a)
|
||
1.123
|
||
>>> b = int(1.123)
|
||
>>> type(b)
|
||
<class 'int'>
|
||
>>> print(b)
|
||
1
|
||
```
|
||
|
||
Использование конструктора `int` для чисел с плавающей запятой усекает число до нуля:
|
||
```
|
||
>>> int(-1.23)
|
||
-1
|
||
>>> int(1.23)
|
||
1
|
||
```
|
||
|
||
Встроенные `boolean` константы являются экземплярами класса `bool` и являются подклассами класса `int` , что делает их своего рода числовым типом:
|
||
```
|
||
>>> type(True)
|
||
<class 'bool'>
|
||
>>> issubclass(bool, int)
|
||
True
|
||
```
|
||
|
||
Если это не имеет смысла для вас, не беспокойтесь. Теперь просто помните, что вызов конструктора int с `boolean` объектами будет возвращать _целые объекты_ :
|
||
```
|
||
>>> int(True)
|
||
1
|
||
>>> int(False)
|
||
0
|
||
```
|
||
|
||
Конструктор `int` также будет делать _целые объекты_ из строк:
|
||
```
|
||
>>> a = "10"
|
||
>>> type(a)
|
||
<class 'str'>
|
||
>>> b = int("10")
|
||
>>> type(b)
|
||
<class 'int'>
|
||
```
|
||
|
||
_Строки_ для конструктора `int` должны представлять целочисленный литерал:
|
||
|
||
Второй параметр конструктора `int` - это указать базу (по умолчанию: 10). Допустимые значения: 0 и 2-36.
|
||
|
||
Если явная база предоставляется, первым аргументом должна быть строка.
|
||
```
|
||
>>> int("111", 2)
|
||
7
|
||
>>> int(111, 2)
|
||
Traceback (most recent call last):
|
||
File "<stdin>", line 1, in <module>
|
||
TypeError: int() can't convert non-string with explicit base
|
||
```
|
||
|
||
Строка, используемая для конструктора `int` с явной базой, должна быть допустимым целым литералом для этой базы:
|
||
```
|
||
>>> int('11', 2)
|
||
3
|
||
>>> int('12', 2)
|
||
Traceback (most recent call last):
|
||
File "<stdin>", line 1, in <module>
|
||
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 "<stdin>", line 1, in <module>
|
||
ValueError: invalid literal for int() with base 2: '0x1101'
|
||
```
|
||
|
||
Если используется префиксная строка и база 0, созданный целочисленный объект будет использовать базу, указанную префиксом. Если префикс не используется, то основание предполагается 10
|
||
```
|
||
>>> int('100', 0)
|
||
100
|
||
>>> int('0b100', 0)
|
||
4
|
||
>>> int('0o100', 0)
|
||
64
|
||
|
||
``` |