
🌈个人主页:聆风吟_
🔥系列专栏:Python编程日志、C标准库
🔖少年有梦不应止于心动,更要付诸行动。
文章目录
- 📋前言
-
- 一、数字类型总览
- [二、int 整数类型](#二、int 整数类型)
-
- [2.1 定义](#2.1 定义)
- [2.2 不同进制整数字面量写法](#2.2 不同进制整数字面量写法)
- [2.3 进制转换内置函数](#2.3 进制转换内置函数)
- [三、float 浮点数类型](#三、float 浮点数类型)
-
- [3.1 定义](#3.1 定义)
- [3.2 经典问题:浮点数精度丢失](#3.2 经典问题:浮点数精度丢失)
- [3.3 特殊浮点常量](#3.3 特殊浮点常量)
- [四、bool 布尔类型](#四、bool 布尔类型)
-
- [4.1 定义](#4.1 定义)
- [4.2 布尔真假判定规则](#4.2 布尔真假判定规则)
- 五、数字类型强制转换
-
- [5.1 int() 转为整数](#5.1 int() 转为整数)
- [5.2 float() 转为浮点数](#5.2 float() 转为浮点数)
- [5.3 bool() 转为布尔值](#5.3 bool() 转为布尔值)
- 📝全文总结
📋前言
上一篇完整梳理了Python所有内置数据类型,本篇聚焦最基础的数字类型Number,逐一讲解整数、浮点数、布尔值三大子类型,覆盖进制写法、数学运算规则、浮点精度缺陷、类型强制转换。
一、数字类型总览
Python数字类型专门用于数值存储与数学计算,包含3个子类型:
int:整数float:浮点数(小数)bool:布尔类型,是int的子类,仅存在True、False两个取值
使用type()查看变量实际类型,isinstance()可判断继承关系:
python
a = 10
print(type(a)) # 输出: <class 'int'>
print(isinstance(True, int)) # True
二、int 整数类型
2.1 定义
正数、负数、0 都属于整数;Python3 的 int 没有数值长度上限,超大整数也能正常存储和运算。
python
num1 = 99
num2 = -50
num3 = 0
big_num = 9999999999999999999999999999
print(type(big_num)) # 输出: <class 'int'>
补充说明 :Python3 彻底取消了
long长整型,所有整数统一归为int,不再区分短整型、长整型,大幅降低记忆负担。
2.2 不同进制整数字面量写法
默认使用十进制编码;二进制、八进制、十六进制多用于底层开发、编码解析、硬件交互场景。
| 进制 | 标识前缀 | 示例 | 等价十进制 |
|---|---|---|---|
| 十进制 | 默认无前缀 | 18 | 18 |
| 二进制 | 0b |
0b101 |
5 |
| 八进制 | 0o |
0o12 |
10 |
| 十六进制 | 0x |
0x1a |
26 |
python
print(0b101) # 5
print(0o12) # 10
print(0x1a) # 26
2.3 进制转换内置函数
Python内置3个整型进制转换函数:bin()、oct()、hex();搭配int()可实现任意进制字符串转回十进制。
(1)bin(num):十进制 → 二进制
返回携带0b前缀的二进制字符串,切片去除前缀即可拿到纯数字:
python
num = 10
res = bin(num)
print(res) # '0b1010'
print(res[2:]) # 去掉前缀:'1010'
知识点 :
s[2:]为字符串切片,代表从索引下标2开始截取至字符串末尾。
(2)oct(num):十进制 → 八进制
返回携带0o前缀的八进制字符串:
python
num = 10
print(oct(num)) # '0o12'
print(oct(num)[2:]) # '12'
(3)hex(num):十进制 → 十六进制
返回携带0x前缀的小写十六进制字符串,可通过upper()转大写:
python
num = 31
print(hex(num)) # '0x1f'
print(hex(num)[2:]) # '1f'
print(hex(num).upper()) # '0X1F'
知识点 :
str.upper()会将字符串内小写英文字母转为大写,数字、符号、中文不受影响;字符串不可变,该方法仅返回新字符串,不会修改原变量。
(4)int() 万能解析:任意进制字符串 → 十进制
语法:int(进制字符串, base=进制基数)
base取值范围:2 ~ 36,0-9、a-z依次映射数位数值;- 字符串自带
0b/0o/0x前缀不影响解析结果。
python
# 二进制转十进制
print(int('1010', 2)) # 10
print(int('0b1010', 2)) # 10
# 八进制转十进制
print(int('12', 8)) # 10
print(int('0o12', 8)) # 10
# 十六进制转十进制
print(int('1f', 16)) # 31
print(int('0X1F', 16)) # 31
# 36进制(字母z代表数值35)
print(int('z', 36)) # 35
三、float 浮点数类型
3.1 定义
浮点数即带小数点的数值,支持常规小数、科学计数法两种写法:
python
f1 = 3.14
f2 = -0.5
# e 代表10的幂次
f3 = 1.2e3 # 等价 1.2 * 10^3 = 1200.0
f4 = 5e-2 # 等价 5 * 10^-2 = 0.05
print(type(f1)) # <class 'float'>
补充说明 :C/C++、Java区分
float单精度、double双精度;Python仅提供float,底层等价于双精度double。
3.2 经典问题:浮点数精度丢失
计算机采用二进制存储小数,无法精确表达部分十进制小数,运算会产生极小尾差:
python
print(0.1 + 0.2) # 输出: 0.30000000000000004,而非0.3
解决方案:金融、金额高精度计算使用标准库decimal.Decimal,必须传入字符串构造对象,禁止直接传入浮点数:
python
from decimal import Decimal
res = Decimal("0.1") + Decimal("0.2")
print(res) # 精确输出 0.3
3.3 特殊浮点常量
Python支持无穷大、无穷小、非数字nan三种特殊浮点值:
python
print(float('inf')) # 正无穷大
print(float('-inf')) # 负无穷大
print(float('nan')) # 非数字,无法参与等值比较
print(10 / float('inf')) # 0.0
四、bool 布尔类型
4.1 定义
布尔类型仅有True、False两个固定值,首字母必须大写;布尔是int子类,数值等价:True=1,False=0,可直接参与算术运算。
python
flag1 = True
flag2 = False
print(True + 10) # 11
print(False + 5) # 5
4.2 布尔真假判定规则
任意数据均可通过bool()强制转换布尔值,判定为False的固定假值清单 :
0、0.0、空字符串""、空列表[]、空元组()、空字典{}、空集合set()、None
除此以外所有数据均判定为真值:
python
print(bool(0)) # False
print(bool(-99)) # True
print(bool("")) # False
print(bool("Python")) # True
五、数字类型强制转换
5.1 int() 转为整数
- float转int:直接截断小数部分,不会四舍五入;
- 纯数字字符串可正常转换;
- 带小数点的字符串(如
"3.14")无法直接用int()转换。
python
int(3.99) # 3,截断小数,不四舍五入
int("-66") # -66
# int("3.14") # 直接报错
5.2 float() 转为浮点数
整数、合法数字字符串均可转为浮点型:
python
print(float(7)) # 7.0
print(float("2.28")) # 2.28
5.3 bool() 转为布尔值
前文已完整演示,常用于空值校验、if条件分支判断。
📝全文总结
本文主要讲解了:
-
数字类型分为
int(整数)、float(浮点数)、bool(布尔)三类,布尔是整数子类; -
int整数无大小限制,支持多种进制写法,配套bin/oct/hex/int完成进制互转; -
float底层双精度存储,天然存在精度丢失,金融计算务必使用Decimal; -
bool继承自int,仅有两个取值True=1,False=0,是条件判断核心; -
int()、float()、bool()可完成类型互相强制转换。
下期预告: 下一篇将详解字符串 str,包含索引、切片、转义字符、格式化输出以及高频内置方法。