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

165 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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
```