Python数值类型全解析:整数、浮点、复数与集合

码头散步
码头散步
发布时间:2026-10-12| 2人浏览过
原创

本文深入解析Python中的核心数值类型,涵盖整数精度、浮点数IEEE754标准、复数运算及布尔类型。详细讲解除法运算符/与//的行为差异、进制转换方法、位操作逻辑,以及集合对不可变对象的要求。通过代码示例阐明混合类型计算规则与类型转换机制,帮助开发者掌握Python数据处理基础。

一、整数

在Python 2中,整型分为普通整型和长整型,而在Python 3中,这两种类型已合并为统一的整型(int)。Python的整型支持无限精度,理论上仅受限于可用内存大小,因此可以表示任意位数的数字。例如:

>>> 1111_2222_3333_4444_5555_6666_7777_8888_9999_0000
1111222233334444555566667777888899990000

Python的一个人性化设计是支持在数字字面量中使用下划线进行分隔,每四位一组,使长数字更易读。这种格式类似于某些地区习惯的三位分隔法,旨在提升代码的可读性。

>>> 123_456_789
123456789
>>>

二、浮点数

CPython的标准实现基于C语言的双精度类型(double),每个浮点数占用8字节。更重要的是,Python遵循IEEE 754标准进行浮点运算。例如:

>>> 1.234
1.234
>>> 1.23412313131231233
1.2341231313123124
>>> 1.231123E100
1.231123e+100

浮点数支持科学计数法表示法。

三、复数

Python内置了复数类型,这在处理坐标系统、复变函数或积分变换计算时提供了极大便利。尽管数值计算通常推荐使用NumPy库,但Python仍支持直接初始化复数,例如通过类似1+1j的语法,或使用内置函数complex(real, imag)。例如:

>>> a = 1+2j
>>> a
(1+2j)
>>> type(a)
<class 'complex'>
>>> b = complex(2,2)
>>> b
(2+2j)
>>> 

Python同样提供了复数的基本算术运算支持,例如:

>>> b + a
(3+4j)
>>> a - b
(-1+0j)
>>> a * b
(-2+6j)
>>> a / b
(0.75+0.25j)
>>> 

四、运算符,优先级以及结合性

每种编程语言都支持特定的运算符,且运算符之间存在优先级和结合性。虽然无需死记所有运算符的优先级关系,但在编写复杂表达式时,建议多使用括号()来明确表达式的精确含义。例如:

>>> x = 1
>>> y = 2
>>> not x and y or y > x != 1
False

此类表达式过于复杂,逻辑难以直观理解。实际上,预期的意图可能是:

>>> ((not x) and y) or (y > (x != 1))
True

此时运算结果将截然不同。因此,除非必要,应避免编写复杂的表达式;若必须使用,请务必添加括号以明确表达意图。

五、混合类型计算

混合类型的计算结果会自动向更复杂的类型转换。例如:

>>> num = 1 + 2.3
>>> type(num)
<class 'float'>
>>> num =  1 + (2 + 3j)
>>> type(num)
<class 'complex'>

六、除法

在Python 3中,除法分为真除法和取整除法两种。鉴于Python 2已停止维护,本系列内容仅针对Python 3。 /: 在Python 3中,/运算符始终执行真除法,无论操作数类型如何,结果均包含小数部分。 //: 执行向下取整除法。若操作数均为整数,结果为整数;若任一操作数为浮点数,结果为浮点数。 请仔细观察以下示例:

>>> 3 / 2
1.5
>>> 3.0 / 2
1.5
>>> 3 // 2
1
>>> 3.0 // 2
1.0

尽管此类表达式较少见,但需注意其结果仍遵循先执行向下取整除法,再处理小数部分的逻辑。以下示例进一步证实了这一点。

>>> -2.9 // 1
-3.0
>>> -2.1 // 1
-3.0

七、十进制,八进制,十六进制和二进制

Python默认字面量为十进制,也可通过以下方式生成其他进制的字面值:

>>> 0o12    # 8进制
10
>>> 0xA     # 16进制
10
>>> 0b10    # 2进制
2

