freeCodeCamp/guide/chinese/python/data-structures/integers/index.md

165 lines
4.2 KiB
Markdown
Raw Normal View History

---
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
```
二进制基数2前缀 `0b`或`0B` 八进制基数8前缀 `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
```
如果这对你没有意义,请不要担心。现在只记得用`boolean`对象调用int构造函数将返回_整数对象_
```
>>> int(True)
1
>>> int(False)
0
```
`int`构造函数还将从字符串中生成_整数对象_
```
>>> a = "10"
>>> type(a)
<class 'str'>
>>> b = int("10")
>>> type(b)
<class 'int'>
```
`int`构造函数的_字符串_必须表示整数文字
`int`构造函数的第二个参数是指定一个base默认值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
```