Python基础数据类型(一):数字类型

🌈个人主页:聆风吟_

🔥系列专栏: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个子类型:

  1. int:整数
  2. float:浮点数(小数)
  3. bool:布尔类型,是int的子类,仅存在TrueFalse两个取值

使用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 定义

布尔类型仅有TrueFalse两个固定值,首字母必须大写;布尔是int子类,数值等价:True=1False=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条件分支判断。


📝全文总结

本文主要讲解了:

  1. 数字类型分为 int(整数)、float(浮点数)、bool(布尔)三类,布尔是整数子类;

  2. int 整数无大小限制,支持多种进制写法,配套bin/oct/hex/int完成进制互转;

  3. float 底层双精度存储,天然存在精度丢失,金融计算务必使用 Decimal

  4. bool 继承自 int,仅有两个取值True=1False=0,是条件判断核心;

  5. int()float()bool() 可完成类型互相强制转换。

下期预告: 下一篇将详解字符串 str,包含索引、切片、转义字符、格式化输出以及高频内置方法。

相关推荐
Tisfy1 小时前
LeetCode 3838.带权单词映射:求和、取模、拼接(附python一行版)
python·算法·leetcode·字符串·题解·模拟·取模
NaclarbCSDN1 小时前
我写了一个命令行书签管理器,然后抛弃了浏览器书签栏
linux·git·python·github
小灰灰搞电子1 小时前
C++ boost::container 详解:高性能容器库完全指南
开发语言·c++·boost
Brilliantwxx1 小时前
【C++】 C++11 知识点梳理(上)
开发语言·c++
飞天狗1111 小时前
零基础JavaWeb入门——第4课:表单处理 —— 浏览器怎么把数据发给服务器
java·开发语言·前端·后端·servlet
多彩电脑1 小时前
向AIDE(安卓设备上的Android Studio)导入aar库
android·java·开发语言·androidx
江屿风2 小时前
C++图论基础单源最短路-常规版dijkstra算法/堆优化版dijkstra算法/bellman-ford 算法/spfa 算法流食般投喂
开发语言·c++·笔记·算法·图论
摇滚侠2 小时前
MyBatis 入门到项目实战 MyBatis 逆向工程 62
java·开发语言·mybatis
ch.ju2 小时前
Java Programming Chapter 4——Multi-level inheritance
java·开发语言