这些字面值均以0开头,后跟表示进制的字母:8进制用o(大小写均可),16进制用x,2进制用b,随后跟随数值部分。Python还提供了相应的函数进行进制间的相互转换。

>>> a = 3
>>> oct(a)      # 转成8进制字符串
'0o3'
>>> hex(a)      # 转成16进制字符串
'0x3'
>>> bin(a)      # 转成2进制字符串
'0b11'
>>> int('0b10',2)       # 将2进制转为10进制
2
>>> int('0xa',16)       # 将16进制  转为10进制
10
>>> int('0o12',8)       # 将8进制   转为10进制
10

int()函数(实为类构造器)用于将字符串或数字转换为整型。其用法如下:

int(x, base=10)

其中x为数值字符串,base指定该字符串的进制,默认值为10。 Python中还存在另一个函数eval(),它将字符串作为Python代码执行,效果如下:

>>> eval('0o12')
10
>>> eval('0xa')
10
>>> eval('0b10')
2

该函数运行速度较慢,因为它会将字符串编译为代码片段执行,因此使用时存在较大的安全风险。

八、位操作

Python支持C语言的位操作,尽管大多数场景下并不常用。下表列出了位操作运算符:

位运算符 功能
<< 按位左移
>> 按位右移
| 按位或
& 按位与
^ 按位异或
~ 按位取反

值得注意的是,按位左移N位相当于原数字乘以2的N次方,按位右移N位相当于原数字除以2的N次方。在Python中,位运算几乎很少被使用。

九、集合

Python中的集合(set)属于数值类型,提供了基础集合论的功能,满足确定性、互异性和无序性。需特别注意,集合仅包含不可变对象(即可哈希对象),列表和字典不能嵌入其中,但元组可以。集合本身是可变对象。关于集合运算可参考集合论相关知识。 以下示例展示集合元素必须为不可变对象,但集合本身可变。

>>> a.add(1)
>>> a
{1}
>>> a.add("123")
>>> a
{'123', 1}
>>> b =  1,2
>>> a.add(b)
>>> a
{'123', 1, (1, 2)}

向集合中添加数字、字符串、元组等不可变对象没有问题。下面查看添加可变对象时的情况。

>>> c = [1,2,3]
>>> a.add(c)
Traceback (most recent call last)   :
  File "<stdin>", line 1, in    <module>
TypeError: unhashable type:     'list'
>>> d = {'1':1,'2':2}
>>> a.add(d)
Traceback (most recent call last)   :
  File "<stdin>", line 1, in    <module>
TypeError: unhashable type:     'dict'
>>> e = set()
>>> a.add(e)
Traceback (most recent call last)   :
  File "<stdin>", line 1, in    <module>
TypeError: unhashable type: 'set'

可见,无论是list、dict还是set,添加时均会提示类型错误,因为它们是不可哈希类型。

十、布尔类型

Python提供了显式的布尔类型,True和False是两个预置的布尔值。实际上,True和False是bool类的两个实例,而bool是内置类型int的子类。True和False的行为与1、0一致。bool类重新定义了str和repr的字符串格式,因此打印时显示为True和False,而非1和0。 有趣的是,Python仅定义了1和0两种情况下的显示规则,未定义其他值的显示。因此显示时会出现以下情况。

>>> True + 1
2

十一、其他数值类型

小数(Decimal)和分数(Fraction)类型需导入模块创建,此处不作过多介绍。与浮点数相比,它们是精确的。尤其在需要高精度计算时,这十分必要,但在大多数常规场合下,通常不需要使用它们。

>>> from decimal import Decimal                                                                                                                 		 
>>> a = Decimal('0.1')                                                                                                                          
>>> a                                                                                                                                           
Decimal('0.1')                                                                                                                                  
>>> from fractions import Fraction                                                                                                     
>>> b = Fraction(1,3)                       # 1是分子,3是分母                                                                                                    
>>> b                                                                                                                                           
Fraction(1, 3) 

至此,关于Python基础数值类型的详解介绍完毕。如需了解更多Python数值类型内容,请搜索本站往期文章或继续浏览相关文章,希望大家今后多多支持本站!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。