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)

只有TrueFalse两个值,直接用三个逻辑运算符andornot组合就行:

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 强制命名规则

违反下面的规则会直接报语法错误:

  1. 只能由字母、数字、下划线组成
  2. 不能以数字开头
  3. 区分大小写(Namename是两个不同的变量)
  4. 不能用Python关键字(比如ifclassfor,可以用keyword.kwlist查看所有关键字)

4.2 推荐命名约定(PEP 8规范)

虽然不会报错,但遵循PEP 8能让你的代码更专业、更易读:

  • 普通变量/函数名:snake_case(全小写,单词用下划线分隔),比如user_namecalc_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. 避坑总结与最佳实践

  1. 浮点数绝对不能直接用于金额计算,用decimal.Decimal
  2. 浮点数不要直接比相等,用math.isclose(a, b)
  3. 检查None必须用is,不能用==
  4. 变量名要有描述性,别用xytemp这种模糊的名字(除非是临时循环变量)
  5. Python 3.6+只推荐用f-string,不要用旧的%format()
  6. 遵循PEP 8命名规范,让代码更易读

相关教程

这部分是Python的「地基」,建议多写几遍类型转换、格式化和布尔判断的小代码,把踩过的坑记下来!

总结

本文带你梳理了Python最核心的5个基础数据类型:

  • int:任意大小的整数
  • float:带小数点的数(注意精度)
  • str:处理文本的唯一内置类型(推荐f-string格式化)
  • bool:只有True/False,用于逻辑判断
  • None:表示“无值”的特殊对象

同时掌握了变量的命名规则、类型检查与转换方法。这些基础知识虽然简单,但却是后续学习列表、字典、函数、类的关键!