Python数据类型和变量完全指南
引言
无论你是写自动化脚本、AI模型,还是Web后端代码,一切逻辑的起点都是「用合适的容器装对数据」——容器就是Python的「变量」,装的东西就是「数据类型」。这俩概念看起来简单,但踩过的坑(比如浮点数精度、变量重覆盖)够新手挠好久。本文会用清晰的示例+避坑指南,带你彻底搞懂这部分基础。
1. 数值类型
数值类型是Python里处理量化数据的核心,支持整数、浮点数,还有可选的复数(本文暂不涉及,日常开发用得极少)。
1.1 整数 (int)
Python的整数没有大小限制!不管是1位数还是写满一行的质数,都能直接处理:
age = 25
account_balance = -300 # 负数也没问题
default_count = 0
多进制写法与大数可读性
除了默认的十进制,Python还支持其他三种常用进制:
- 二进制:
0b开头
- 八进制:
0o开头
- 十六进制:
0x开头
Python 3.6+ 引入了下划线分隔符,写百万级以上的数再也不用数位数啦:
# 多进制示例
binary_10 = 0b1010
oct_493 = 0o755
hex_255 = 0xff
# 下划线提升可读性
one_million = 1_000_000
long_hex = 0x12_34_56
1.2 浮点数 (float)
浮点数就是带小数点的数,也支持科学计数法(适合处理超大/超小的数值):
pi_approx = 3.14159
earth_circumference = 4.0075e7 # 4.0075×10^7 千米
atomic_size = 1e-10 # 1×10^(-10) 米
避坑:浮点数精度问题!
这不是Python的bug,是IEEE 754浮点数的通用限制——它只能用二进制近似表示部分十进制小数,比如0.1+0.2:
print(0.1 + 0.2) # 输出 0.30000000000000004,不是0.3!
如果需要高精度(比如金额计算),绝对不能直接用float,请换decimal模块:
from decimal import Decimal
total = Decimal('0.1') + Decimal('0.2')
print(total) # 完美输出 0.3
2. 字符串 (str)
字符串是Python里处理文本的唯一内置类型,用单/双/三引号括起来(单双引号功能完全一致,选一种就行,或者用来互相嵌套避免转义)。
2.1 转义字符与原始字符串
反斜杠\可以转义特殊字符,但处理Windows路径、正则表达式时会很麻烦,这时候加个r前缀变成原始字符串,所有反斜杠都只当普通字符用:
# 普通字符串(转义单引号)
i_am_ok = 'I\'m OK'
# 双引号嵌套单引号(更简洁)
he_said = "He said 'Hello'"
# 原始字符串(Windows路径、正则都推荐用)
win_path = r'C:\Users\道满\Documents'
email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
2.2 多行字符串与文档字符串
用三引号'''或"""可以直接写多行文本,不需要手动加换行符——而且三双引号还是Python函数/类/模块的标准文档字符串格式:
# 多行诗
tang_poem = """静夜思
唐·李白
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。"""
# 函数文档字符串(生成API文档、编辑器提示都靠它)
def calc_rect_area(length: float, width: float) -> float:
"""
计算矩形的面积
Args:
length: 矩形的长度
width: 矩形的宽度
Returns:
计算得到的矩形面积
"""
return length * width
2.3 推荐:f-string 格式化
Python有三种字符串格式化方式,但Python 3.6+只推荐用f-string——写法最简洁,性能也最好,还支持嵌入表达式和函数调用:
name = "道满"
score = 92.375
# 基础嵌入变量
msg1 = f"我是{name},本次测试得分{score}"
print(msg1)
# 嵌入表达式和函数
msg2 = f"明年我要涨{score + 5}分!分数取整是{round(score)}"
print(msg2)
# 格式控制(保留小数、对齐、百分比)
price = 1234.5
print(f"价格:{price:.2f}元") # 保留2位小数 → 1234.50
print(f"右对齐价格:{price:>10.2f}元") # 总宽度10 → 右对齐占10位
print(f"得分率:{score/100:.1%}") # 百分比格式 → 92.4%
3. 布尔值 (bool) & 空值 (None)
这两个类型虽然简单,但在条件判断、函数返回值里超级常用!
3.1 布尔值 (bool)
只有True和False两个值,直接用三个逻辑运算符and、or、not组合就行:
is_student = True
has_graduated = False
# 基础运算
print(True and False) # False(必须全True才True)
print(True or False) # True(只要有一个True就True)
print(not True) # False(取反)
# 条件判断场景
can_vote = is_student and (not has_graduated) and (age >= 18)
if can_vote:
print("可以参与学生会投票!")
3.2 空值 (None)
None是Python里唯一表示「没有值」的特殊对象,和0、空字符串、空列表都不一样!检查None的时候必须用is,不能用==:
# 示例:函数没有返回值时默认返回None
def greet(name):
print(f"你好,{name}!")
result = greet("道满")
if result is None:
print("这个函数没有返回任何有效数据")
4. 变量与命名规范
Python是动态类型语言——变量不需要提前声明类型,直接赋值就行,还能随时换类型:
x = 100 # int
print(type(x)) # <class 'int'>
x = "道满" # str
print(type(x)) # <class 'str'>
4.1 强制命名规则
违反下面的规则会直接报语法错误:
- 只能由字母、数字、下划线组成
- 不能以数字开头
- 区分大小写(
Name和name是两个不同的变量)
- 不能用Python关键字(比如
if、class、for,可以用keyword.kwlist查看所有关键字)
4.2 推荐命名约定(PEP 8规范)
虽然不会报错,但遵循PEP 8能让你的代码更专业、更易读:
- 普通变量/函数名:snake_case(全小写,单词用下划线分隔),比如
user_name、calc_avg_score
- 常量:ALL_CAPS(全大写,单词用下划线分隔),这只是约定,Python不会阻止修改
- 私有变量/函数:单下划线开头(约定俗成,模块外部不应该直接调用)
# 推荐写法
MAX_LOGIN_ATTEMPTS = 5 # 常量
def get_user_profile(_user_id): # 内部函数
pass
# 从typing模块导入Final(Python 3.8+),可以明确标记“不可修改”
from typing import Final
API_KEY: Final = "your-secret-key-here"
5. 类型检查与转换
5.1 类型检查
Python有两种常用的类型检查方法:
type():返回变量的精确类型
isinstance():判断变量是否属于某类或其子类(更灵活,推荐日常用)
num = 10
print(type(num)) # <class 'int'>
print(isinstance(num, int)) # True
print(isinstance(num, (int, float))) # True(可以传元组判断多个类型)
5.2 常用类型转换
Python提供了内置函数int()、float()、str()、bool()来转换类型,但要注意安全问题:
# 安全的转换(基本不会报错)
float_from_int = float(42) # 42.0
str_from_float = str(3.14) # "3.14"
# 有风险的转换(可能报错或丢失信息)
try:
int_from_str = int("abc") # 会报ValueError
except ValueError:
print("无法将非数字字符串转成整数!")
# bool()的“假值”规则:空/0/None都是False,其他都是True
print(bool(0)) # False
print(bool("")) # False
print(bool([])) # False
print(bool("道满")) # True
6. 综合小练习:简易成绩计算器
把上面学的所有知识串起来练手:
# 输入数据(变量)
student_name = "道满"
math_score = 87
english_score = 91.5
python_score = 95.8
# 数值运算
total_score = math_score + english_score + python_score
avg_score = total_score / 3
# 布尔判断
is_all_passed = math_score >= 60 and english_score >= 60 and python_score >= 60
# f-string格式化输出
print("--- 学生成绩报告 ---")
print(f"姓名:{student_name}")
print(f"总分:{total_score:.1f}")
print(f"平均分:{avg_score:.2f}")
print(f"是否全部及格:{'✅' if is_all_passed else '❌'}")
7. 避坑总结与最佳实践
- 浮点数绝对不能直接用于金额计算,用
decimal.Decimal
- 浮点数不要直接比相等,用
math.isclose(a, b)
- 检查None必须用
is,不能用==
- 变量名要有描述性,别用
x、y、temp这种模糊的名字(除非是临时循环变量)
- Python 3.6+只推荐用f-string,不要用旧的
%或format()
- 遵循PEP 8命名规范,让代码更易读
相关教程
这部分是Python的「地基」,建议多写几遍类型转换、格式化和布尔判断的小代码,把踩过的坑记下来!
总结
本文带你梳理了Python最核心的5个基础数据类型:
- int:任意大小的整数
- float:带小数点的数(注意精度)
- str:处理文本的唯一内置类型(推荐f-string格式化)
- bool:只有True/False,用于逻辑判断
- None:表示“无值”的特殊对象
同时掌握了变量的命名规则、类型检查与转换方法。这些基础知识虽然简单,但却是后续学习列表、字典、函数、类的关键!